Commit 886ce862 by Richard Sandiford Committed by Richard Sandiford

mips.c (mips_gen_conditional_trap): Fix mode.

	* config/mips/mips.c (mips_gen_conditional_trap): Fix mode.
	* config/mips/mips.md (*conditional_trap[sd]i): Name previously unnamed
	patterns.  Redefine using :GPR.  Give the match_operator a mode.
	Use '%2' rather than '%z2' for operand 2.

From-SVN: r86511
parent be659abd
2004-08-24 Richard Sandiford <rsandifo@redhat.com>
* config/mips/mips.c (mips_gen_conditional_trap): Fix mode.
* config/mips/mips.md (*conditional_trap[sd]i): Name previously unnamed
patterns. Redefine using :GPR. Give the match_operator a mode.
Use '%2' rather than '%z2' for operand 2.
2004-08-24 Richard Sandiford <rsandifo@redhat.com>
* config/mips/mips.md (load_call[sd]i): Redefine using :P. Add mode
attribute.
......
......@@ -2578,20 +2578,20 @@ mips_gen_conditional_trap (rtx *operands)
}
if (cmp_code == GET_CODE (operands[0]))
{
op0 = force_reg (mode, cmp_operands[0]);
op0 = cmp_operands[0];
op1 = cmp_operands[1];
}
else
{
op0 = force_reg (mode, cmp_operands[1]);
op0 = cmp_operands[1];
op1 = cmp_operands[0];
}
if (GET_CODE (op1) == CONST_INT && ! SMALL_INT (op1))
op0 = force_reg (mode, op0);
if (!arith_operand (op1, mode))
op1 = force_reg (mode, op1);
emit_insn (gen_rtx_TRAP_IF (VOIDmode,
gen_rtx_fmt_ee (cmp_code, GET_MODE (operands[0]),
op0, op1),
gen_rtx_fmt_ee (cmp_code, mode, op0, op1),
operands[1]));
}
......
......@@ -404,7 +404,8 @@
(match_operand 1 "const_int_operand"))]
"ISA_HAS_COND_TRAP"
{
if (operands[1] == const0_rtx)
if (GET_MODE_CLASS (GET_MODE (cmp_operands[0])) == MODE_INT
&& operands[1] == const0_rtx)
{
mips_gen_conditional_trap (operands);
DONE;
......@@ -413,22 +414,13 @@
FAIL;
})
(define_insn ""
[(trap_if (match_operator 0 "trap_comparison_operator"
[(match_operand:SI 1 "reg_or_0_operand" "dJ")
(match_operand:SI 2 "arith_operand" "dI")])
(define_insn "*conditional_trap<mode>"
[(trap_if (match_operator:GPR 0 "trap_comparison_operator"
[(match_operand:GPR 1 "reg_or_0_operand" "dJ")
(match_operand:GPR 2 "arith_operand" "dI")])
(const_int 0))]
"ISA_HAS_COND_TRAP"
"t%C0\t%z1,%z2"
[(set_attr "type" "trap")])
(define_insn ""
[(trap_if (match_operator 0 "trap_comparison_operator"
[(match_operand:DI 1 "reg_or_0_operand" "dJ")
(match_operand:DI 2 "arith_operand" "dI")])
(const_int 0))]
"TARGET_64BIT && ISA_HAS_COND_TRAP"
"t%C0\t%z1,%z2"
"t%C0\t%z1,%2"
[(set_attr "type" "trap")])
;;
......
2004-08-24 Richard Sandiford <rsandifo@redhat.com>
* gcc.c-torture/compile/iftrap-3.c: New test.
2004-08-24 Paul Brook <paul@codesourcery.com>
* gfortran.dg/entry_2.f90: New test.
......
/* Check that the conditional_trap pattern handles floating-point
comparisons correctly. */
void f1 (float x, float y) { if (x == y) __builtin_trap (); }
void f2 (double x, double y) { if (x == y) __builtin_trap (); }
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