brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.2 KiB · c5bf753 Raw
379 lines · c
1// RUN: %clang_cc1 -triple i686 -emit-llvm %s -o - | FileCheck %s2// RUN: %clang_cc1 -triple x86_64 -emit-llvm %s -o - | FileCheck %s3 4int mout0;5int min1;6int marray[2];7double dout0;8double din1;9 10// CHECK: @single_R11void single_R(void)12{13  // CHECK: asm "foo $1,$0", "=R,R[[CLOBBERS:[a-zA-Z0-9@%{},~_ ]*\"]](i32 {{[a-zA-Z0-9@%]+}})14  asm("foo %1,%0" : "=R" (mout0) : "R" (min1));15}16 17// CHECK: @single_q18void single_q(void)19{20  // CHECK: asm "foo $1,$0", "=q,q[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})21  asm("foo %1,%0" : "=q" (mout0) : "q" (min1));22}23 24// CHECK: @single_Q25void single_Q(void)26{27  // CHECK: asm "foo $1,$0", "=Q,Q[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})28  asm("foo %1,%0" : "=Q" (mout0) : "Q" (min1));29}30 31// CHECK: @single_a32void single_a(void)33{34  // CHECK: asm "foo $1,$0", "={ax},{ax}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})35  asm("foo %1,%0" : "=a" (mout0) : "a" (min1));36}37 38// CHECK: @single_b39void single_b(void)40{41  // CHECK: asm "foo $1,$0", "={bx},{bx}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})42  asm("foo %1,%0" : "=b" (mout0) : "b" (min1));43}44 45// CHECK: @single_c46void single_c(void)47{48  // CHECK: asm "foo $1,$0", "={cx},{cx}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})49  asm("foo %1,%0" : "=c" (mout0) : "c" (min1));50}51 52// CHECK: @single_d53void single_d(void)54{55  // CHECK: asm "foo $1,$0", "={dx},{dx}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})56  asm("foo %1,%0" : "=d" (mout0) : "d" (min1));57}58 59// CHECK: @single_S60void single_S(void)61{62  // CHECK: asm "foo $1,$0", "={si},{si}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})63  asm("foo %1,%0" : "=S" (mout0) : "S" (min1));64}65 66// CHECK: @single_D67void single_D(void)68{69  // CHECK: asm "foo $1,$0", "={di},{di}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})70  asm("foo %1,%0" : "=D" (mout0) : "D" (min1));71}72 73// CHECK: @single_A74void single_A(void)75{76  // CHECK: asm "foo $1,$0", "=A,A[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})77  asm("foo %1,%0" : "=A" (mout0) : "A" (min1));78}79 80// CHECK: @single_f81void single_f(void)82{83//FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.84}85 86// CHECK: @single_t87void single_t(void)88{89//FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.90}91 92// CHECK: @single_u93void single_u(void)94{95//FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.96}97 98// CHECK: @single_y99void single_y(void)100{101  // CHECK: call double asm "foo $1,$0", "=y,y[[CLOBBERS]](double {{[a-zA-Z0-9@%]+}})102  asm("foo %1,%0" : "=y" (dout0) : "y" (din1));103}104 105// CHECK: @single_x106void single_x(void)107{108  // CHECK: asm "foo $1,$0", "=x,x[[CLOBBERS]](double {{[a-zA-Z0-9@%]+}})109  asm("foo %1,%0" : "=x" (dout0) : "x" (din1));110}111 112// CHECK: @single_Y113void single_Y(void)114{115  // 'Y' constraint currently broken.116  //asm("foo %1,%0" : "=Y0" (mout0) : "Y0" (min1));117  //asm("foo %1,%0" : "=Yz" (mout0) : "Yz" (min1));118  //asm("foo %1,%0" : "=Yt" (mout0) : "Yt" (min1));119  //asm("foo %1,%0" : "=Yi" (mout0) : "Yi" (min1));120  //asm("foo %1,%0" : "=Ym" (mout0) : "Ym" (min1));121}122 123// CHECK: @single_I124void single_I(void)125{126  // CHECK: asm "foo $1,$0", "=*m,I[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)127  asm("foo %1,%0" : "=m" (mout0) : "I" (1));128}129 130// CHECK: @single_J131void single_J(void)132{133  // CHECK: asm "foo $1,$0", "=*m,J[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)134  asm("foo %1,%0" : "=m" (mout0) : "J" (1));135}136 137// CHECK: @single_K138void single_K(void)139{140  // CHECK: asm "foo $1,$0", "=*m,K[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)141  asm("foo %1,%0" : "=m" (mout0) : "K" (1));142}143 144// CHECK: @single_L145void single_L(void)146{147  // CHECK: asm "foo $1,$0", "=*m,L[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 255)148  asm("foo %1,%0" : "=m" (mout0) : "L" (0xff));149  // CHECK: asm "foo $1,$0", "=*m,L[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 65535)150  asm("foo %1,%0" : "=m" (mout0) : "L" (0xffff));151  // CHECK: asm "foo $1,$0", "=*m,L[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 -1)152  asm("foo %1,%0" : "=m" (mout0) : "L" (0xffffffff));153}154 155// CHECK: @single_M156void single_M(void)157{158  // CHECK: asm "foo $1,$0", "=*m,M[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)159  asm("foo %1,%0" : "=m" (mout0) : "M" (1));160}161 162// CHECK: @single_N163void single_N(void)164{165  // CHECK: asm "foo $1,$0", "=*m,N[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)166  asm("foo %1,%0" : "=m" (mout0) : "N" (1));167}168 169// CHECK: @single_G170void single_G(void)171{172  // CHECK: asm "foo $1,$0", "=*m,G[[CLOBBERS]](ptr elementtype(i32) @mout0, double {{1.[0]+e[+]*[0]+}})173  asm("foo %1,%0" : "=m" (mout0) : "G" (1.0));174}175 176// CHECK: @single_C177void single_C(void)178{179  // CHECK: asm "foo $1,$0", "=*m,C[[CLOBBERS]](ptr elementtype(i32) @mout0, double {{1.[0]+e[+]*[0]+}})180  asm("foo %1,%0" : "=m" (mout0) : "C" (1.0));181}182 183// CHECK: @single_e184void single_e(void)185{186  // CHECK: asm "foo $1,$0", "=*m,e[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)187  asm("foo %1,%0" : "=m" (mout0) : "e" (1));188}189 190// CHECK: @single_Z191void single_Z(void)192{193  // CHECK: asm "foo $1,$0", "=*m,Z[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)194  asm("foo %1,%0" : "=m" (mout0) : "Z" (1));195}196 197// CHECK: @multi_R198void multi_R(void)199{200  // CHECK: asm "foo $1,$0", "=*r|R|m,r|R|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 {{[a-zA-Z0-9@%]+}})201  asm("foo %1,%0" : "=r,R,m" (mout0) : "r,R,m" (min1));202}203 204// CHECK: @multi_q205void multi_q(void)206{207  // CHECK: asm "foo $1,$0", "=*r|q|m,r|q|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 {{[a-zA-Z0-9@%]+}})208  asm("foo %1,%0" : "=r,q,m" (mout0) : "r,q,m" (min1));209}210 211// CHECK: @multi_Q212void multi_Q(void)213{214  // CHECK: asm "foo $1,$0", "=*r|Q|m,r|Q|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 {{[a-zA-Z0-9@%]+}})215  asm("foo %1,%0" : "=r,Q,m" (mout0) : "r,Q,m" (min1));216}217 218// CHECK: @multi_a219void multi_a(void)220{221  // CHECK: asm "foo $1,$0", "=*r|{ax}|m,r|{ax}|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 {{[a-zA-Z0-9@%]+}})222  asm("foo %1,%0" : "=r,a,m" (mout0) : "r,a,m" (min1));223}224 225// CHECK: @multi_b226void multi_b(void)227{228  // CHECK: asm "foo $1,$0", "=*r|{bx}|m,r|{bx}|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 {{[a-zA-Z0-9@%]+}})229  asm("foo %1,%0" : "=r,b,m" (mout0) : "r,b,m" (min1));230}231 232// CHECK: @multi_c233void multi_c(void)234{235  // CHECK: asm "foo $1,$0", "=*r|{cx}|m,r|{cx}|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 {{[a-zA-Z0-9@%]+}})236  asm("foo %1,%0" : "=r,c,m" (mout0) : "r,c,m" (min1));237}238 239// CHECK: @multi_d240void multi_d(void)241{242  // CHECK: asm "foo $1,$0", "=*r|{dx}|m,r|{dx}|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 {{[a-zA-Z0-9@%]+}})243  asm("foo %1,%0" : "=r,d,m" (mout0) : "r,d,m" (min1));244}245 246// CHECK: @multi_S247void multi_S(void)248{249  // CHECK: asm "foo $1,$0", "=*r|{si}|m,r|{si}|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 {{[a-zA-Z0-9@%]+}})250  asm("foo %1,%0" : "=r,S,m" (mout0) : "r,S,m" (min1));251}252 253// CHECK: @multi_D254void multi_D(void)255{256  // CHECK: asm "foo $1,$0", "=*r|{di}|m,r|{di}|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 {{[a-zA-Z0-9@%]+}})257  asm("foo %1,%0" : "=r,D,m" (mout0) : "r,D,m" (min1));258}259 260// CHECK: @multi_A261void multi_A(void)262{263  // CHECK: asm "foo $1,$0", "=*r|A|m,r|A|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 {{[a-zA-Z0-9@%]+}})264  asm("foo %1,%0" : "=r,A,m" (mout0) : "r,A,m" (min1));265}266 267// CHECK: @multi_f268void multi_f(void)269{270//FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.271}272 273// CHECK: @multi_t274void multi_t(void)275{276//FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.277}278 279// CHECK: @multi_u280void multi_u(void)281{282//FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.283}284 285// CHECK: @multi_y286void multi_y(void)287{288  // CHECK: asm "foo $1,$0", "=*r|y|m,r|y|m[[CLOBBERS]](ptr elementtype(double) @dout0, double {{[a-zA-Z0-9@%]+}})289  asm("foo %1,%0" : "=r,y,m" (dout0) : "r,y,m" (din1));290}291 292// CHECK: @multi_x293void multi_x(void)294{295  // CHECK: asm "foo $1,$0", "=*r|x|m,r|x|m[[CLOBBERS]](ptr elementtype(double) @dout0, double {{[a-zA-Z0-9@%]+}})296  asm("foo %1,%0" : "=r,x,m" (dout0) : "r,x,m" (din1));297}298 299// CHECK: @multi_Y300void multi_Y0(void)301{302  // Y constraint currently broken.303  //asm("foo %1,%0" : "=r,Y0,m" (mout0) : "r,Y0,m" (min1));304  //asm("foo %1,%0" : "=r,Yz,m" (mout0) : "r,Yz,m" (min1));305  //asm("foo %1,%0" : "=r,Yt,m" (mout0) : "r,Yt,m" (min1));306  //asm("foo %1,%0" : "=r,Yi,m" (mout0) : "r,Yi,m" (min1));307  //asm("foo %1,%0" : "=r,Ym,m" (mout0) : "r,Ym,m" (min1));308}309 310// CHECK: @multi_I311void multi_I(void)312{313  // CHECK: asm "foo $1,$0", "=*r|m|m,r|I|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)314  asm("foo %1,%0" : "=r,m,m" (mout0) : "r,I,m" (1));315}316 317// CHECK: @multi_J318void multi_J(void)319{320  // CHECK: asm "foo $1,$0", "=*r|m|m,r|J|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)321  asm("foo %1,%0" : "=r,m,m" (mout0) : "r,J,m" (1));322}323 324// CHECK: @multi_K325void multi_K(void)326{327  // CHECK: asm "foo $1,$0", "=*r|m|m,r|K|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)328  asm("foo %1,%0" : "=r,m,m" (mout0) : "r,K,m" (1));329}330 331// CHECK: @multi_L332void multi_L(void)333{334  // CHECK: asm "foo $1,$0", "=*r|m|m,r|L|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)335  asm("foo %1,%0" : "=r,m,m" (mout0) : "r,L,m" (1));336}337 338// CHECK: @multi_M339void multi_M(void)340{341  // CHECK: asm "foo $1,$0", "=*r|m|m,r|M|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)342  asm("foo %1,%0" : "=r,m,m" (mout0) : "r,M,m" (1));343}344 345// CHECK: @multi_N346void multi_N(void)347{348  // CHECK: asm "foo $1,$0", "=*r|m|m,r|N|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)349  asm("foo %1,%0" : "=r,m,m" (mout0) : "r,N,m" (1));350}351 352// CHECK: @multi_G353void multi_G(void)354{355  // CHECK: asm "foo $1,$0", "=*r|m|m,r|G|m[[CLOBBERS]](ptr elementtype(i32) @mout0, double {{1.[0]+e[+]*[0]+}})356  asm("foo %1,%0" : "=r,m,m" (mout0) : "r,G,m" (1.0));357}358 359// CHECK: @multi_C360void multi_C(void)361{362  // CHECK: asm "foo $1,$0", "=*r|m|m,r|C|m[[CLOBBERS]](ptr elementtype(i32) @mout0, double {{1.[0]+e[+]*[0]+}})363  asm("foo %1,%0" : "=r,m,m" (mout0) : "r,C,m" (1.0));364}365 366// CHECK: @multi_e367void multi_e(void)368{369  // CHECK: asm "foo $1,$0", "=*r|m|m,r|e|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)370  asm("foo %1,%0" : "=r,m,m" (mout0) : "r,e,m" (1));371}372 373// CHECK: @multi_Z374void multi_Z(void)375{376  // CHECK: asm "foo $1,$0", "=*r|m|m,r|Z|m[[CLOBBERS]](ptr elementtype(i32) @mout0, i32 1)377  asm("foo %1,%0" : "=r,m,m" (mout0) : "r,Z,m" (1));378}379