aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2006-04-26 08:38:58 +0000
committerJoseph Myers <joseph@codesourcery.com>2006-04-26 08:38:58 +0000
commit2d12d46d2312fb2677ad030f456d36628c3496eb (patch)
treee56aa95db96075f34132183e533e121d88f97c0a
parent8b2708c7410e840ce83d9cc0a5ab1db37c2273d6 (diff)
2006-04-26 Joshua Kinard <kumba@gentoo.org> PR target/25871 * gcc/config/mips/mips.h (TRAMPOLINE_TEMPLATE): Avoid 32-bit moves with 64-bit pointers. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/csl-gxxpro-3_4-branch@113272 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--ChangeLog.csl9
-rw-r--r--gcc/config/mips/mips.h15
2 files changed, 21 insertions, 3 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl
index 00b83ffccd6..fb185dcbd32 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -1,3 +1,12 @@
+2006-04-26 Joseph Myers <joseph@codesourcery.com>
+
+ From Bugzilla:
+ 2006-04-26 Joshua Kinard <kumba@gentoo.org>
+
+ PR target/25871
+ * gcc/config/mips/mips.h (TRAMPOLINE_TEMPLATE): Avoid 32-bit moves
+ with 64-bit pointers.
+
2006-04-24 Joseph Myers <joseph@codesourcery.com>
* gcc/config/mips/linux64.h (DWARF_OFFSET_SIZE): Remove.
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 1fb5ae176f0..134c338b557 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -2470,29 +2470,38 @@ typedef struct mips_args {
#define TRAMPOLINE_TEMPLATE(STREAM) \
{ \
- fprintf (STREAM, "\t.word\t0x03e00821\t\t# move $1,$31\n"); \
+ 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 (abicalls)\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 (abicalls)\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"); \
} \