asm.c revision 02af974dca0f855dc36d8a8c26bb87f373310815
110ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattner// RUN: clang -emit-llvm %s -o %t -arch=i386 &&
210ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t1(int len) {
39f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson  __asm__ volatile("" : "=&r"(len), "+&r"(len));
42763b3af0a527c3a63cb058b90c22db0b7bcf558Anders Carlsson}
59f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson
610ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t2(unsigned long long t)  {
79f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson  __asm__ volatile("" : "+m"(t));
89f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson}
99f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson
1010ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t3(unsigned char *src, unsigned long long temp) {
119f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson  __asm__ volatile("" : "+m"(temp), "+r"(src));
129f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson}
139f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson
1410ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t4() {
15ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson  unsigned long long a;
16ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson  struct reg { unsigned long long a, b; } b;
17ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson
18ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson	__asm__ volatile ("":: "m"(a), "m"(b));
19ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson}
209f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson
2103eb543cf7ebee463b33b5802b83ac92c21770cfAnders Carlsson// PR3417
2210ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t5(int i) {
2303eb543cf7ebee463b33b5802b83ac92c21770cfAnders Carlsson  asm("nop" : "=r"(i) : "0"(t5));
2403eb543cf7ebee463b33b5802b83ac92c21770cfAnders Carlsson}
256032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson
266032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson// PR3641
2710ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t6(void) {
286032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson  __asm__ volatile("" : : "i" (t6));
296032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson}
3010ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattner
3110ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattner// RUN: grep "T7 NAMED: \$2" %t
3210ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t7(int a) {
3310ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattner  __asm__ volatile("T7 NAMED: %[input]" : "+r"(a): [input] "i" (4));
3402af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner}
3502af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner
3602af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner// RUN: grep "T8 NAMED MODIFIER: \${0:c}" %t
3702af974dca0f855dc36d8a8c26bb87f373310815Chris Lattnervoid t8() {
3802af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner  __asm__ volatile("T8 NAMED MODIFIER: %c[input]" :: [input] "i" (4));
3902af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner}
40