Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -march=x86 -mattr=+mmx,+sse2 -no-integrated-as
      2 ; ModuleID = 'mult-alt-x86.c'
      3 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:128:128-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
      4 target triple = "i686-pc-win32"
      5 
      6 @mout0 = common global i32 0, align 4
      7 @min1 = common global i32 0, align 4
      8 @dout0 = common global double 0.000000e+000, align 8
      9 @din1 = common global double 0.000000e+000, align 8
     10 @marray = common global [2 x i32] zeroinitializer, align 4
     11 
     12 define void @single_R() nounwind {
     13 entry:
     14   %tmp = load i32, i32* @min1, align 4
     15   %0 = call i32 asm "foo $1,$0", "=R,R,~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind
     16   store i32 %0, i32* @mout0, align 4
     17   ret void
     18 }
     19 
     20 define void @single_q() nounwind {
     21 entry:
     22   %tmp = load i32, i32* @min1, align 4
     23   %0 = call i32 asm "foo $1,$0", "=q,q,~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind
     24   store i32 %0, i32* @mout0, align 4
     25   ret void
     26 }
     27 
     28 define void @single_Q() nounwind {
     29 entry:
     30   %tmp = load i32, i32* @min1, align 4
     31   %0 = call i32 asm "foo $1,$0", "=Q,Q,~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind
     32   store i32 %0, i32* @mout0, align 4
     33   ret void
     34 }
     35 
     36 define void @single_a() nounwind {
     37 entry:
     38   %tmp = load i32, i32* @min1, align 4
     39   %0 = call i32 asm "foo $1,$0", "={ax},{ax},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind
     40   store i32 %0, i32* @mout0, align 4
     41   ret void
     42 }
     43 
     44 define void @single_b() nounwind {
     45 entry:
     46   %tmp = load i32, i32* @min1, align 4
     47   %0 = call i32 asm "foo $1,$0", "={bx},{bx},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind
     48   store i32 %0, i32* @mout0, align 4
     49   ret void
     50 }
     51 
     52 define void @single_c() nounwind {
     53 entry:
     54   %tmp = load i32, i32* @min1, align 4
     55   %0 = call i32 asm "foo $1,$0", "={cx},{cx},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind
     56   store i32 %0, i32* @mout0, align 4
     57   ret void
     58 }
     59 
     60 define void @single_d() nounwind {
     61 entry:
     62   %tmp = load i32, i32* @min1, align 4
     63   %0 = call i32 asm "foo $1,$0", "={dx},{dx},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind
     64   store i32 %0, i32* @mout0, align 4
     65   ret void
     66 }
     67 
     68 define void @single_S() nounwind {
     69 entry:
     70   %tmp = load i32, i32* @min1, align 4
     71   %0 = call i32 asm "foo $1,$0", "={si},{si},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind
     72   store i32 %0, i32* @mout0, align 4
     73   ret void
     74 }
     75 
     76 define void @single_D() nounwind {
     77 entry:
     78   %tmp = load i32, i32* @min1, align 4
     79   %0 = call i32 asm "foo $1,$0", "={di},{di},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind
     80   store i32 %0, i32* @mout0, align 4
     81   ret void
     82 }
     83 
     84 define void @single_A() nounwind {
     85 entry:
     86   %tmp = load i32, i32* @min1, align 4
     87   %0 = call i32 asm "foo $1,$0", "=A,A,~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind
     88   store i32 %0, i32* @mout0, align 4
     89   ret void
     90 }
     91 
     92 define void @single_f() nounwind {
     93 entry:
     94   ret void
     95 }
     96 
     97 define void @single_t() nounwind {
     98 entry:
     99   ret void
    100 }
    101 
    102 define void @single_u() nounwind {
    103 entry:
    104   ret void
    105 }
    106 
    107 define void @single_y() nounwind {
    108 entry:
    109   %tmp = load double, double* @din1, align 8
    110   %0 = call double asm "foo $1,$0", "=y,y,~{dirflag},~{fpsr},~{flags}"(double %tmp) nounwind
    111   store double %0, double* @dout0, align 8
    112   ret void
    113 }
    114 
    115 define void @single_x() nounwind {
    116 entry:
    117   %tmp = load double, double* @din1, align 8
    118   %0 = call double asm "foo $1,$0", "=x,x,~{dirflag},~{fpsr},~{flags}"(double %tmp) nounwind
    119   store double %0, double* @dout0, align 8
    120   ret void
    121 }
    122 
    123 define void @single_Y0() nounwind {
    124 entry:
    125   ret void
    126 }
    127 
    128 define void @single_I() nounwind {
    129 entry:
    130   call void asm "foo $1,$0", "=*m,I,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    131   ret void
    132 }
    133 
    134 define void @single_J() nounwind {
    135 entry:
    136   call void asm "foo $1,$0", "=*m,J,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    137   ret void
    138 }
    139 
    140 define void @single_K() nounwind {
    141 entry:
    142   call void asm "foo $1,$0", "=*m,K,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    143   ret void
    144 }
    145 
    146 define void @single_L() nounwind {
    147 entry:
    148 ; Missing lowering support for 'L'.
    149 ;  call void asm "foo $1,$0", "=*m,L,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    150   ret void
    151 }
    152 
    153 define void @single_M() nounwind {
    154 entry:
    155 ; Missing lowering support for 'M'.
    156 ;  call void asm "foo $1,$0", "=*m,M,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    157   ret void
    158 }
    159 
    160 define void @single_N() nounwind {
    161 entry:
    162   call void asm "foo $1,$0", "=*m,N,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    163   ret void
    164 }
    165 
    166 define void @single_G() nounwind {
    167 entry:
    168 ; Missing lowering support for 'G'.
    169 ;  call void asm "foo $1,$0", "=*m,G,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, double 1.000000e+000) nounwind
    170   ret void
    171 }
    172 
    173 define void @single_C() nounwind {
    174 entry:
    175 ; Missing lowering support for 'C'.
    176 ;  call void asm "foo $1,$0", "=*m,C,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, double 1.000000e+000) nounwind
    177   ret void
    178 }
    179 
    180 define void @single_e() nounwind {
    181 entry:
    182   call void asm "foo $1,$0", "=*m,e,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    183   ret void
    184 }
    185 
    186 define void @single_Z() nounwind {
    187 entry:
    188   call void asm "foo $1,$0", "=*m,Z,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    189   ret void
    190 }
    191 
    192 define void @multi_R() nounwind {
    193 entry:
    194   %tmp = load i32, i32* @min1, align 4
    195   call void asm "foo $1,$0", "=*r|R|m,r|R|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 %tmp) nounwind
    196   ret void
    197 }
    198 
    199 define void @multi_q() nounwind {
    200 entry:
    201   %tmp = load i32, i32* @min1, align 4
    202   call void asm "foo $1,$0", "=*r|q|m,r|q|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 %tmp) nounwind
    203   ret void
    204 }
    205 
    206 define void @multi_Q() nounwind {
    207 entry:
    208   %tmp = load i32, i32* @min1, align 4
    209   call void asm "foo $1,$0", "=*r|Q|m,r|Q|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 %tmp) nounwind
    210   ret void
    211 }
    212 
    213 define void @multi_a() nounwind {
    214 entry:
    215   %tmp = load i32, i32* @min1, align 4
    216   call void asm "foo $1,$0", "=*r|{ax}|m,r|{ax}|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 %tmp) nounwind
    217   ret void
    218 }
    219 
    220 define void @multi_b() nounwind {
    221 entry:
    222   %tmp = load i32, i32* @min1, align 4
    223   call void asm "foo $1,$0", "=*r|{bx}|m,r|{bx}|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 %tmp) nounwind
    224   ret void
    225 }
    226 
    227 define void @multi_c() nounwind {
    228 entry:
    229   %tmp = load i32, i32* @min1, align 4
    230   call void asm "foo $1,$0", "=*r|{cx}|m,r|{cx}|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 %tmp) nounwind
    231   ret void
    232 }
    233 
    234 define void @multi_d() nounwind {
    235 entry:
    236   %tmp = load i32, i32* @min1, align 4
    237   call void asm "foo $1,$0", "=*r|{dx}|m,r|{dx},~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 %tmp) nounwind
    238   ret void
    239 }
    240 
    241 define void @multi_S() nounwind {
    242 entry:
    243   %tmp = load i32, i32* @min1, align 4
    244   call void asm "foo $1,$0", "=*r|{si}|m,r|{si}|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 %tmp) nounwind
    245   ret void
    246 }
    247 
    248 define void @multi_D() nounwind {
    249 entry:
    250   %tmp = load i32, i32* @min1, align 4
    251   call void asm "foo $1,$0", "=*r|{di}|m,r|{di}|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 %tmp) nounwind
    252   ret void
    253 }
    254 
    255 define void @multi_A() nounwind {
    256 entry:
    257   %tmp = load i32, i32* @min1, align 4
    258   call void asm "foo $1,$0", "=*r|A|m,r|A|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 %tmp) nounwind
    259   ret void
    260 }
    261 
    262 define void @multi_f() nounwind {
    263 entry:
    264   ret void
    265 }
    266 
    267 define void @multi_t() nounwind {
    268 entry:
    269   ret void
    270 }
    271 
    272 define void @multi_u() nounwind {
    273 entry:
    274   ret void
    275 }
    276 
    277 define void @multi_y() nounwind {
    278 entry:
    279   %tmp = load double, double* @din1, align 8
    280   call void asm "foo $1,$0", "=*r|y|m,r|y|m,~{dirflag},~{fpsr},~{flags}"(double* @dout0, double %tmp) nounwind
    281   ret void
    282 }
    283 
    284 define void @multi_x() nounwind {
    285 entry:
    286   %tmp = load double, double* @din1, align 8
    287   call void asm "foo $1,$0", "=*r|x|m,r|x|m,~{dirflag},~{fpsr},~{flags}"(double* @dout0, double %tmp) nounwind
    288   ret void
    289 }
    290 
    291 define void @multi_Y0() nounwind {
    292 entry:
    293   ret void
    294 }
    295 
    296 define void @multi_I() nounwind {
    297 entry:
    298   call void asm "foo $1,$0", "=*r|m|m,r|I|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    299   ret void
    300 }
    301 
    302 define void @multi_J() nounwind {
    303 entry:
    304   call void asm "foo $1,$0", "=*r|m|m,r|J|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    305   ret void
    306 }
    307 
    308 define void @multi_K() nounwind {
    309 entry:
    310   call void asm "foo $1,$0", "=*r|m|m,r|K|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    311   ret void
    312 }
    313 
    314 define void @multi_L() nounwind {
    315 entry:
    316 ; Missing lowering support for 'L'.
    317 ;  call void asm "foo $1,$0", "=*r|m|m,r|L|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    318   ret void
    319 }
    320 
    321 define void @multi_M() nounwind {
    322 entry:
    323 ; Missing lowering support for 'M'.
    324 ;  call void asm "foo $1,$0", "=*r|m|m,r|M|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    325   ret void
    326 }
    327 
    328 define void @multi_N() nounwind {
    329 entry:
    330   call void asm "foo $1,$0", "=*r|m|m,r|N|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    331   ret void
    332 }
    333 
    334 define void @multi_G() nounwind {
    335 entry:
    336 ; Missing lowering support for 'G'.
    337 ;  call void asm "foo $1,$0", "=*r|m|m,r|G|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, double 1.000000e+000) nounwind
    338   ret void
    339 }
    340 
    341 define void @multi_C() nounwind {
    342 entry:
    343 ; Missing lowering support for 'C'.
    344 ;  call void asm "foo $1,$0", "=*r|m|m,r|C|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, double 1.000000e+000) nounwind
    345   ret void
    346 }
    347 
    348 define void @multi_e() nounwind {
    349 entry:
    350   call void asm "foo $1,$0", "=*r|m|m,r|e|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    351   ret void
    352 }
    353 
    354 define void @multi_Z() nounwind {
    355 entry:
    356   call void asm "foo $1,$0", "=*r|m|m,r|Z|m,~{dirflag},~{fpsr},~{flags}"(i32* @mout0, i32 1) nounwind
    357   ret void
    358 }
    359