Commit 60801f0b by Richard Kenner

(call): Mask unimp operand to 12 bits, just like Sun.

From-SVN: r12143
parent 0086427c
...@@ -5067,7 +5067,7 @@ ...@@ -5067,7 +5067,7 @@
if (GET_MODE (operands[0]) != FUNCTION_MODE) if (GET_MODE (operands[0]) != FUNCTION_MODE)
abort (); abort ();
if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF) if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF)
{ {
/* This is really a PIC sequence. We want to represent /* This is really a PIC sequence. We want to represent
it as a funny jump so it's delay slots can be filled. it as a funny jump so it's delay slots can be filled.
...@@ -5077,18 +5077,22 @@ ...@@ -5077,18 +5077,22 @@
Why cannot we have delay slots filled if it were a CALL? */ Why cannot we have delay slots filled if it were a CALL? */
if (! TARGET_ARCH64 && INTVAL (operands[3]) != 0) if (! TARGET_ARCH64 && INTVAL (operands[3]) != 0)
emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3, emit_jump_insn
gen_rtx (SET, VOIDmode, pc_rtx, (gen_rtx (PARALLEL, VOIDmode,
XEXP (operands[0], 0)), gen_rtvec (3,
operands[3], gen_rtx (SET, VOIDmode, pc_rtx,
gen_rtx (CLOBBER, VOIDmode, XEXP (operands[0], 0)),
gen_rtx (REG, Pmode, 15))))); GEN_INT (INTVAL (operands[3]) & 0xfff),
gen_rtx (CLOBBER, VOIDmode,
gen_rtx (REG, Pmode, 15)))));
else else
emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2, emit_jump_insn
gen_rtx (SET, VOIDmode, pc_rtx, (gen_rtx (PARALLEL, VOIDmode,
XEXP (operands[0], 0)), gen_rtvec (2,
gen_rtx (CLOBBER, VOIDmode, gen_rtx (SET, VOIDmode, pc_rtx,
gen_rtx (REG, Pmode, 15))))); XEXP (operands[0], 0)),
gen_rtx (CLOBBER, VOIDmode,
gen_rtx (REG, Pmode, 15)))));
goto finish_call; goto finish_call;
} }
...@@ -5107,16 +5111,18 @@ ...@@ -5107,16 +5111,18 @@
#endif #endif
if (! TARGET_ARCH64 && INTVAL (operands[3]) != 0) if (! TARGET_ARCH64 && INTVAL (operands[3]) != 0)
emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3, emit_call_insn
gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx), (gen_rtx (PARALLEL, VOIDmode,
operands[3], gen_rtvec (3, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
gen_rtx (CLOBBER, VOIDmode, GEN_INT (INTVAL (operands[3]) & 0xfff),
gen_rtx (REG, Pmode, 15))))); gen_rtx (CLOBBER, VOIDmode,
gen_rtx (REG, Pmode, 15)))));
else else
emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2, emit_call_insn
gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx), (gen_rtx (PARALLEL, VOIDmode,
gen_rtx (CLOBBER, VOIDmode, gen_rtvec (2, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
gen_rtx (REG, Pmode, 15))))); gen_rtx (CLOBBER, VOIDmode,
gen_rtx (REG, Pmode, 15)))));
finish_call: finish_call:
#if 0 #if 0
......
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