abs insn with QI and HI mode

Ying Yi M.Yi@ed.ac.uk
Sat Jul 7 16:15:00 GMT 2007


Hi all,

I have a problem with absm2 insn, my target machine can suppport abs  
operation with QImode, HImode and SImode. I give machine description  
in md file as below.

(define_mode_macro SHQ [SI HI QI])

(define_insn "abs<mode>2"
   [(set (match_operand:SHQ           0 "register_operand" "=r")
         (abs:SHQ (match_operand:SHQ   1 "nonmemory_operand"  "rM")))]
   ""
   "abs.<MODE>  out=%0, in=%1"
   [(set_attr "type" "mux")
    (set_attr "length" "1")])


When I compiled the c code as shown below:

shirt int a, b;

a=abs(b);

note: a, b both globel variables

The generated codes do the following operations: 1) extend variable  
a_HI (HImode) to temp variable SImode, and do abs operation with  
SImode operators. I find the gimple intermedia represention as shown  
below:

   D.1298 = a_HI[0];
   D.1299 = (int) D.1298;
   D.1300 = ABS_EXPR <D.1299>;
   D.1301 = (short int) D.1300;

The unnecessary insns have been generated. It looks that ABS_EXPR only  
do SImode in the frontend.


Could anyone know how to solve this problem?


Thanks very much in advances



Best regards


Maggie





More information about the Gcc mailing list