]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/asm.c
Update clang to r97873.
[FreeBSD/FreeBSD.git] / test / CodeGen / asm.c
1 // RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s
2 void t1(int len) {
3   __asm__ volatile("" : "=&r"(len), "+&r"(len));
4 }
5
6 void t2(unsigned long long t)  {
7   __asm__ volatile("" : "+m"(t));
8 }
9
10 void t3(unsigned char *src, unsigned long long temp) {
11   __asm__ volatile("" : "+m"(temp), "+r"(src));
12 }
13
14 void t4() {
15   unsigned long long a;
16   struct reg { unsigned long long a, b; } b;
17
18   __asm__ volatile ("":: "m"(a), "m"(b));
19 }
20
21 // PR3417
22 void t5(int i) {
23   asm("nop" : "=r"(i) : "0"(t5));
24 }
25
26 // PR3641
27 void t6(void) {
28   __asm__ volatile("" : : "i" (t6));
29 }
30
31 void t7(int a) {
32   __asm__ volatile("T7 NAMED: %[input]" : "+r"(a): [input] "i" (4));
33   // CHECK: @t7(i32
34   // CHECK: T7 NAMED: $1
35 }
36
37 void t8() {
38   __asm__ volatile("T8 NAMED MODIFIER: %c[input]" :: [input] "i" (4));
39   // CHECK: @t8()
40   // CHECK: T8 NAMED MODIFIER: ${0:c}
41 }
42
43 // PR3682
44 unsigned t9(unsigned int a) {
45   asm("bswap %0 %1" : "+r" (a));
46   return a;
47 }
48
49 // PR3908
50 void t10(int r) {
51   __asm__("PR3908 %[lf] %[xx] %[li] %[r]" : [r] "+r" (r) : [lf] "mx" (0), [li] "mr" (0), [xx] "x" ((double)(0)));
52   
53 // CHECK: @t10(
54 // CHECK:PR3908 $1 $3 $2 $0
55 }         
56
57
58 // PR3373
59 unsigned t11(signed char input) {
60   unsigned  output;
61   __asm__("xyz"
62           : "=a" (output)
63           : "0" (input));
64   return output;
65 }
66
67 // PR3373
68 unsigned char t12(unsigned input) {
69   unsigned char output;
70   __asm__("xyz"
71           : "=a" (output)
72           : "0" (input));
73   return output;
74 }
75
76 unsigned char t13(unsigned input) {
77   unsigned char output;
78   __asm__("xyz %1"
79           : "=a" (output)
80           : "0" (input));
81   return output;
82 }
83
84 struct large {
85   int x[1000];
86 };
87
88 unsigned long t15(int x, struct large *P) {
89   __asm__("xyz "
90           : "=r" (x)
91           : "m" (*P), "0" (x));
92   return x;
93 }
94
95
96
97
98 // bitfield destination of an asm.
99 struct S {
100   int a : 4;
101 };
102
103 void t14(struct S *P) {
104   __asm__("abc %0" : "=r"(P->a) );
105 }
106
107
108 // PR4938
109 int t16() {
110   int a,b;
111   asm ( "nop;"
112        :"=%c" (a)
113        : "r" (b)
114        );
115   return 0;
116 }
117
118 // PR6475
119 void t17() {
120   int i;
121   __asm__ ( "nop": "=m"(i));
122   
123 // CHECK: @t17()
124 // CHECK: call void asm "nop", "=*m,
125 }
126
127 // <rdar://problem/6841383>
128 int t18(unsigned data) {
129   int a, b;
130   
131   asm("xyz" :"=a"(a), "=d"(b) : "a"(data));
132   return a + b;
133 // CHECK: t18(i32
134 // CHECK: = call {{.*}}asm "xyz"
135 // CHECK-NEXT: extractvalue
136 // CHECK-NEXT: extractvalue
137 }