From 8ec77be0fc99e3a1ba0abd990175ca5b3bc7cfe9 Mon Sep 17 00:00:00 2001 From: "Edgar E. Iglesias" Date: Sat, 16 Feb 2013 17:42:30 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 ++++++++ gcc/config/microblaze/microblaze.c | 18 +++++++----------- gcc/config/microblaze/microblaze.h | 3 ++- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 07d5b8a32f3..555e946d8dd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2013-02-16 Edgar E. Iglesias + + * 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 Dodji Seketeli diff --git a/gcc/config/microblaze/microblaze.c b/gcc/config/microblaze/microblaze.c index 8095f8236d7..90c962b2eab 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# \n"); */ /* fprintf (f, "\t.word\t0x00000000\t\t# \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 5b64e39bcfe..327614544f2 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 -- 2.30.2