asm.c revision ede9d900809c4fd0298d52f5a63088ecb8302275
14df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattnerc// RUN: clang-cc -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
31ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson// RUN: grep "T7 NAMED: \$1" %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}
4088beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner
4188beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner// PR3682
4288beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattnerunsigned t9(unsigned int a) {
4388beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner  asm("bswap %0 %1" : "+r" (a));
4488beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner  return a;
4588beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner}
46ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson
47ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson// PR3908
48ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson// RUN: grep "PR3908 \$1 \$3 \$2 \$0" %t
49ec91dab1977154f13621cfb63184364afee84ea1Anders Carlssonvoid t10(int r) {
50ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson  __asm__("PR3908 %[lf] %[xx] %[li] %[r]" : [r] "+r" (r) : [lf] "mx" (0), [li] "mr" (0), [xx] "x" ((double)(0)));
51ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson}
524df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner
534df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner
544df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner// PR3373
554df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattnerunsigned t11(signed char input) {
564df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner  unsigned  output;
574df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner  __asm__("xyz"
584df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner          : "=a" (output)
594df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner          : "0" (input));
604df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner  return output;
614df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner}
62ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner
63ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner
64ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner
65ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner
66ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattnerstruct S {
67ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner  int a : 4;
68ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner};
69ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner
70ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattnervoid test13(struct S *P) {
71ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner  __asm__("abc %0" : "=r"(P->a) );
72ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner}
73