Patch to get romp target working
Kaveh R. Ghazi
ghazi@caip.rutgers.edu
Mon Oct 8 14:46:00 GMT 2001
> From: Richard Henderson <rth@redhat.com>
>
> On Mon, Oct 08, 2001 at 04:23:33PM -0400, Kaveh R. Ghazi wrote:
> > + rtx _addr, _temp;
> > + rtx _val;
>
> Lose the underscores.
>
> > + _temp = expand_binop (SImode, add_optab, tramp, GEN_INT (4),
> > + 0, 1, OPTAB_LIB_WIDEN);
>
> I think preferred procedure is to use expand_simple_binop.
> r~
How's this one?
2001-10-08 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* 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.
diff -rup orig/egcs-CVS20011008/gcc/config/romp/romp-protos.h egcs-CVS20011008/gcc/config/romp/romp-protos.h
--- orig/egcs-CVS20011008/gcc/config/romp/romp-protos.h Fri Jul 6 16:31:19 2001
+++ egcs-CVS20011008/gcc/config/romp/romp-protos.h Mon Oct 8 17:27:41 2001
@@ -47,6 +47,7 @@ extern int reg_15_operand PARAMS ((rtx,
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 -rup orig/egcs-CVS20011008/gcc/config/romp/romp.c egcs-CVS20011008/gcc/config/romp/romp.c
--- orig/egcs-CVS20011008/gcc/config/romp/romp.c Fri Aug 10 16:30:25 2001
+++ egcs-CVS20011008/gcc/config/romp/romp.c Mon Oct 8 17:36:48 2001
@@ -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 -rup orig/egcs-CVS20011008/gcc/config/romp/romp.h egcs-CVS20011008/gcc/config/romp/romp.h
--- orig/egcs-CVS20011008/gcc/config/romp/romp.h Tue Sep 11 13:36:10 2001
+++ egcs-CVS20011008/gcc/config/romp/romp.h Mon Oct 8 17:27:41 2001
@@ -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.
More information about the Gcc-patches
mailing list