xref: /aosp_15_r20/external/clang/test/CodeGen/mult-alt-x86.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple i686 -emit-llvm %s -o - | FileCheck %s
2*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64 -emit-llvm %s -o - | FileCheck %s
3*67e74705SXin Li 
4*67e74705SXin Li int mout0;
5*67e74705SXin Li int min1;
6*67e74705SXin Li int marray[2];
7*67e74705SXin Li double dout0;
8*67e74705SXin Li double din1;
9*67e74705SXin Li 
10*67e74705SXin Li // CHECK: @single_R
single_R()11*67e74705SXin Li void single_R()
12*67e74705SXin Li {
13*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=R,R[[CLOBBERS:[a-zA-Z0-9@%{},~_ ]*\"]](i32 {{[a-zA-Z0-9@%]+}})
14*67e74705SXin Li   asm("foo %1,%0" : "=R" (mout0) : "R" (min1));
15*67e74705SXin Li }
16*67e74705SXin Li 
17*67e74705SXin Li // CHECK: @single_q
single_q()18*67e74705SXin Li void single_q()
19*67e74705SXin Li {
20*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=q,q[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
21*67e74705SXin Li   asm("foo %1,%0" : "=q" (mout0) : "q" (min1));
22*67e74705SXin Li }
23*67e74705SXin Li 
24*67e74705SXin Li // CHECK: @single_Q
single_Q()25*67e74705SXin Li void single_Q()
26*67e74705SXin Li {
27*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=Q,Q[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
28*67e74705SXin Li   asm("foo %1,%0" : "=Q" (mout0) : "Q" (min1));
29*67e74705SXin Li }
30*67e74705SXin Li 
31*67e74705SXin Li // CHECK: @single_a
single_a()32*67e74705SXin Li void single_a()
33*67e74705SXin Li {
34*67e74705SXin Li   // CHECK: asm "foo $1,$0", "={ax},{ax}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
35*67e74705SXin Li   asm("foo %1,%0" : "=a" (mout0) : "a" (min1));
36*67e74705SXin Li }
37*67e74705SXin Li 
38*67e74705SXin Li // CHECK: @single_b
single_b()39*67e74705SXin Li void single_b()
40*67e74705SXin Li {
41*67e74705SXin Li   // CHECK: asm "foo $1,$0", "={bx},{bx}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
42*67e74705SXin Li   asm("foo %1,%0" : "=b" (mout0) : "b" (min1));
43*67e74705SXin Li }
44*67e74705SXin Li 
45*67e74705SXin Li // CHECK: @single_c
single_c()46*67e74705SXin Li void single_c()
47*67e74705SXin Li {
48*67e74705SXin Li   // CHECK: asm "foo $1,$0", "={cx},{cx}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
49*67e74705SXin Li   asm("foo %1,%0" : "=c" (mout0) : "c" (min1));
50*67e74705SXin Li }
51*67e74705SXin Li 
52*67e74705SXin Li // CHECK: @single_d
single_d()53*67e74705SXin Li void single_d()
54*67e74705SXin Li {
55*67e74705SXin Li   // CHECK: asm "foo $1,$0", "={dx},{dx}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
56*67e74705SXin Li   asm("foo %1,%0" : "=d" (mout0) : "d" (min1));
57*67e74705SXin Li }
58*67e74705SXin Li 
59*67e74705SXin Li // CHECK: @single_S
single_S()60*67e74705SXin Li void single_S()
61*67e74705SXin Li {
62*67e74705SXin Li   // CHECK: asm "foo $1,$0", "={si},{si}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
63*67e74705SXin Li   asm("foo %1,%0" : "=S" (mout0) : "S" (min1));
64*67e74705SXin Li }
65*67e74705SXin Li 
66*67e74705SXin Li // CHECK: @single_D
single_D()67*67e74705SXin Li void single_D()
68*67e74705SXin Li {
69*67e74705SXin Li   // CHECK: asm "foo $1,$0", "={di},{di}[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
70*67e74705SXin Li   asm("foo %1,%0" : "=D" (mout0) : "D" (min1));
71*67e74705SXin Li }
72*67e74705SXin Li 
73*67e74705SXin Li // CHECK: @single_A
single_A()74*67e74705SXin Li void single_A()
75*67e74705SXin Li {
76*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=A,A[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})
77*67e74705SXin Li   asm("foo %1,%0" : "=A" (mout0) : "A" (min1));
78*67e74705SXin Li }
79*67e74705SXin Li 
80*67e74705SXin Li // CHECK: @single_f
single_f()81*67e74705SXin Li void single_f()
82*67e74705SXin Li {
83*67e74705SXin Li //FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.
84*67e74705SXin Li }
85*67e74705SXin Li 
86*67e74705SXin Li // CHECK: @single_t
single_t()87*67e74705SXin Li void single_t()
88*67e74705SXin Li {
89*67e74705SXin Li //FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.
90*67e74705SXin Li }
91*67e74705SXin Li 
92*67e74705SXin Li // CHECK: @single_u
single_u()93*67e74705SXin Li void single_u()
94*67e74705SXin Li {
95*67e74705SXin Li //FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.
96*67e74705SXin Li }
97*67e74705SXin Li 
98*67e74705SXin Li // CHECK: @single_y
single_y()99*67e74705SXin Li void single_y()
100*67e74705SXin Li {
101*67e74705SXin Li   // CHECK: call double asm "foo $1,$0", "=y,y[[CLOBBERS]](double {{[a-zA-Z0-9@%]+}})
102*67e74705SXin Li   asm("foo %1,%0" : "=y" (dout0) : "y" (din1));
103*67e74705SXin Li }
104*67e74705SXin Li 
105*67e74705SXin Li // CHECK: @single_x
single_x()106*67e74705SXin Li void single_x()
107*67e74705SXin Li {
108*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=x,x[[CLOBBERS]](double {{[a-zA-Z0-9@%]+}})
109*67e74705SXin Li   asm("foo %1,%0" : "=x" (dout0) : "x" (din1));
110*67e74705SXin Li }
111*67e74705SXin Li 
112*67e74705SXin Li // CHECK: @single_Y
single_Y()113*67e74705SXin Li void single_Y()
114*67e74705SXin Li {
115*67e74705SXin Li   // 'Y' constraint currently broken.
116*67e74705SXin Li   //asm("foo %1,%0" : "=Y0" (mout0) : "Y0" (min1));
117*67e74705SXin Li   //asm("foo %1,%0" : "=Yz" (mout0) : "Yz" (min1));
118*67e74705SXin Li   //asm("foo %1,%0" : "=Yt" (mout0) : "Yt" (min1));
119*67e74705SXin Li   //asm("foo %1,%0" : "=Yi" (mout0) : "Yi" (min1));
120*67e74705SXin Li   //asm("foo %1,%0" : "=Ym" (mout0) : "Ym" (min1));
121*67e74705SXin Li }
122*67e74705SXin Li 
123*67e74705SXin Li // CHECK: @single_I
single_I()124*67e74705SXin Li void single_I()
125*67e74705SXin Li {
126*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,I[[CLOBBERS]](i32* @mout0, i32 1)
127*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "I" (1));
128*67e74705SXin Li }
129*67e74705SXin Li 
130*67e74705SXin Li // CHECK: @single_J
single_J()131*67e74705SXin Li void single_J()
132*67e74705SXin Li {
133*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,J[[CLOBBERS]](i32* @mout0, i32 1)
134*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "J" (1));
135*67e74705SXin Li }
136*67e74705SXin Li 
137*67e74705SXin Li // CHECK: @single_K
single_K()138*67e74705SXin Li void single_K()
139*67e74705SXin Li {
140*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,K[[CLOBBERS]](i32* @mout0, i32 1)
141*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "K" (1));
142*67e74705SXin Li }
143*67e74705SXin Li 
144*67e74705SXin Li // CHECK: @single_L
single_L()145*67e74705SXin Li void single_L()
146*67e74705SXin Li {
147*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,L[[CLOBBERS]](i32* @mout0, i32 255)
148*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "L" (0xff));
149*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,L[[CLOBBERS]](i32* @mout0, i32 65535)
150*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "L" (0xffff));
151*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,L[[CLOBBERS]](i32* @mout0, i32 -1)
152*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "L" (0xffffffff));
153*67e74705SXin Li }
154*67e74705SXin Li 
155*67e74705SXin Li // CHECK: @single_M
single_M()156*67e74705SXin Li void single_M()
157*67e74705SXin Li {
158*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,M[[CLOBBERS]](i32* @mout0, i32 1)
159*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "M" (1));
160*67e74705SXin Li }
161*67e74705SXin Li 
162*67e74705SXin Li // CHECK: @single_N
single_N()163*67e74705SXin Li void single_N()
164*67e74705SXin Li {
165*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,N[[CLOBBERS]](i32* @mout0, i32 1)
166*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "N" (1));
167*67e74705SXin Li }
168*67e74705SXin Li 
169*67e74705SXin Li // CHECK: @single_G
single_G()170*67e74705SXin Li void single_G()
171*67e74705SXin Li {
172*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,G[[CLOBBERS]](i32* @mout0, double {{1.[0]+e[+]*[0]+}})
173*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "G" (1.0));
174*67e74705SXin Li }
175*67e74705SXin Li 
176*67e74705SXin Li // CHECK: @single_C
single_C()177*67e74705SXin Li void single_C()
178*67e74705SXin Li {
179*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,C[[CLOBBERS]](i32* @mout0, double {{1.[0]+e[+]*[0]+}})
180*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "C" (1.0));
181*67e74705SXin Li }
182*67e74705SXin Li 
183*67e74705SXin Li // CHECK: @single_e
single_e()184*67e74705SXin Li void single_e()
185*67e74705SXin Li {
186*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,e[[CLOBBERS]](i32* @mout0, i32 1)
187*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "e" (1));
188*67e74705SXin Li }
189*67e74705SXin Li 
190*67e74705SXin Li // CHECK: @single_Z
single_Z()191*67e74705SXin Li void single_Z()
192*67e74705SXin Li {
193*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*m,Z[[CLOBBERS]](i32* @mout0, i32 1)
194*67e74705SXin Li   asm("foo %1,%0" : "=m" (mout0) : "Z" (1));
195*67e74705SXin Li }
196*67e74705SXin Li 
197*67e74705SXin Li // CHECK: @multi_R
multi_R()198*67e74705SXin Li void multi_R()
199*67e74705SXin Li {
200*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|R|m,r|R|m[[CLOBBERS]](i32* @mout0, i32 {{[a-zA-Z0-9@%]+}})
201*67e74705SXin Li   asm("foo %1,%0" : "=r,R,m" (mout0) : "r,R,m" (min1));
202*67e74705SXin Li }
203*67e74705SXin Li 
204*67e74705SXin Li // CHECK: @multi_q
multi_q()205*67e74705SXin Li void multi_q()
206*67e74705SXin Li {
207*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|q|m,r|q|m[[CLOBBERS]](i32* @mout0, i32 {{[a-zA-Z0-9@%]+}})
208*67e74705SXin Li   asm("foo %1,%0" : "=r,q,m" (mout0) : "r,q,m" (min1));
209*67e74705SXin Li }
210*67e74705SXin Li 
211*67e74705SXin Li // CHECK: @multi_Q
multi_Q()212*67e74705SXin Li void multi_Q()
213*67e74705SXin Li {
214*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|Q|m,r|Q|m[[CLOBBERS]](i32* @mout0, i32 {{[a-zA-Z0-9@%]+}})
215*67e74705SXin Li   asm("foo %1,%0" : "=r,Q,m" (mout0) : "r,Q,m" (min1));
216*67e74705SXin Li }
217*67e74705SXin Li 
218*67e74705SXin Li // CHECK: @multi_a
multi_a()219*67e74705SXin Li void multi_a()
220*67e74705SXin Li {
221*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|{ax}|m,r|{ax}|m[[CLOBBERS]](i32* @mout0, i32 {{[a-zA-Z0-9@%]+}})
222*67e74705SXin Li   asm("foo %1,%0" : "=r,a,m" (mout0) : "r,a,m" (min1));
223*67e74705SXin Li }
224*67e74705SXin Li 
225*67e74705SXin Li // CHECK: @multi_b
multi_b()226*67e74705SXin Li void multi_b()
227*67e74705SXin Li {
228*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|{bx}|m,r|{bx}|m[[CLOBBERS]](i32* @mout0, i32 {{[a-zA-Z0-9@%]+}})
229*67e74705SXin Li   asm("foo %1,%0" : "=r,b,m" (mout0) : "r,b,m" (min1));
230*67e74705SXin Li }
231*67e74705SXin Li 
232*67e74705SXin Li // CHECK: @multi_c
multi_c()233*67e74705SXin Li void multi_c()
234*67e74705SXin Li {
235*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|{cx}|m,r|{cx}|m[[CLOBBERS]](i32* @mout0, i32 {{[a-zA-Z0-9@%]+}})
236*67e74705SXin Li   asm("foo %1,%0" : "=r,c,m" (mout0) : "r,c,m" (min1));
237*67e74705SXin Li }
238*67e74705SXin Li 
239*67e74705SXin Li // CHECK: @multi_d
multi_d()240*67e74705SXin Li void multi_d()
241*67e74705SXin Li {
242*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|{dx}|m,r|{dx}|m[[CLOBBERS]](i32* @mout0, i32 {{[a-zA-Z0-9@%]+}})
243*67e74705SXin Li   asm("foo %1,%0" : "=r,d,m" (mout0) : "r,d,m" (min1));
244*67e74705SXin Li }
245*67e74705SXin Li 
246*67e74705SXin Li // CHECK: @multi_S
multi_S()247*67e74705SXin Li void multi_S()
248*67e74705SXin Li {
249*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|{si}|m,r|{si}|m[[CLOBBERS]](i32* @mout0, i32 {{[a-zA-Z0-9@%]+}})
250*67e74705SXin Li   asm("foo %1,%0" : "=r,S,m" (mout0) : "r,S,m" (min1));
251*67e74705SXin Li }
252*67e74705SXin Li 
253*67e74705SXin Li // CHECK: @multi_D
multi_D()254*67e74705SXin Li void multi_D()
255*67e74705SXin Li {
256*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|{di}|m,r|{di}|m[[CLOBBERS]](i32* @mout0, i32 {{[a-zA-Z0-9@%]+}})
257*67e74705SXin Li   asm("foo %1,%0" : "=r,D,m" (mout0) : "r,D,m" (min1));
258*67e74705SXin Li }
259*67e74705SXin Li 
260*67e74705SXin Li // CHECK: @multi_A
multi_A()261*67e74705SXin Li void multi_A()
262*67e74705SXin Li {
263*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|A|m,r|A|m[[CLOBBERS]](i32* @mout0, i32 {{[a-zA-Z0-9@%]+}})
264*67e74705SXin Li   asm("foo %1,%0" : "=r,A,m" (mout0) : "r,A,m" (min1));
265*67e74705SXin Li }
266*67e74705SXin Li 
267*67e74705SXin Li // CHECK: @multi_f
multi_f()268*67e74705SXin Li void multi_f()
269*67e74705SXin Li {
270*67e74705SXin Li //FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.
271*67e74705SXin Li }
272*67e74705SXin Li 
273*67e74705SXin Li // CHECK: @multi_t
multi_t()274*67e74705SXin Li void multi_t()
275*67e74705SXin Li {
276*67e74705SXin Li //FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.
277*67e74705SXin Li }
278*67e74705SXin Li 
279*67e74705SXin Li // CHECK: @multi_u
multi_u()280*67e74705SXin Li void multi_u()
281*67e74705SXin Li {
282*67e74705SXin Li //FIXME: I don't know how to do an 80387 floating point stack register operation, which I think is fp80.
283*67e74705SXin Li }
284*67e74705SXin Li 
285*67e74705SXin Li // CHECK: @multi_y
multi_y()286*67e74705SXin Li void multi_y()
287*67e74705SXin Li {
288*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|y|m,r|y|m[[CLOBBERS]](double* @dout0, double {{[a-zA-Z0-9@%]+}})
289*67e74705SXin Li   asm("foo %1,%0" : "=r,y,m" (dout0) : "r,y,m" (din1));
290*67e74705SXin Li }
291*67e74705SXin Li 
292*67e74705SXin Li // CHECK: @multi_x
multi_x()293*67e74705SXin Li void multi_x()
294*67e74705SXin Li {
295*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|x|m,r|x|m[[CLOBBERS]](double* @dout0, double {{[a-zA-Z0-9@%]+}})
296*67e74705SXin Li   asm("foo %1,%0" : "=r,x,m" (dout0) : "r,x,m" (din1));
297*67e74705SXin Li }
298*67e74705SXin Li 
299*67e74705SXin Li // CHECK: @multi_Y
multi_Y0()300*67e74705SXin Li void multi_Y0()
301*67e74705SXin Li {
302*67e74705SXin Li   // Y constraint currently broken.
303*67e74705SXin Li   //asm("foo %1,%0" : "=r,Y0,m" (mout0) : "r,Y0,m" (min1));
304*67e74705SXin Li   //asm("foo %1,%0" : "=r,Yz,m" (mout0) : "r,Yz,m" (min1));
305*67e74705SXin Li   //asm("foo %1,%0" : "=r,Yt,m" (mout0) : "r,Yt,m" (min1));
306*67e74705SXin Li   //asm("foo %1,%0" : "=r,Yi,m" (mout0) : "r,Yi,m" (min1));
307*67e74705SXin Li   //asm("foo %1,%0" : "=r,Ym,m" (mout0) : "r,Ym,m" (min1));
308*67e74705SXin Li }
309*67e74705SXin Li 
310*67e74705SXin Li // CHECK: @multi_I
multi_I()311*67e74705SXin Li void multi_I()
312*67e74705SXin Li {
313*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|m|m,r|I|m[[CLOBBERS]](i32* @mout0, i32 1)
314*67e74705SXin Li   asm("foo %1,%0" : "=r,m,m" (mout0) : "r,I,m" (1));
315*67e74705SXin Li }
316*67e74705SXin Li 
317*67e74705SXin Li // CHECK: @multi_J
multi_J()318*67e74705SXin Li void multi_J()
319*67e74705SXin Li {
320*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|m|m,r|J|m[[CLOBBERS]](i32* @mout0, i32 1)
321*67e74705SXin Li   asm("foo %1,%0" : "=r,m,m" (mout0) : "r,J,m" (1));
322*67e74705SXin Li }
323*67e74705SXin Li 
324*67e74705SXin Li // CHECK: @multi_K
multi_K()325*67e74705SXin Li void multi_K()
326*67e74705SXin Li {
327*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|m|m,r|K|m[[CLOBBERS]](i32* @mout0, i32 1)
328*67e74705SXin Li   asm("foo %1,%0" : "=r,m,m" (mout0) : "r,K,m" (1));
329*67e74705SXin Li }
330*67e74705SXin Li 
331*67e74705SXin Li // CHECK: @multi_L
multi_L()332*67e74705SXin Li void multi_L()
333*67e74705SXin Li {
334*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|m|m,r|L|m[[CLOBBERS]](i32* @mout0, i32 1)
335*67e74705SXin Li   asm("foo %1,%0" : "=r,m,m" (mout0) : "r,L,m" (1));
336*67e74705SXin Li }
337*67e74705SXin Li 
338*67e74705SXin Li // CHECK: @multi_M
multi_M()339*67e74705SXin Li void multi_M()
340*67e74705SXin Li {
341*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|m|m,r|M|m[[CLOBBERS]](i32* @mout0, i32 1)
342*67e74705SXin Li   asm("foo %1,%0" : "=r,m,m" (mout0) : "r,M,m" (1));
343*67e74705SXin Li }
344*67e74705SXin Li 
345*67e74705SXin Li // CHECK: @multi_N
multi_N()346*67e74705SXin Li void multi_N()
347*67e74705SXin Li {
348*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|m|m,r|N|m[[CLOBBERS]](i32* @mout0, i32 1)
349*67e74705SXin Li   asm("foo %1,%0" : "=r,m,m" (mout0) : "r,N,m" (1));
350*67e74705SXin Li }
351*67e74705SXin Li 
352*67e74705SXin Li // CHECK: @multi_G
multi_G()353*67e74705SXin Li void multi_G()
354*67e74705SXin Li {
355*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|m|m,r|G|m[[CLOBBERS]](i32* @mout0, double {{1.[0]+e[+]*[0]+}})
356*67e74705SXin Li   asm("foo %1,%0" : "=r,m,m" (mout0) : "r,G,m" (1.0));
357*67e74705SXin Li }
358*67e74705SXin Li 
359*67e74705SXin Li // CHECK: @multi_C
multi_C()360*67e74705SXin Li void multi_C()
361*67e74705SXin Li {
362*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|m|m,r|C|m[[CLOBBERS]](i32* @mout0, double {{1.[0]+e[+]*[0]+}})
363*67e74705SXin Li   asm("foo %1,%0" : "=r,m,m" (mout0) : "r,C,m" (1.0));
364*67e74705SXin Li }
365*67e74705SXin Li 
366*67e74705SXin Li // CHECK: @multi_e
multi_e()367*67e74705SXin Li void multi_e()
368*67e74705SXin Li {
369*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|m|m,r|e|m[[CLOBBERS]](i32* @mout0, i32 1)
370*67e74705SXin Li   asm("foo %1,%0" : "=r,m,m" (mout0) : "r,e,m" (1));
371*67e74705SXin Li }
372*67e74705SXin Li 
373*67e74705SXin Li // CHECK: @multi_Z
multi_Z()374*67e74705SXin Li void multi_Z()
375*67e74705SXin Li {
376*67e74705SXin Li   // CHECK: asm "foo $1,$0", "=*r|m|m,r|Z|m[[CLOBBERS]](i32* @mout0, i32 1)
377*67e74705SXin Li   asm("foo %1,%0" : "=r,m,m" (mout0) : "r,Z,m" (1));
378*67e74705SXin Li }
379