diff options
author | Edgar E. Iglesias <edgar.iglesias@gmail.com> | 2013-02-16 17:42:30 +0000 |
---|---|---|
committer | Michael Eager <eager@gcc.gnu.org> | 2013-02-16 17:42:30 +0000 |
commit | 8ec77be0fc99e3a1ba0abd990175ca5b3bc7cfe9 (patch) | |
tree | 8db6827c5afa13cddf755039dc7fffa850c2fd37 /gcc | |
parent | b41288b3a57a382c7e06ef0f847584f06583ceb4 (diff) | |
download | gcc-8ec77be0fc99e3a1ba0abd990175ca5b3bc7cfe9.zip gcc-8ec77be0fc99e3a1ba0abd990175ca5b3bc7cfe9.tar.gz gcc-8ec77be0fc99e3a1ba0abd990175ca5b3bc7cfe9.tar.bz2 |
microblaze.c (microblaze_asm_trampoline_template): Replace with a microblaze version.
* config/microblaze/microblaze.c (microblaze_asm_trampoline_template):
Replace with a microblaze version.
(microblaze_trampoline_init): Adapt for microblaze.
* gcc/config/microblaze/microblaze.h (TRAMPOLINE_SIZE): Adapt for
microblaze.
From-SVN: r196103
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/microblaze/microblaze.c | 18 | ||||
-rw-r--r-- | gcc/config/microblaze/microblaze.h | 3 |
3 files changed, 17 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 07d5b8a..555e946 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2013-02-16 Edgar E. Iglesias <edgar.iglesias@gmail.com> + + * config/microblaze/microblaze.c (microblaze_asm_trampoline_template): + Replace with a microblaze version. + (microblaze_trampoline_init): Adapt for microblaze. + * gcc/config/microblaze/microblaze.h (TRAMPOLINE_SIZE): Adapt for + microblaze. + 2013-02-16 Jakub Jelinek <jakub@redhat.com> Dodji Seketeli <dodji@redhat.com> diff --git a/gcc/config/microblaze/microblaze.c b/gcc/config/microblaze/microblaze.c index 8095f82..90c962b 100644 --- a/gcc/config/microblaze/microblaze.c +++ b/gcc/config/microblaze/microblaze.c @@ -2776,14 +2776,10 @@ microblaze_elf_asm_init_sections (void) static void microblaze_asm_trampoline_template (FILE *f) { - fprintf (f, "\t.word\t0x03e00821\t\t# move $1,$31\n"); - fprintf (f, "\t.word\t0x04110001\t\t# bgezal $0,.+8\n"); - fprintf (f, "\t.word\t0x00000000\t\t# nop\n"); - fprintf (f, "\t.word\t0x8fe30014\t\t# lw $3,20($31)\n"); - fprintf (f, "\t.word\t0x8fe20018\t\t# lw $2,24($31)\n"); - fprintf (f, "\t.word\t0x0060c821\t\t# move $25,$3 (abicalls)\n"); - fprintf (f, "\t.word\t0x00600008\t\t# jr $3\n"); - fprintf (f, "\t.word\t0x0020f821\t\t# move $31,$1\n"); + fprintf (f, "\tmfs r18, rpc\n"); + fprintf (f, "\tlwi r3, r18, 16\n"); + fprintf (f, "\tlwi r18, r18, 20\n"); + fprintf (f, "\tbra r18\n"); /* fprintf (f, "\t.word\t0x00000000\t\t# <function address>\n"); */ /* fprintf (f, "\t.word\t0x00000000\t\t# <static chain value>\n"); */ } @@ -2797,11 +2793,11 @@ microblaze_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value) rtx mem; emit_block_move (m_tramp, assemble_trampoline_template (), - GEN_INT (8*UNITS_PER_WORD), BLOCK_OP_NORMAL); + GEN_INT (6*UNITS_PER_WORD), BLOCK_OP_NORMAL); - mem = adjust_address (m_tramp, SImode, 8); + mem = adjust_address (m_tramp, SImode, 16); emit_move_insn (mem, chain_value); - mem = adjust_address (m_tramp, SImode, 12); + mem = adjust_address (m_tramp, SImode, 20); emit_move_insn (mem, fnaddr); } diff --git a/gcc/config/microblaze/microblaze.h b/gcc/config/microblaze/microblaze.h index 5b64e39..3276145 100644 --- a/gcc/config/microblaze/microblaze.h +++ b/gcc/config/microblaze/microblaze.h @@ -499,7 +499,8 @@ typedef struct microblaze_args #define EXIT_IGNORE_STACK 1 -#define TRAMPOLINE_SIZE (32 + 8) +/* 4 insns + 2 words of data. */ +#define TRAMPOLINE_SIZE (6 * 4) #define TRAMPOLINE_ALIGNMENT 32 |