]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
score.md: Update pattern tablejump.
authorChen Liqin <liqin@sunnorth.com.cn>
Fri, 17 Aug 2007 01:52:08 +0000 (01:52 +0000)
committerChen Liqin <liqin@gcc.gnu.org>
Fri, 17 Aug 2007 01:52:08 +0000 (01:52 +0000)
2007-08-17  Chen liqin  <liqin@sunnorth.com.cn>

        * config/score/score.md : Update pattern tablejump.
        * config/score/score.c : Update score_initialize_trampoline
        function.
        * config/score/score.h (TRAMPOLINE_TEMPLATE): Added macro.
        (TRAMPOLINE_INSNS, TRAMPOLINE_SIZE) Update macro.
        * doc/contrib.texi: Add my entry.

From-SVN: r127576

gcc/ChangeLog
gcc/config/score/score.c
gcc/config/score/score.h
gcc/config/score/score.md
gcc/doc/contrib.texi

index 9bcec827b38878fd5c09888af7d5b4b7fe53c3da..d9b36fa3f40125cd531939042c57e89c15e9087d 100644 (file)
@@ -1,3 +1,12 @@
+2007-08-17  Chen liqin  <liqin@sunnorth.com.cn>
+
+        * config/score/score.md : Update pattern tablejump.
+        * config/score/score.c : Update score_initialize_trampoline 
+        function.
+        * config/score/score.h (TRAMPOLINE_TEMPLATE): Added macro.
+        (TRAMPOLINE_INSNS, TRAMPOLINE_SIZE) Update macro.
+        * doc/contrib.texi: Add my entry.
+
 2007-08-02  Andreas Krebbel  <krebbel1@de.ibm.com>
 
        * config/s390/s390.md ("*xordi3_cconly"): Change xr to xg.
index 0b2c67315b92295f8b3d8011a1e36c886fbdb353..24457161d9bb6b571479806b0e761b9049786dd4 100644 (file)
@@ -751,30 +751,13 @@ score_initialize_trampoline (rtx ADDR, rtx FUNC, rtx CHAIN)
 #define FFCACHE          "_flush_cache"
 #define CODE_SIZE        (TRAMPOLINE_INSNS * UNITS_PER_WORD)
 
-  unsigned int tramp[TRAMPOLINE_INSNS] = {
-    0x8103bc56,                         /* mv      r8, r3          */
-    0x9000bc05,                         /* bl      0x0x8           */
-    0xc1238000 | (CODE_SIZE - 8),       /* lw      r9, &func       */
-    0xc0038000
-    | (STATIC_CHAIN_REGNUM << 21)
-    | (CODE_SIZE - 4),                  /* lw  static chain reg, &chain */
-    0x8068bc56,                         /* mv      r3, r8          */
-    0x8009bc08,                         /* br      r9              */
-    0x0,
-    0x0,
-    };
   rtx pfunc, pchain;
-  int i;
-
-  for (i = 0; i < TRAMPOLINE_INSNS; i++)
-    emit_move_insn (gen_rtx_MEM (ptr_mode, plus_constant (ADDR, i << 2)),
-                    GEN_INT (tramp[i]));
 
   pfunc = plus_constant (ADDR, CODE_SIZE);
-  pchain = plus_constant (ADDR, CODE_SIZE + GET_MODE_SIZE (ptr_mode));
+  pchain = plus_constant (ADDR, CODE_SIZE + GET_MODE_SIZE (SImode));
 
-  emit_move_insn (gen_rtx_MEM (ptr_mode, pfunc), FUNC);
-  emit_move_insn (gen_rtx_MEM (ptr_mode, pchain), CHAIN);
+  emit_move_insn (gen_rtx_MEM (SImode, pfunc), FUNC);
+  emit_move_insn (gen_rtx_MEM (SImode, pchain), CHAIN);
   emit_library_call (gen_rtx_SYMBOL_REF (Pmode, FFCACHE),
                      0, VOIDmode, 2,
                      ADDR, Pmode,
@@ -1301,8 +1284,11 @@ score_print_operand_address (FILE *file, rtx x)
                          INTVAL (addr.offset));
                 break;
               default:
-                fprintf (file, "[%s,%ld]", reg_names[REGNO (addr.reg)],
-                         INTVAL (addr.offset));
+                if (INTVAL(addr.offset) == 0)
+                  fprintf(file, "[%s]", reg_names[REGNO (addr.reg)]);
+                else 
+                  fprintf(file, "[%s, %ld]", reg_names[REGNO (addr.reg)], 
+                          INTVAL(addr.offset));
                 break;
               }
           }
index 3d36a3805edf642dd5856b37d488aaf8be325d34..bc64f9309ca4dea6d3e7337f0e6642455c20d2fc 100644 (file)
@@ -629,12 +629,25 @@ typedef struct score_args
   fprintf (FILE, " .set nor1 \n");                                 \
 }
 
+#define TRAMPOLINE_TEMPLATE(STREAM)                                \
+{                                                                  \
+  fprintf (STREAM, "\t.set r1\n");                                 \
+  fprintf (STREAM, "\tmv r31, r3\n");                              \
+  fprintf (STREAM, "\tbl nextinsn\n");                             \
+  fprintf (STREAM, "nextinsn:\n");                                 \
+  fprintf (STREAM, "\tlw r1, [r3, 6*4-8]\n");                      \
+  fprintf (STREAM, "\tlw r23, [r3, 6*4-4]\n");                     \
+  fprintf (STREAM, "\tmv r3, r31\n");                              \
+  fprintf (STREAM, "\tbr! r1\n");                                  \
+  fprintf (STREAM, "\tnop!\n");                                    \
+  fprintf (STREAM, "\t.set nor1\n");                               \
+}
+
 /* Trampolines for Nested Functions.  */
-#define TRAMPOLINE_INSNS                8
+#define TRAMPOLINE_INSNS                6
 
 /* A C expression for the size in bytes of the trampoline, as an integer.  */
-#define TRAMPOLINE_SIZE \
-  (TRAMPOLINE_INSNS * GET_MODE_SIZE (SImode) + GET_MODE_SIZE (ptr_mode) * 2)
+#define TRAMPOLINE_SIZE                (24 + GET_MODE_SIZE (ptr_mode) * 2)
 
 /* A C statement to initialize the variable parts of a trampoline.
    ADDR is an RTX for the address of the trampoline; FNADDR is an
index 7d3352947f0b5681c95ce6944a9a921adb84a215..4d2300ba1dfb020c5effe2250ad77a28edc7559c 100644 (file)
    (use (label_ref (match_operand 1 "" "")))]
   ""
 {
-  if (GET_MODE (operands[0]) != ptr_mode)
-    gcc_unreachable ();
   emit_jump_insn (gen_tablejump_internal1 (operands[0], operands[1]));
   DONE;
 })
index 16c8af58de4b4308aa80a6df5f905f4ceb49c8f5..7e3d4b11e1701846da04dd52e31465e8d7b1325e 100644 (file)
@@ -513,6 +513,10 @@ patches.
 @item
 Robert Lipe for OpenServer support, new testsuites, testing, etc.
 
+@item
+Chen Liqin for various S+core related fixes/improvement, and for
+maintaining the S+core port.
+
 @item
 Weiwen Liu for testing and various bug fixes.