diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d26968f30f5..04a4770b7b5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-01-31 Nicolas Pitre + + * arm.md (smaxsi3): Make aware of smax_m1. + (smax_m1): New. + 2006-01-31 Nathan Sidwell * gcc/config/m68k/lb1sf68.asm: Use moveq to load small constants. diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 2442ed3f3db..3853afc1aac 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -2481,7 +2481,7 @@ (clobber (reg:CC CC_REGNUM))])] "TARGET_ARM" " - if (operands[2] == const0_rtx) + if (operands[2] == const0_rtx || operands[2] == constm1_rtx) { /* No need for a clobber of the condition code register here. */ emit_insn (gen_rtx_SET (VOIDmode, operands[0], @@ -2500,6 +2500,15 @@ [(set_attr "predicable" "yes")] ) +(define_insn "*smax_m1" + [(set (match_operand:SI 0 "s_register_operand" "=r") + (smax:SI (match_operand:SI 1 "s_register_operand" "r") + (const_int -1)))] + "TARGET_ARM" + "orr%?\\t%0, %1, %1, asr #31" + [(set_attr "predicable" "yes")] +) + (define_insn "*smax_insn" [(set (match_operand:SI 0 "s_register_operand" "=r,r") (smax:SI (match_operand:SI 1 "s_register_operand" "%0,?r")