* reg-stack.c (subst_stack_regs_pat): Fix fcmov reversal code.

From-SVN: r45490
This commit is contained in:
Jan Hubicka 2001-09-08 22:01:54 +02:00 committed by Jan Hubicka
parent 718fd87ea1
commit b74cf1ce45
2 changed files with 17 additions and 17 deletions

View File

@ -1,3 +1,7 @@
Sat Sep 8 22:00:55 CEST 2001 Jan Hubicka <jh@suse.cz>
* reg-stack.c (subst_stack_regs_pat): Fix fcmov reversal code.
2001-09-08 Andreas Jaeger <aj@suse.de>
* i386.h (TARGET_SWITCHES): Fix description.

View File

@ -1797,20 +1797,18 @@ subst_stack_regs_pat (insn, regstack, pat)
|| (REGNO (*src2) == regstack->reg[regstack->top]
&& src2_note))
{
int idx1 = (get_hard_regnum (regstack, *src1)
- FIRST_STACK_REG);
int idx2 = (get_hard_regnum (regstack, *src2)
- FIRST_STACK_REG);
/* We know that both sources "dies", as one dies and other
is overwriten by the destination. Claim both sources
to be dead, as the code bellow will properly pop the
non-top-of-stack note and replace top-of-stack by the
result by popping source first and then pushing result. */
if (!src1_note)
src1_note = REG_NOTES (insn)
= gen_rtx_EXPR_LIST (REG_DEAD, *src1, REG_NOTES (insn));
if (!src2_note)
src2_note = REG_NOTES (insn)
= gen_rtx_EXPR_LIST (REG_DEAD, *src2, REG_NOTES (insn));
/* Make reg-stack believe that the operands are already
swapped on the stack */
regstack->reg[regstack->top - idx1] = REGNO (*src2);
regstack->reg[regstack->top - idx2] = REGNO (*src1);
/* i386 do have comparison always reversible. */
/* Reverse condition to compensate the operand swap.
i386 do have comparison always reversible. */
PUT_CODE (XEXP (pat_src, 0),
reversed_comparison_code (XEXP (pat_src, 0), insn));
}
@ -1845,11 +1843,9 @@ subst_stack_regs_pat (insn, regstack, pat)
EMIT_AFTER);
}
else
{
CLEAR_HARD_REG_BIT (regstack->reg_set, regno);
replace_reg (&XEXP (src_note[i], 0), FIRST_STACK_REG);
regstack->top--;
}
/* Top of stack never dies, as it is the
destination. */
abort ();
}
}