OSDN Git Service

2006-05-02 Joshua Kinard <kumba@gentoo.org>
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 2 May 2006 12:57:52 +0000 (12:57 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 2 May 2006 12:57:52 +0000 (12:57 +0000)
PR target/25871
* gcc/config/mips/mips.h (TRAMPOLINE_TEMPLATE): Avoid 32-bit moves
with 64-bit pointers.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@113460 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mips/mips.h

index 01df171..e1e0e22 100644 (file)
@@ -1,3 +1,9 @@
+2006-05-02  Joshua Kinard  <kumba@gentoo.org>
+
+       PR target/25871
+       * gcc/config/mips/mips.h (TRAMPOLINE_TEMPLATE): Avoid 32-bit moves
+       with 64-bit pointers.
+
 2006-05-02  Paul Brook  <paul@codesourcery.com>
 
        * config/arm/arm.c (add_minipool_forward_ref): Check if insn
index 3823963..60e1aca 100644 (file)
@@ -2023,31 +2023,36 @@ typedef struct mips_args {
    This code should not include a label--the label is taken care of
    automatically.  */
 
-#define TRAMPOLINE_TEMPLATE(STREAM)                                     \
-{                                                                       \
-  fprintf (STREAM, "\t.word\t0x03e00821\t\t# move   $1,$31\n");                \
+#define TRAMPOLINE_TEMPLATE(STREAM)                                    \
+{                                                                      \
+  if (ptr_mode == DImode)                                              \
+    fprintf (STREAM, "\t.word\t0x03e0082d\t\t# dmove   $1,$31\n");     \
+  else                                                                 \
+    fprintf (STREAM, "\t.word\t0x03e00821\t\t# move   $1,$31\n");      \
   fprintf (STREAM, "\t.word\t0x04110001\t\t# bgezal $0,.+8\n");                \
   fprintf (STREAM, "\t.word\t0x00000000\t\t# nop\n");                  \
   if (ptr_mode == DImode)                                              \
     {                                                                  \
       fprintf (STREAM, "\t.word\t0xdfe30014\t\t# ld     $3,20($31)\n");        \
       fprintf (STREAM, "\t.word\t0xdfe2001c\t\t# ld     $2,28($31)\n");        \
+      fprintf (STREAM, "\t.word\t0x0060c82d\t\t# dmove  $25,$3\n");    \
     }                                                                  \
   else                                                                 \
     {                                                                  \
       fprintf (STREAM, "\t.word\t0x8fe30014\t\t# lw     $3,20($31)\n");        \
       fprintf (STREAM, "\t.word\t0x8fe20018\t\t# lw     $2,24($31)\n");        \
+      fprintf (STREAM, "\t.word\t0x0060c821\t\t# move   $25,$3\n");    \
     }                                                                  \
-  fprintf (STREAM, "\t.word\t0x0060c821\t\t# move   $25,$3 (abicalls)\n"); \
   fprintf (STREAM, "\t.word\t0x00600008\t\t# jr     $3\n");            \
-  fprintf (STREAM, "\t.word\t0x0020f821\t\t# move   $31,$1\n");                \
   if (ptr_mode == DImode)                                              \
     {                                                                  \
+      fprintf (STREAM, "\t.word\t0x0020f82d\t\t# dmove   $31,$1\n");   \
       fprintf (STREAM, "\t.dword\t0x00000000\t\t# <function address>\n"); \
       fprintf (STREAM, "\t.dword\t0x00000000\t\t# <static chain value>\n"); \
     }                                                                  \
   else                                                                 \
     {                                                                  \
+      fprintf (STREAM, "\t.word\t0x0020f821\t\t# move   $31,$1\n");    \
       fprintf (STREAM, "\t.word\t0x00000000\t\t# <function address>\n"); \
       fprintf (STREAM, "\t.word\t0x00000000\t\t# <static chain value>\n"); \
     }                                                                  \