On 07/12/11 13:04, Andrew Stubbs wrote:
> On 12/07/11 11:35, Georg-Johann Lay wrote:
>> +(define_insn "*mulsu"
>> +  [(set (match_operand:HI 0
>> "register_operand"                         "=r")
>> +        (mult:HI (sign_extend:HI (match_operand:QI 1
>> "register_operand" "a"))
>> +                 (zero_extend:HI (match_operand:QI 2
>> "register_operand" "a"))))]
>> +  "AVR_HAVE_MUL"
>> +  "mulsu %1,%2
>> +    movw %0,r0
>> +    clr __zero_reg__"
>> +  [(set_attr "length" "3")
>> +   (set_attr "cc" "clobber")])
>> +
>> +(define_insn "*mulus"
>> +  [(set (match_operand:HI 0
>> "register_operand"                         "=r")
>> +        (mult:HI (zero_extend:HI (match_operand:QI 1
>> "register_operand" "a"))
>> +                 (sign_extend:HI (match_operand:QI 2
>> "register_operand" "a"))))]
>> +  "AVR_HAVE_MUL"
>> +  "mulsu %2,%1
>> +    movw %0,r0
>> +    clr __zero_reg__"
>> +  [(set_attr "length" "3")
>> +   (set_attr "cc" "clobber")])
> 
> 1. You should name that "usmulqihi3" (no star), so the optimizers can
> see it.
> 
> 2. There's no need to define both of these. For one thing, putting a '%'
> at the start of the constraint list  for operand 1 does precisely this,

Unfortunately it doesn't. It won't swap the sign/zero-extend.


Bernd

Reply via email to