Commit 27eb1ab6 by Ian Lance Taylor

Fix SETUP_INCOMING_VARARGS for TARGET_SINGLE_FLOAT || ! TARGET_FLOAT64

From-SVN: r12997
parent efcedf42
...@@ -150,26 +150,33 @@ extern struct rtx_def *mips_function_value (); ...@@ -150,26 +150,33 @@ extern struct rtx_def *mips_function_value ();
&& ! TARGET_SOFT_FLOAT \ && ! TARGET_SOFT_FLOAT \
&& (CUM).fp_arg_words < MAX_ARGS_IN_REGISTERS - mips_fp_off) \ && (CUM).fp_arg_words < MAX_ARGS_IN_REGISTERS - mips_fp_off) \
{ \ { \
enum machine_mode mode = TARGET_SINGLE_FLOAT ? SFmode : DFmode; \
int size = GET_MODE_SIZE (mode); \
int off; \ int off; \
int i; \ int i; \
/* We can't use move_block_from_reg, because it will use \ /* We can't use move_block_from_reg, because it will use \
the wrong mode. */ \ the wrong mode. */ \
off = (- (mips_save_gp_regs * UNITS_PER_WORD) \ off = - (mips_save_gp_regs * UNITS_PER_WORD); \
- (mips_save_fp_regs * UNITS_PER_FPREG)); \ if (! TARGET_SINGLE_FLOAT) \
off &= ~ 7; \
if (! TARGET_FLOAT64 || TARGET_SINGLE_FLOAT) \
off -= (mips_save_fp_regs / 2) * size; \
else \
off -= mips_save_fp_regs * size; \
for (i = 0; i < mips_save_fp_regs; i++) \ for (i = 0; i < mips_save_fp_regs; i++) \
{ \ { \
rtx tem = \ rtx tem = \
gen_rtx (MEM, DFmode, \ gen_rtx (MEM, mode, \
plus_constant (virtual_incoming_args_rtx, \ plus_constant (virtual_incoming_args_rtx, \
(off \ off)); \
+ i * GET_MODE_SIZE (DFmode)))); \
emit_move_insn (tem, \ emit_move_insn (tem, \
gen_rtx (REG, DFmode, \ gen_rtx (REG, mode, \
((CUM).fp_arg_words \ ((CUM).fp_arg_words \
+ FP_ARG_FIRST \ + FP_ARG_FIRST \
+ i \ + i \
+ mips_fp_off))); \ + mips_fp_off))); \
if (! TARGET_FLOAT64) \ off += size; \
if (! TARGET_FLOAT64 || TARGET_SINGLE_FLOAT) \
++i; \ ++i; \
} \ } \
} \ } \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment