xref: /minix3/external/bsd/llvm/dist/clang/test/CodeGen/mult-alt-generic.c (revision f4a2713ac843a11c696ec80c0a5e3e5d80b4d338)
1*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple i686 %s -emit-llvm -o - | FileCheck %s
2*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple x86_64 %s -emit-llvm -o - | FileCheck %s
3*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple arm %s -emit-llvm -o - | FileCheck %s
4*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple mips %s -emit-llvm -o - | FileCheck %s
5*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple mipsel %s -emit-llvm -o - | FileCheck %s
6*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple powerpc %s -emit-llvm -o - | FileCheck %s
7*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple powerpc64 %s -emit-llvm -o - | FileCheck %s
8*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple s390x %s -emit-llvm -o - | FileCheck %s
9*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple sparc %s -emit-llvm -o - | FileCheck %s
10*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple sparcv9 %s -emit-llvm -o - | FileCheck %s
11*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple thumb %s -emit-llvm -o - | FileCheck %s
12*f4a2713aSLionel Sambuc 
13*f4a2713aSLionel Sambuc int mout0;
14*f4a2713aSLionel Sambuc int min1;
15*f4a2713aSLionel Sambuc int marray[2];
16*f4a2713aSLionel Sambuc 
17*f4a2713aSLionel Sambuc // CHECK: @single_m
18*f4a2713aSLionel Sambuc void single_m()
19*f4a2713aSLionel Sambuc {
20*f4a2713aSLionel Sambuc   // CHECK: call void asm "foo $1,$0", "=*m,*m[[CLOBBERS:[a-zA-Z0-9@%{},~_ ]*\"]](i32* {{[a-zA-Z0-9@%]+}}, i32* {{[a-zA-Z0-9@%]+}})
21*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=m" (mout0) : "m" (min1));
22*f4a2713aSLionel Sambuc }
23*f4a2713aSLionel Sambuc 
24*f4a2713aSLionel Sambuc // CHECK: @single_o
25*f4a2713aSLionel Sambuc void single_o()
26*f4a2713aSLionel Sambuc {
27*f4a2713aSLionel Sambuc   register int out0 = 0;
28*f4a2713aSLionel Sambuc   register int index = 1;
29*f4a2713aSLionel Sambuc   // Doesn't really do an offset...
30*f4a2713aSLionel Sambuc   //asm("foo %1, %2,%0" : "=r" (out0) : "o" (min1));
31*f4a2713aSLionel Sambuc }
32*f4a2713aSLionel Sambuc 
33*f4a2713aSLionel Sambuc // CHECK: @single_V
34*f4a2713aSLionel Sambuc void single_V()
35*f4a2713aSLionel Sambuc {
36*f4a2713aSLionel Sambuc //  asm("foo %1,%0" : "=m" (mout0) : "V" (min1));
37*f4a2713aSLionel Sambuc }
38*f4a2713aSLionel Sambuc 
39*f4a2713aSLionel Sambuc // CHECK: @single_lt
40*f4a2713aSLionel Sambuc void single_lt()
41*f4a2713aSLionel Sambuc {
42*f4a2713aSLionel Sambuc   register int out0 = 0;
43*f4a2713aSLionel Sambuc   register int in1 = 1;
44*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,<r[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
45*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "<r" (in1));
46*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,r<[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
47*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "r<" (in1));
48*f4a2713aSLionel Sambuc }
49*f4a2713aSLionel Sambuc 
50*f4a2713aSLionel Sambuc // CHECK: @single_gt
51*f4a2713aSLionel Sambuc void single_gt()
52*f4a2713aSLionel Sambuc {
53*f4a2713aSLionel Sambuc   register int out0 = 0;
54*f4a2713aSLionel Sambuc   register int in1 = 1;
55*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,>r[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
56*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : ">r" (in1));
57*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,r>[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
58*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "r>" (in1));
59*f4a2713aSLionel Sambuc }
60*f4a2713aSLionel Sambuc 
61*f4a2713aSLionel Sambuc // CHECK: @single_r
62*f4a2713aSLionel Sambuc void single_r()
63*f4a2713aSLionel Sambuc {
64*f4a2713aSLionel Sambuc   register int out0 = 0;
65*f4a2713aSLionel Sambuc   register int in1 = 1;
66*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,r[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
67*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "r" (in1));
68*f4a2713aSLionel Sambuc }
69*f4a2713aSLionel Sambuc 
70*f4a2713aSLionel Sambuc // CHECK: @single_i
71*f4a2713aSLionel Sambuc void single_i()
72*f4a2713aSLionel Sambuc {
73*f4a2713aSLionel Sambuc   register int out0 = 0;
74*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,i[[CLOBBERS]](i32 1)
75*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "i" (1));
76*f4a2713aSLionel Sambuc }
77*f4a2713aSLionel Sambuc 
78*f4a2713aSLionel Sambuc // CHECK: @single_n
79*f4a2713aSLionel Sambuc void single_n()
80*f4a2713aSLionel Sambuc {
81*f4a2713aSLionel Sambuc   register int out0 = 0;
82*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,n[[CLOBBERS]](i32 1)
83*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "n" (1));
84*f4a2713aSLionel Sambuc }
85*f4a2713aSLionel Sambuc 
86*f4a2713aSLionel Sambuc // CHECK: @single_E
87*f4a2713aSLionel Sambuc void single_E()
88*f4a2713aSLionel Sambuc {
89*f4a2713aSLionel Sambuc   register double out0 = 0.0;
90*f4a2713aSLionel Sambuc   // CHECK: call double asm "foo $1,$0", "=r,E[[CLOBBERS]](double {{[0-9.eE+-]+}})
91*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "E" (1.0e+01));
92*f4a2713aSLionel Sambuc }
93*f4a2713aSLionel Sambuc 
94*f4a2713aSLionel Sambuc // CHECK: @single_F
95*f4a2713aSLionel Sambuc void single_F()
96*f4a2713aSLionel Sambuc {
97*f4a2713aSLionel Sambuc   register double out0 = 0.0;
98*f4a2713aSLionel Sambuc   // CHECK: call double asm "foo $1,$0", "=r,F[[CLOBBERS]](double {{[0-9.eE+-]+}})
99*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "F" (1.0));
100*f4a2713aSLionel Sambuc }
101*f4a2713aSLionel Sambuc 
102*f4a2713aSLionel Sambuc // CHECK: @single_s
103*f4a2713aSLionel Sambuc void single_s()
104*f4a2713aSLionel Sambuc {
105*f4a2713aSLionel Sambuc   register int out0 = 0;
106*f4a2713aSLionel Sambuc   //asm("foo %1,%0" : "=r" (out0) : "s" (single_s));
107*f4a2713aSLionel Sambuc }
108*f4a2713aSLionel Sambuc 
109*f4a2713aSLionel Sambuc // CHECK: @single_g
110*f4a2713aSLionel Sambuc void single_g()
111*f4a2713aSLionel Sambuc {
112*f4a2713aSLionel Sambuc   register int out0 = 0;
113*f4a2713aSLionel Sambuc   register int in1 = 1;
114*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,imr[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
115*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "g" (in1));
116*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,imr[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
117*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "g" (min1));
118*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,imr[[CLOBBERS]](i32 1)
119*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "g" (1));
120*f4a2713aSLionel Sambuc }
121*f4a2713aSLionel Sambuc 
122*f4a2713aSLionel Sambuc // CHECK: @single_X
123*f4a2713aSLionel Sambuc void single_X()
124*f4a2713aSLionel Sambuc {
125*f4a2713aSLionel Sambuc   register int out0 = 0;
126*f4a2713aSLionel Sambuc   register int in1 = 1;
127*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
128*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "X" (in1));
129*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
130*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "X" (min1));
131*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](i32 1)
132*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "X" (1));
133*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](i32* getelementptr inbounds ([2 x i32]* {{[a-zA-Z0-9@%]+}}, i32 0, i32 0))
134*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "X" (marray));
135*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](double {{[0-9.eE+-]+}})
136*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "X" (1.0e+01));
137*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](double {{[0-9.eE+-]+}})
138*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "X" (1.0));
139*f4a2713aSLionel Sambuc }
140*f4a2713aSLionel Sambuc 
141*f4a2713aSLionel Sambuc // CHECK: @single_p
142*f4a2713aSLionel Sambuc void single_p()
143*f4a2713aSLionel Sambuc {
144*f4a2713aSLionel Sambuc   register int out0 = 0;
145*f4a2713aSLionel Sambuc   // Constraint converted differently on different platforms moved to platform-specific.
146*f4a2713aSLionel Sambuc   // : call i32 asm "foo $1,$0", "=r,im[[CLOBBERS]](i32* getelementptr inbounds ([2 x i32]* {{[a-zA-Z0-9@%]+}}, i32 0, i32 0))
147*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r" (out0) : "p" (marray));
148*f4a2713aSLionel Sambuc }
149*f4a2713aSLionel Sambuc 
150*f4a2713aSLionel Sambuc // CHECK: @multi_m
151*f4a2713aSLionel Sambuc void multi_m()
152*f4a2713aSLionel Sambuc {
153*f4a2713aSLionel Sambuc   // CHECK: call void asm "foo $1,$0", "=*m|r,m|r[[CLOBBERS]](i32* {{[a-zA-Z0-9@%]+}}, i32 {{[a-zA-Z0-9@%]+}})
154*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=m,r" (mout0) : "m,r" (min1));
155*f4a2713aSLionel Sambuc }
156*f4a2713aSLionel Sambuc 
157*f4a2713aSLionel Sambuc // CHECK: @multi_o
158*f4a2713aSLionel Sambuc void multi_o()
159*f4a2713aSLionel Sambuc {
160*f4a2713aSLionel Sambuc   register int out0 = 0;
161*f4a2713aSLionel Sambuc   register int index = 1;
162*f4a2713aSLionel Sambuc   // Doesn't really do an offset...
163*f4a2713aSLionel Sambuc   //asm("foo %1, %2,%0" : "=r,r" (out0) : "r,o" (min1));
164*f4a2713aSLionel Sambuc }
165*f4a2713aSLionel Sambuc 
166*f4a2713aSLionel Sambuc // CHECK: @multi_V
167*f4a2713aSLionel Sambuc void multi_V()
168*f4a2713aSLionel Sambuc {
169*f4a2713aSLionel Sambuc //  asm("foo %1,%0" : "=m,r" (mout0) : "r,V" (min1));
170*f4a2713aSLionel Sambuc }
171*f4a2713aSLionel Sambuc 
172*f4a2713aSLionel Sambuc // CHECK: @multi_lt
173*f4a2713aSLionel Sambuc void multi_lt()
174*f4a2713aSLionel Sambuc {
175*f4a2713aSLionel Sambuc   register int out0 = 0;
176*f4a2713aSLionel Sambuc   register int in1 = 1;
177*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|<r[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
178*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,<r" (in1));
179*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|r<[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
180*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,r<" (in1));
181*f4a2713aSLionel Sambuc }
182*f4a2713aSLionel Sambuc 
183*f4a2713aSLionel Sambuc // CHECK: @multi_gt
184*f4a2713aSLionel Sambuc void multi_gt()
185*f4a2713aSLionel Sambuc {
186*f4a2713aSLionel Sambuc   register int out0 = 0;
187*f4a2713aSLionel Sambuc   register int in1 = 1;
188*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|>r[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
189*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,>r" (in1));
190*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|r>[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
191*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,r>" (in1));
192*f4a2713aSLionel Sambuc }
193*f4a2713aSLionel Sambuc 
194*f4a2713aSLionel Sambuc // CHECK: @multi_r
195*f4a2713aSLionel Sambuc void multi_r()
196*f4a2713aSLionel Sambuc {
197*f4a2713aSLionel Sambuc   register int out0 = 0;
198*f4a2713aSLionel Sambuc   register int in1 = 1;
199*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|m[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
200*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,m" (in1));
201*f4a2713aSLionel Sambuc }
202*f4a2713aSLionel Sambuc 
203*f4a2713aSLionel Sambuc // CHECK: @multi_i
204*f4a2713aSLionel Sambuc void multi_i()
205*f4a2713aSLionel Sambuc {
206*f4a2713aSLionel Sambuc   register int out0 = 0;
207*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|i[[CLOBBERS]](i32 1)
208*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,i" (1));
209*f4a2713aSLionel Sambuc }
210*f4a2713aSLionel Sambuc 
211*f4a2713aSLionel Sambuc // CHECK: @multi_n
212*f4a2713aSLionel Sambuc void multi_n()
213*f4a2713aSLionel Sambuc {
214*f4a2713aSLionel Sambuc   register int out0 = 0;
215*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|n[[CLOBBERS]](i32 1)
216*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,n" (1));
217*f4a2713aSLionel Sambuc }
218*f4a2713aSLionel Sambuc 
219*f4a2713aSLionel Sambuc // CHECK: @multi_E
220*f4a2713aSLionel Sambuc void multi_E()
221*f4a2713aSLionel Sambuc {
222*f4a2713aSLionel Sambuc   register double out0 = 0.0;
223*f4a2713aSLionel Sambuc   // CHECK: call double asm "foo $1,$0", "=r|r,r|E[[CLOBBERS]](double {{[0-9.eE+-]+}})
224*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,E" (1.0e+01));
225*f4a2713aSLionel Sambuc }
226*f4a2713aSLionel Sambuc 
227*f4a2713aSLionel Sambuc // CHECK: @multi_F
228*f4a2713aSLionel Sambuc void multi_F()
229*f4a2713aSLionel Sambuc {
230*f4a2713aSLionel Sambuc   register double out0 = 0.0;
231*f4a2713aSLionel Sambuc   // CHECK: call double asm "foo $1,$0", "=r|r,r|F[[CLOBBERS]](double {{[0-9.eE+-]+}})
232*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,F" (1.0));
233*f4a2713aSLionel Sambuc }
234*f4a2713aSLionel Sambuc 
235*f4a2713aSLionel Sambuc // CHECK: @multi_s
236*f4a2713aSLionel Sambuc void multi_s()
237*f4a2713aSLionel Sambuc {
238*f4a2713aSLionel Sambuc   register int out0 = 0;
239*f4a2713aSLionel Sambuc   //asm("foo %1,%0" : "=r,r" (out0) : "r,s" (multi_s));
240*f4a2713aSLionel Sambuc }
241*f4a2713aSLionel Sambuc 
242*f4a2713aSLionel Sambuc // CHECK: @multi_g
243*f4a2713aSLionel Sambuc void multi_g()
244*f4a2713aSLionel Sambuc {
245*f4a2713aSLionel Sambuc   register int out0 = 0;
246*f4a2713aSLionel Sambuc   register int in1 = 1;
247*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|imr[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
248*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,g" (in1));
249*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|imr[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
250*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,g" (min1));
251*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|imr[[CLOBBERS]](i32 1)
252*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,g" (1));
253*f4a2713aSLionel Sambuc }
254*f4a2713aSLionel Sambuc 
255*f4a2713aSLionel Sambuc // CHECK: @multi_X
256*f4a2713aSLionel Sambuc void multi_X()
257*f4a2713aSLionel Sambuc {
258*f4a2713aSLionel Sambuc   register int out0 = 0;
259*f4a2713aSLionel Sambuc   register int in1 = 1;
260*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
261*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,X" (in1));
262*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
263*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,X" (min1));
264*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](i32 1)
265*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,X" (1));
266*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](i32* getelementptr inbounds ([2 x i32]* {{[a-zA-Z0-9@%]+}}, i32 0, i32 0))
267*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,X" (marray));
268*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](double {{[0-9.eE+-]+}})
269*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,X" (1.0e+01));
270*f4a2713aSLionel Sambuc   // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](double {{[0-9.eE+-]+}})
271*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,X" (1.0));
272*f4a2713aSLionel Sambuc }
273*f4a2713aSLionel Sambuc 
274*f4a2713aSLionel Sambuc // CHECK: @multi_p
275*f4a2713aSLionel Sambuc void multi_p()
276*f4a2713aSLionel Sambuc {
277*f4a2713aSLionel Sambuc   register int out0 = 0;
278*f4a2713aSLionel Sambuc   // Constraint converted differently on different platforms moved to platform-specific.
279*f4a2713aSLionel Sambuc   // : call i32 asm "foo $1,$0", "=r|r,r|im[[CLOBBERS]](i32* getelementptr inbounds ([2 x i32]* {{[a-zA-Z0-9@%]+}}, i32 0, i32 0))
280*f4a2713aSLionel Sambuc   asm("foo %1,%0" : "=r,r" (out0) : "r,p" (marray));
281*f4a2713aSLionel Sambuc }
282