diff options
author | Joseph Myers <joseph@codesourcery.com> | 2006-04-26 08:40:26 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2006-04-26 08:40:26 +0000 |
commit | 1463b1c4f91cb6dcb4b61543e04053f1152bdb6d (patch) | |
tree | f4529e26f92944d2ae78408aba81b398db7210ab | |
parent | 7b107f18c7c46c4c24b7910c0541df9478734c7e (diff) |
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.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/csl/sourcerygxx-4_1@113273 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | ChangeLog.csl | 9 | ||||
-rw-r--r-- | gcc/config/mips/mips.h | 15 |
2 files changed, 21 insertions, 3 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl index 20aeecea5e0..888d914d331 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-25 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 6dca88967d8..4e56d8df4f5 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -2148,29 +2148,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"); \ } \ |