diff options
author | Richard Sandiford <rsandifo@redhat.com> | 2004-07-16 07:53:47 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2004-07-16 07:53:47 +0000 |
commit | f128625718d842a4c6355c1f02791f32b6443bb1 (patch) | |
tree | 08a150079f4dff10c6ceb2b77fe6f36df831bf1e /gcc | |
parent | a012718f1d0470cd1a19b4c8c5200de06ba47b0a (diff) | |
download | gcc-f128625718d842a4c6355c1f02791f32b6443bb1.zip gcc-f128625718d842a4c6355c1f02791f32b6443bb1.tar.gz gcc-f128625718d842a4c6355c1f02791f32b6443bb1.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 6 | ||||
-rw-r--r-- | gcc/config/mips/mips.md | 4 |
3 files changed, 14 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a57ee1c..52c646f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2004-07-16 Richard Sandiford <rsandifo@redhat.com> + * 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 <rsandifo@redhat.com> + * config/mips/mips-protos.h (gen_int_relational): Delete. (mips_emit_scc): Declare. * config/mips/mips.c (internal_test): Delete. diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 648abbf..489016a 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 08f04f8..abb5d44 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]; |