359 lines · plain
1; RUN: llc < %s -mattr=+mmx,+sse2 -no-integrated-as2; ModuleID = 'mult-alt-x86.c'3target 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"4target triple = "i686-pc-win32"5 6@mout0 = common global i32 0, align 47@min1 = common global i32 0, align 48@dout0 = common global double 0.000000e+000, align 89@din1 = common global double 0.000000e+000, align 810@marray = common global [2 x i32] zeroinitializer, align 411 12define void @single_R() nounwind {13entry:14 %tmp = load i32, ptr @min1, align 415 %0 = call i32 asm "foo $1,$0", "=R,R,~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind16 store i32 %0, ptr @mout0, align 417 ret void18}19 20define void @single_q() nounwind {21entry:22 %tmp = load i32, ptr @min1, align 423 %0 = call i32 asm "foo $1,$0", "=q,q,~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind24 store i32 %0, ptr @mout0, align 425 ret void26}27 28define void @single_Q() nounwind {29entry:30 %tmp = load i32, ptr @min1, align 431 %0 = call i32 asm "foo $1,$0", "=Q,Q,~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind32 store i32 %0, ptr @mout0, align 433 ret void34}35 36define void @single_a() nounwind {37entry:38 %tmp = load i32, ptr @min1, align 439 %0 = call i32 asm "foo $1,$0", "={ax},{ax},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind40 store i32 %0, ptr @mout0, align 441 ret void42}43 44define void @single_b() nounwind {45entry:46 %tmp = load i32, ptr @min1, align 447 %0 = call i32 asm "foo $1,$0", "={bx},{bx},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind48 store i32 %0, ptr @mout0, align 449 ret void50}51 52define void @single_c() nounwind {53entry:54 %tmp = load i32, ptr @min1, align 455 %0 = call i32 asm "foo $1,$0", "={cx},{cx},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind56 store i32 %0, ptr @mout0, align 457 ret void58}59 60define void @single_d() nounwind {61entry:62 %tmp = load i32, ptr @min1, align 463 %0 = call i32 asm "foo $1,$0", "={dx},{dx},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind64 store i32 %0, ptr @mout0, align 465 ret void66}67 68define void @single_S() nounwind {69entry:70 %tmp = load i32, ptr @min1, align 471 %0 = call i32 asm "foo $1,$0", "={si},{si},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind72 store i32 %0, ptr @mout0, align 473 ret void74}75 76define void @single_D() nounwind {77entry:78 %tmp = load i32, ptr @min1, align 479 %0 = call i32 asm "foo $1,$0", "={di},{di},~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind80 store i32 %0, ptr @mout0, align 481 ret void82}83 84define void @single_A() nounwind {85entry:86 %tmp = load i32, ptr @min1, align 487 %0 = call i32 asm "foo $1,$0", "=A,A,~{dirflag},~{fpsr},~{flags}"(i32 %tmp) nounwind88 store i32 %0, ptr @mout0, align 489 ret void90}91 92define void @single_f() nounwind {93entry:94 ret void95}96 97define void @single_t() nounwind {98entry:99 ret void100}101 102define void @single_u() nounwind {103entry:104 ret void105}106 107define void @single_y() nounwind {108entry:109 %tmp = load double, ptr @din1, align 8110 %0 = call double asm "foo $1,$0", "=y,y,~{dirflag},~{fpsr},~{flags}"(double %tmp) nounwind111 store double %0, ptr @dout0, align 8112 ret void113}114 115define void @single_x() nounwind {116entry:117 %tmp = load double, ptr @din1, align 8118 %0 = call double asm "foo $1,$0", "=x,x,~{dirflag},~{fpsr},~{flags}"(double %tmp) nounwind119 store double %0, ptr @dout0, align 8120 ret void121}122 123define void @single_Y0() nounwind {124entry:125 ret void126}127 128define void @single_I() nounwind {129entry:130 call void asm "foo $1,$0", "=*m,I,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind131 ret void132}133 134define void @single_J() nounwind {135entry:136 call void asm "foo $1,$0", "=*m,J,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind137 ret void138}139 140define void @single_K() nounwind {141entry:142 call void asm "foo $1,$0", "=*m,K,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind143 ret void144}145 146define void @single_L() nounwind {147entry:148; Missing lowering support for 'L'.149; call void asm "foo $1,$0", "=*m,L,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind150 ret void151}152 153define void @single_M() nounwind {154entry:155; Missing lowering support for 'M'.156; call void asm "foo $1,$0", "=*m,M,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind157 ret void158}159 160define void @single_N() nounwind {161entry:162 call void asm "foo $1,$0", "=*m,N,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind163 ret void164}165 166define void @single_G() nounwind {167entry:168; Missing lowering support for 'G'.169; call void asm "foo $1,$0", "=*m,G,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, double 1.000000e+000) nounwind170 ret void171}172 173define void @single_C() nounwind {174entry:175; Missing lowering support for 'C'.176; call void asm "foo $1,$0", "=*m,C,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, double 1.000000e+000) nounwind177 ret void178}179 180define void @single_e() nounwind {181entry:182 call void asm "foo $1,$0", "=*m,e,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind183 ret void184}185 186define void @single_Z() nounwind {187entry:188 call void asm "foo $1,$0", "=*m,Z,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind189 ret void190}191 192define void @multi_R() nounwind {193entry:194 %tmp = load i32, ptr @min1, align 4195 call void asm "foo $1,$0", "=*r|R|m,r|R|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind196 ret void197}198 199define void @multi_q() nounwind {200entry:201 %tmp = load i32, ptr @min1, align 4202 call void asm "foo $1,$0", "=*r|q|m,r|q|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind203 ret void204}205 206define void @multi_Q() nounwind {207entry:208 %tmp = load i32, ptr @min1, align 4209 call void asm "foo $1,$0", "=*r|Q|m,r|Q|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind210 ret void211}212 213define void @multi_a() nounwind {214entry:215 %tmp = load i32, ptr @min1, align 4216 call void asm "foo $1,$0", "=*r|{ax}|m,r|{ax}|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind217 ret void218}219 220define void @multi_b() nounwind {221entry:222 %tmp = load i32, ptr @min1, align 4223 call void asm "foo $1,$0", "=*r|{bx}|m,r|{bx}|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind224 ret void225}226 227define void @multi_c() nounwind {228entry:229 %tmp = load i32, ptr @min1, align 4230 call void asm "foo $1,$0", "=*r|{cx}|m,r|{cx}|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind231 ret void232}233 234define void @multi_d() nounwind {235entry:236 %tmp = load i32, ptr @min1, align 4237 call void asm "foo $1,$0", "=*r|{dx}|m,r|{dx},~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind238 ret void239}240 241define void @multi_S() nounwind {242entry:243 %tmp = load i32, ptr @min1, align 4244 call void asm "foo $1,$0", "=*r|{si}|m,r|{si}|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind245 ret void246}247 248define void @multi_D() nounwind {249entry:250 %tmp = load i32, ptr @min1, align 4251 call void asm "foo $1,$0", "=*r|{di}|m,r|{di}|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind252 ret void253}254 255define void @multi_A() nounwind {256entry:257 %tmp = load i32, ptr @min1, align 4258 call void asm "foo $1,$0", "=*r|A|m,r|A|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind259 ret void260}261 262define void @multi_f() nounwind {263entry:264 ret void265}266 267define void @multi_t() nounwind {268entry:269 ret void270}271 272define void @multi_u() nounwind {273entry:274 ret void275}276 277define void @multi_y() nounwind {278entry:279 %tmp = load double, ptr @din1, align 8280 call void asm "foo $1,$0", "=*r|y|m,r|y|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(double) @dout0, double %tmp) nounwind281 ret void282}283 284define void @multi_x() nounwind {285entry:286 %tmp = load double, ptr @din1, align 8287 call void asm "foo $1,$0", "=*r|x|m,r|x|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(double) @dout0, double %tmp) nounwind288 ret void289}290 291define void @multi_Y0() nounwind {292entry:293 ret void294}295 296define void @multi_I() nounwind {297entry:298 call void asm "foo $1,$0", "=*r|m|m,r|I|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind299 ret void300}301 302define void @multi_J() nounwind {303entry:304 call void asm "foo $1,$0", "=*r|m|m,r|J|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind305 ret void306}307 308define void @multi_K() nounwind {309entry:310 call void asm "foo $1,$0", "=*r|m|m,r|K|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind311 ret void312}313 314define void @multi_L() nounwind {315entry:316; Missing lowering support for 'L'.317; call void asm "foo $1,$0", "=*r|m|m,r|L|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind318 ret void319}320 321define void @multi_M() nounwind {322entry:323; Missing lowering support for 'M'.324; call void asm "foo $1,$0", "=*r|m|m,r|M|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind325 ret void326}327 328define void @multi_N() nounwind {329entry:330 call void asm "foo $1,$0", "=*r|m|m,r|N|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind331 ret void332}333 334define void @multi_G() nounwind {335entry:336; Missing lowering support for 'G'.337; call void asm "foo $1,$0", "=*r|m|m,r|G|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, double 1.000000e+000) nounwind338 ret void339}340 341define void @multi_C() nounwind {342entry:343; Missing lowering support for 'C'.344; call void asm "foo $1,$0", "=*r|m|m,r|C|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, double 1.000000e+000) nounwind345 ret void346}347 348define void @multi_e() nounwind {349entry:350 call void asm "foo $1,$0", "=*r|m|m,r|e|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind351 ret void352}353 354define void @multi_Z() nounwind {355entry:356 call void asm "foo $1,$0", "=*r|m|m,r|Z|m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @mout0, i32 1) nounwind357 ret void358}359