From edb39f41641611afd98137f3c20d9920fe554701 Mon Sep 17 00:00:00 2001 From: ghazi Date: Mon, 8 Oct 2001 21:55:05 +0000 Subject: [PATCH] * romp-protos.h (romp_initialize_trampoline): New function. * romp.c (romp_initialize_trampoline): Likewise. * romp.h (INITIALIZE_TRAMPOLINE): Define in terms of romp_initialize_trampoline. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@46104 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/config/romp/romp-protos.h | 1 + gcc/config/romp/romp.c | 25 +++++++++++++++++++++++++ gcc/config/romp/romp.h | 32 +------------------------------- 4 files changed, 34 insertions(+), 31 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9069a13f935..e8f087cf292 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2001-10-08 Kaveh R. Ghazi + * romp-protos.h (romp_initialize_trampoline): New function. + * romp.c (romp_initialize_trampoline): Likewise. + * romp.h (INITIALIZE_TRAMPOLINE): Define in terms of + romp_initialize_trampoline. + +2001-10-08 Kaveh R. Ghazi + * m68k/3b1.h (ASM_OUTPUT_SOURCE_LINE): Don't reference `last_linenum'. * m68k/auxas.h (ASM_OUTPUT_SOURCE_LINE): Likewise. * m68k/crds.h (ASM_OUTPUT_SOURCE_LINE): Likewise. diff --git a/gcc/config/romp/romp-protos.h b/gcc/config/romp/romp-protos.h index fcf2439a54c..8ec306f3802 100644 --- a/gcc/config/romp/romp-protos.h +++ b/gcc/config/romp/romp-protos.h @@ -47,6 +47,7 @@ extern int reg_15_operand PARAMS ((rtx, enum machine_mode)); extern int float_binary PARAMS ((rtx, enum machine_mode)); extern int float_unary PARAMS ((rtx, enum machine_mode)); extern int float_conversion PARAMS ((rtx, enum machine_mode)); +extern void romp_initialize_trampoline PARAMS ((rtx, rtx, rtx)); #endif /* RTX_CODE */ extern int first_reg_to_save PARAMS ((void)); diff --git a/gcc/config/romp/romp.c b/gcc/config/romp/romp.c index 6cdb77e80f1..2d9f9772ecd 100644 --- a/gcc/config/romp/romp.c +++ b/gcc/config/romp/romp.c @@ -2046,3 +2046,28 @@ romp_debugger_arg_correction (offset) return (offset - fp_to_argp); } + +void +romp_initialize_trampoline (tramp, fnaddr, cxt) + rtx tramp, fnaddr, cxt; +{ + rtx addr, temp, val; + + temp = expand_simple_binop (SImode, PLUS, tramp, GEN_INT (4), + 0, 1, OPTAB_LIB_WIDEN); + emit_move_insn (gen_rtx_MEM (SImode, memory_address (SImode, tramp)), temp); + + val = force_reg (SImode, cxt); + addr = memory_address (HImode, plus_constant (tramp, 10)); + emit_move_insn (gen_rtx_MEM (HImode, addr), gen_lowpart (HImode, val)); + temp = expand_shift (RSHIFT_EXPR, SImode, val, build_int_2 (16, 0), 0, 1); + addr = memory_address (HImode, plus_constant (tramp, 6)); + emit_move_insn (gen_rtx_MEM (HImode, addr), gen_lowpart (HImode, temp)); + + val = force_reg (SImode, fnaddr); + addr = memory_address (HImode, plus_constant (tramp, 24)); + emit_move_insn (gen_rtx_MEM (HImode, addr), gen_lowpart (HImode, val)); + temp = expand_shift (RSHIFT_EXPR, SImode, val, build_int_2 (16, 0), 0, 1); + addr = memory_address (HImode, plus_constant (tramp, 20)); + emit_move_insn (gen_rtx_MEM (HImode, addr), gen_lowpart (HImode, temp)); +} diff --git a/gcc/config/romp/romp.h b/gcc/config/romp/romp.h index 2e517a19cb5..d1d3174d990 100644 --- a/gcc/config/romp/romp.h +++ b/gcc/config/romp/romp.h @@ -785,37 +785,7 @@ struct rt_cargs {int gregs, fregs; }; data area. */ #define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, CXT) \ -{ \ - rtx _addr, _temp; \ - rtx _val; \ - \ - _temp = expand_binop (SImode, add_optab, ADDR, \ - GEN_INT (4), \ - 0, 1, OPTAB_LIB_WIDEN); \ - emit_move_insn (gen_rtx_MEM (SImode, \ - memory_address (SImode, ADDR)), _temp); \ - \ - _val = force_reg (SImode, CXT); \ - _addr = memory_address (HImode, plus_constant (ADDR, 10)); \ - emit_move_insn (gen_rtx_MEM (HImode, _addr), \ - gen_lowpart (HImode, _val)); \ - _temp = expand_shift (RSHIFT_EXPR, SImode, _val, \ - build_int_2 (16, 0), 0, 1); \ - _addr = memory_address (HImode, plus_constant (ADDR, 6)); \ - emit_move_insn (gen_rtx_MEM (HImode, _addr), \ - gen_lowpart (HImode, _temp)); \ - \ - _val = force_reg (SImode, FNADDR); \ - _addr = memory_address (HImode, plus_constant (ADDR, 24)); \ - emit_move_insn (gen_rtx_MEM (HImode, _addr), \ - gen_lowpart (HImode, _val)); \ - _temp = expand_shift (RSHIFT_EXPR, SImode, _val, \ - build_int_2 (16, 0), 0, 1); \ - _addr = memory_address (HImode, plus_constant (ADDR, 20)); \ - emit_move_insn (gen_rtx_MEM (HImode, _addr), \ - gen_lowpart (HImode, _temp)); \ - \ -} + romp_initialize_trampoline (ADDR, FNADDR, CXT) /* Definitions for register eliminations. -- 2.11.4.GIT