sign_extended 32bit -addition

Thu Jan 31 15:49:00 GMT 2008

Hi all,

Our target supports 'addm op1,op2' instruction which perform following 
where 'op1' is 16bit integer operand and 'op2' is 32bit integer 
operand.before performing addition 'op1' is sign_extended to 32 bit 
number and then perform addition with 'op2' and store the result in 'op2'.

I have added new pattern in md file as below.

(define_insn "*addsihi5"
  [(set (match_operand:SI 0 "register_operand" "=D")
        (plus:SI  (match_operand:SI 1 "register_operand" "0")
       (sign_extend:SI (match_operand:HI 2 "register_operand" "e"))))]
 "addm %2,%0"
  [(set_attr "type"  "binary")])

But compiler generating following patterns independently:
(insn 13 12 14 (nil) (set (reg:SI 25)
        (sign_extend:SI (reg:HI 26))) -1 (nil)
(insn 15 14 16 (nil) (set (reg:SI 28)
        (plus:SI (reg:SI 27)
            (reg:SI 25))) -1 (nil)

How can i make compiler to generate required pattern so that it can 
generate addm instruction instead of sign_extend & addition instructions 

Can u please help me in this regard.

--P.V. Siva prasad

More information about the Gcc-help mailing list