1b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s 29f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner 39f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner// PR10415 49f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner__asm__ ("foo1"); 59f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner__asm__ ("foo2"); 69f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner__asm__ ("foo3"); 79f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner// CHECK: module asm "foo1" 89f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner// CHECK-NEXT: module asm "foo2" 99f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner// CHECK-NEXT: module asm "foo3" 109f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner 1110ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t1(int len) { 129f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson __asm__ volatile("" : "=&r"(len), "+&r"(len)); 132763b3af0a527c3a63cb058b90c22db0b7bcf558Anders Carlsson} 149f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson 1510ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t2(unsigned long long t) { 169f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson __asm__ volatile("" : "+m"(t)); 179f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson} 189f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson 1910ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t3(unsigned char *src, unsigned long long temp) { 209f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson __asm__ volatile("" : "+m"(temp), "+r"(src)); 219f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson} 229f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson 2310ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t4() { 24ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson unsigned long long a; 25ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson struct reg { unsigned long long a, b; } b; 26ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson 271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump __asm__ volatile ("":: "m"(a), "m"(b)); 28ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson} 299f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson 3003eb543cf7ebee463b33b5802b83ac92c21770cfAnders Carlsson// PR3417 3110ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t5(int i) { 3203eb543cf7ebee463b33b5802b83ac92c21770cfAnders Carlsson asm("nop" : "=r"(i) : "0"(t5)); 3303eb543cf7ebee463b33b5802b83ac92c21770cfAnders Carlsson} 346032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson 356032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson// PR3641 3610ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t6(void) { 376032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson __asm__ volatile("" : : "i" (t6)); 386032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson} 3910ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattner 4010ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t7(int a) { 4110ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattner __asm__ volatile("T7 NAMED: %[input]" : "+r"(a): [input] "i" (4)); 4229a4071fc450ee17449ad73266012c1b1b975511Chris Lattner // CHECK: @t7(i32 4329a4071fc450ee17449ad73266012c1b1b975511Chris Lattner // CHECK: T7 NAMED: $1 4402af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner} 4502af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner 4602af974dca0f855dc36d8a8c26bb87f373310815Chris Lattnervoid t8() { 4702af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner __asm__ volatile("T8 NAMED MODIFIER: %c[input]" :: [input] "i" (4)); 4829a4071fc450ee17449ad73266012c1b1b975511Chris Lattner // CHECK: @t8() 4929a4071fc450ee17449ad73266012c1b1b975511Chris Lattner // CHECK: T8 NAMED MODIFIER: ${0:c} 5002af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner} 5188beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner 5288beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner// PR3682 5388beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattnerunsigned t9(unsigned int a) { 5488beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner asm("bswap %0 %1" : "+r" (a)); 5588beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner return a; 5688beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner} 57ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson 58ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson// PR3908 59ec91dab1977154f13621cfb63184364afee84ea1Anders Carlssonvoid t10(int r) { 60ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson __asm__("PR3908 %[lf] %[xx] %[li] %[r]" : [r] "+r" (r) : [lf] "mx" (0), [li] "mr" (0), [xx] "x" ((double)(0))); 6178b929121f44f7c983fce8c871aa913dce087561Eric Christopher 6229a4071fc450ee17449ad73266012c1b1b975511Chris Lattner// CHECK: @t10( 6329a4071fc450ee17449ad73266012c1b1b975511Chris Lattner// CHECK:PR3908 $1 $3 $2 $0 6478b929121f44f7c983fce8c871aa913dce087561Eric Christopher} 654df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner 664df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner// PR3373 674df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattnerunsigned t11(signed char input) { 684df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner unsigned output; 694df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner __asm__("xyz" 704df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner : "=a" (output) 714df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner : "0" (input)); 724df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner return output; 734df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner} 74ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner 75a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner// PR3373 76a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattnerunsigned char t12(unsigned input) { 77a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner unsigned char output; 78a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner __asm__("xyz" 79a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner : "=a" (output) 80a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner : "0" (input)); 81a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner return output; 82a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner} 83ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner 843351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattnerunsigned char t13(unsigned input) { 853351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner unsigned char output; 863351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner __asm__("xyz %1" 873351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner : "=a" (output) 883351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner : "0" (input)); 893351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner return output; 903351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner} 913351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner 920bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattnerstruct large { 930bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner int x[1000]; 940bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner}; 950bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner 960bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattnerunsigned long t15(int x, struct large *P) { 970bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner __asm__("xyz " 980bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner : "=r" (x) 990bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner : "m" (*P), "0" (x)); 1000bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner return x; 1010bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner} 1020bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner 1033351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner// bitfield destination of an asm. 104ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattnerstruct S { 105ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner int a : 4; 106ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner}; 107ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner 1083351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattnervoid t14(struct S *P) { 109ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner __asm__("abc %0" : "=r"(P->a) ); 110ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner} 1113351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner 1124053983963cb94a6129da47bca8cce637c8b7bffChris Lattner// PR4938 1134053983963cb94a6129da47bca8cce637c8b7bffChris Lattnerint t16() { 1144053983963cb94a6129da47bca8cce637c8b7bffChris Lattner int a,b; 1154053983963cb94a6129da47bca8cce637c8b7bffChris Lattner asm ( "nop;" 1164053983963cb94a6129da47bca8cce637c8b7bffChris Lattner :"=%c" (a) 1174053983963cb94a6129da47bca8cce637c8b7bffChris Lattner : "r" (b) 1184053983963cb94a6129da47bca8cce637c8b7bffChris Lattner ); 1194053983963cb94a6129da47bca8cce637c8b7bffChris Lattner return 0; 1204053983963cb94a6129da47bca8cce637c8b7bffChris Lattner} 121b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner 122b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner// PR6475 123b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattnervoid t17() { 124b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner int i; 125b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner __asm__ ( "nop": "=m"(i)); 12678b929121f44f7c983fce8c871aa913dce087561Eric Christopher 127b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner// CHECK: @t17() 128b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner// CHECK: call void asm "nop", "=*m, 129b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner} 130b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner 131eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner// <rdar://problem/6841383> 132eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattnerint t18(unsigned data) { 133eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner int a, b; 13478b929121f44f7c983fce8c871aa913dce087561Eric Christopher 135eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner asm("xyz" :"=a"(a), "=d"(b) : "a"(data)); 136eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner return a + b; 137eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner// CHECK: t18(i32 138eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner// CHECK: = call {{.*}}asm "xyz" 139eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner// CHECK-NEXT: extractvalue 140eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner// CHECK-NEXT: extractvalue 141eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner} 142018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner 143018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner// PR6780 144018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattnerint t19(unsigned data) { 145018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner int a, b; 14678b929121f44f7c983fce8c871aa913dce087561Eric Christopher 147018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner asm("x{abc|def|ghi}z" :"=r"(a): "r"(data)); 148018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner return a + b; 149018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner // CHECK: t19(i32 150018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner // CHECK: = call {{.*}}asm "x$(abc$|def$|ghi$)z" 151018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner} 152018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner 153aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner// PR6845 - Mismatching source/dest fp types. 154aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattnerdouble t20(double x) { 155aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner register long double result; 156aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner __asm __volatile ("frndint" : "=t" (result) : "0" (x)); 157aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner return result; 15878b929121f44f7c983fce8c871aa913dce087561Eric Christopher 159aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner // CHECK: @t20 160aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner // CHECK: fpext double {{.*}} to x86_fp80 161aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner // CHECK-NEXT: call x86_fp80 asm sideeffect "frndint" 162aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner // CHECK: fptrunc x86_fp80 {{.*}} to double 163aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner} 164aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner 165aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattnerfloat t21(long double x) { 166aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner register float result; 167aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner __asm __volatile ("frndint" : "=t" (result) : "0" (x)); 168aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner return result; 169aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner // CHECK: @t21 170aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner // CHECK: call x86_fp80 asm sideeffect "frndint" 171aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner // CHECK-NEXT: fptrunc x86_fp80 {{.*}} to float 172aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner} 173545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen 174545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen// <rdar://problem/8348447> - accept 'l' constraint 175545be51fdfbd243b9ee98177a80397504327a687Dale Johannesenunsigned char t22(unsigned char a, unsigned char b) { 176545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen unsigned int la = a; 177545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen unsigned int lb = b; 178545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen unsigned int bigres; 179545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen unsigned char res; 180545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen __asm__ ("0:\n1:\n" : [bigres] "=la"(bigres) : [la] "0"(la), [lb] "c"(lb) : 181545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen "edx", "cc"); 182545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen res = bigres; 183545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen return res; 184545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen} 185545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen 186545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen// <rdar://problem/8348447> - accept 'l' constraint 187545be51fdfbd243b9ee98177a80397504327a687Dale Johannesenunsigned char t23(unsigned char a, unsigned char b) { 188545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen unsigned int la = a; 189545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen unsigned int lb = b; 190545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen unsigned char res; 191545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen __asm__ ("0:\n1:\n" : [res] "=la"(res) : [la] "0"(la), [lb] "c"(lb) : 192545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen "edx", "cc"); 193545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen return res; 194545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen} 19578b929121f44f7c983fce8c871aa913dce087561Eric Christopher 19693f1322684e928a559286ba1c7cb83af077aa658Peter Collingbournevoid *t24(char c) { 19793f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne void *addr; 19893f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne // CHECK: @t24 19993f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne // CHECK: zext i8 {{.*}} to i32 20093f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne // CHECK-NEXT: call i8* asm "foobar" 20193f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne __asm__ ("foobar" : "=a" (addr) : "0" (c)); 20293f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne return addr; 20393f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne} 20493f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne 20578b929121f44f7c983fce8c871aa913dce087561Eric Christopher// PR10299 - fpsr, fpcr 206867a379acd42b0edef4836f44af540c7e34cc021Eric Christophervoid t25(void) 20778b929121f44f7c983fce8c871aa913dce087561Eric Christopher{ 20878b929121f44f7c983fce8c871aa913dce087561Eric Christopher __asm__ __volatile__( \ 20978b929121f44f7c983fce8c871aa913dce087561Eric Christopher "finit" \ 21078b929121f44f7c983fce8c871aa913dce087561Eric Christopher : \ 21178b929121f44f7c983fce8c871aa913dce087561Eric Christopher : \ 21278b929121f44f7c983fce8c871aa913dce087561Eric Christopher :"st","st(1)","st(2)","st(3)", \ 21378b929121f44f7c983fce8c871aa913dce087561Eric Christopher "st(4)","st(5)","st(6)","st(7)", \ 21478b929121f44f7c983fce8c871aa913dce087561Eric Christopher "fpsr","fpcr" \ 21578b929121f44f7c983fce8c871aa913dce087561Eric Christopher ); 21678b929121f44f7c983fce8c871aa913dce087561Eric Christopher} 217c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christopher 218c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christopher// rdar://10510405 - AVX registers 219c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christophertypedef long long __m256i __attribute__((__vector_size__(32))); 220c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christophervoid t26 (__m256i *p) { 221c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christopher __asm__ volatile("vmovaps %0, %%ymm0" :: "m" (*(__m256i*)p) : "ymm0"); 222c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christopher} 22374896e074856c3248d88ddddf45bfda7256ab022Chad Rosier 22474896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// Check to make sure the inline asm non-standard dialect attribute _not_ is 22574896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// emitted. 22674896e074856c3248d88ddddf45bfda7256ab022Chad Rosiervoid t27(void) { 22774896e074856c3248d88ddddf45bfda7256ab022Chad Rosier asm volatile("nop"); 22874896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// CHECK: @t27 22974896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// CHECK: call void asm sideeffect "nop" 23074896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// CHECK-NOT: ia_nsdialect 23174896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// CHECK: ret void 23274896e074856c3248d88ddddf45bfda7256ab022Chad Rosier} 233e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand 234e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand// Check handling of '*' and '#' constraint modifiers. 235e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigandvoid t28(void) 236e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand{ 237e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand asm volatile ("/* %0 */" : : "i#*X,*r" (1)); 238e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand// CHECK: @t28 239e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand// CHECK: call void asm sideeffect "/* $0 */", "i|r,~{dirflag},~{fpsr},~{flags}"(i32 1) 240e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand} 241e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand 242