From f128625718d842a4c6355c1f02791f32b6443bb1 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Fri, 16 Jul 2004 07:53:47 +0000 Subject: [PATCH] mips.c (mips_zero_if_equal): Only use XORs if the second operand is an uns_arith_operand... * config/mips/mips.c (mips_zero_if_equal): Only use XORs if the second operand is an uns_arith_operand; use subtraction otherwise. * config/mips/mips.md (cmpsi, cmpdi): Allow any nonmemory_operand, not just arith_operands. From-SVN: r84809 --- gcc/ChangeLog | 7 +++++++ gcc/config/mips/mips.c | 6 +++++- gcc/config/mips/mips.md | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a57ee1c7d86..52c646fe2ef 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-07-16 Richard Sandiford + + * config/mips/mips.c (mips_zero_if_equal): Only use XORs if the second + operand is an uns_arith_operand; use subtraction otherwise. + * config/mips/mips.md (cmpsi, cmpdi): Allow any nonmemory_operand, + not just arith_operands. + 2004-07-16 Richard Sandiford * config/mips/mips-protos.h (gen_int_relational): Delete. diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 648abbf00d2..489016af464 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -2776,7 +2776,11 @@ mips_zero_if_equal (rtx cmp0, rtx cmp1) if (cmp1 == const0_rtx) return cmp0; - return expand_binop (GET_MODE (cmp0), xor_optab, + if (uns_arith_operand (cmp1, VOIDmode)) + return expand_binop (GET_MODE (cmp0), xor_optab, + cmp0, cmp1, 0, 0, OPTAB_DIRECT); + + return expand_binop (GET_MODE (cmp0), sub_optab, cmp0, cmp1, 0, 0, OPTAB_DIRECT); } diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 08f04f8ded3..abb5d442949 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -5472,7 +5472,7 @@ dsrl\t%3,%3,1\n\ (define_expand "cmpsi" [(set (cc0) (compare:CC (match_operand:SI 0 "register_operand") - (match_operand:SI 1 "arith_operand")))] + (match_operand:SI 1 "nonmemory_operand")))] "" { cmp_operands[0] = operands[0]; @@ -5483,7 +5483,7 @@ dsrl\t%3,%3,1\n\ (define_expand "cmpdi" [(set (cc0) (compare:CC (match_operand:DI 0 "register_operand") - (match_operand:DI 1 "arith_operand")))] + (match_operand:DI 1 "nonmemory_operand")))] "TARGET_64BIT" { cmp_operands[0] = operands[0]; -- 2.30.2