1*67e74705SXin Li // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Werror | FileCheck %s
2*67e74705SXin Li // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Werror | FileCheck %s
3*67e74705SXin Li
4*67e74705SXin Li // Don't include mm_malloc.h, it's system specific.
5*67e74705SXin Li #define __MM_MALLOC_H
6*67e74705SXin Li
7*67e74705SXin Li #include <x86intrin.h>
8*67e74705SXin Li
test_mm_abs_pi8(__m64 a)9*67e74705SXin Li __m64 test_mm_abs_pi8(__m64 a) {
10*67e74705SXin Li // CHECK-LABEL: test_mm_abs_pi8
11*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.pabs.b
12*67e74705SXin Li return _mm_abs_pi8(a);
13*67e74705SXin Li }
14*67e74705SXin Li
test_mm_abs_pi16(__m64 a)15*67e74705SXin Li __m64 test_mm_abs_pi16(__m64 a) {
16*67e74705SXin Li // CHECK-LABEL: test_mm_abs_pi16
17*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.pabs.w
18*67e74705SXin Li return _mm_abs_pi16(a);
19*67e74705SXin Li }
20*67e74705SXin Li
test_mm_abs_pi32(__m64 a)21*67e74705SXin Li __m64 test_mm_abs_pi32(__m64 a) {
22*67e74705SXin Li // CHECK-LABEL: test_mm_abs_pi32
23*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.pabs.d
24*67e74705SXin Li return _mm_abs_pi32(a);
25*67e74705SXin Li }
26*67e74705SXin Li
test_mm_add_pi8(__m64 a,__m64 b)27*67e74705SXin Li __m64 test_mm_add_pi8(__m64 a, __m64 b) {
28*67e74705SXin Li // CHECK-LABEL: test_mm_add_pi8
29*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.padd.b
30*67e74705SXin Li return _mm_add_pi8(a, b);
31*67e74705SXin Li }
32*67e74705SXin Li
test_mm_add_pi16(__m64 a,__m64 b)33*67e74705SXin Li __m64 test_mm_add_pi16(__m64 a, __m64 b) {
34*67e74705SXin Li // CHECK-LABEL: test_mm_add_pi16
35*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.padd.w
36*67e74705SXin Li return _mm_add_pi16(a, b);
37*67e74705SXin Li }
38*67e74705SXin Li
test_mm_add_pi32(__m64 a,__m64 b)39*67e74705SXin Li __m64 test_mm_add_pi32(__m64 a, __m64 b) {
40*67e74705SXin Li // CHECK-LABEL: test_mm_add_pi32
41*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.padd.d
42*67e74705SXin Li return _mm_add_pi32(a, b);
43*67e74705SXin Li }
44*67e74705SXin Li
test_mm_add_si64(__m64 a,__m64 b)45*67e74705SXin Li __m64 test_mm_add_si64(__m64 a, __m64 b) {
46*67e74705SXin Li // CHECK-LABEL: test_mm_add_si64
47*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.padd.q(x86_mmx %{{.*}}, x86_mmx %{{.*}})
48*67e74705SXin Li return _mm_add_si64(a, b);
49*67e74705SXin Li }
50*67e74705SXin Li
test_mm_adds_pi8(__m64 a,__m64 b)51*67e74705SXin Li __m64 test_mm_adds_pi8(__m64 a, __m64 b) {
52*67e74705SXin Li // CHECK-LABEL: test_mm_adds_pi8
53*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.padds.b
54*67e74705SXin Li return _mm_adds_pi8(a, b);
55*67e74705SXin Li }
56*67e74705SXin Li
test_mm_adds_pi16(__m64 a,__m64 b)57*67e74705SXin Li __m64 test_mm_adds_pi16(__m64 a, __m64 b) {
58*67e74705SXin Li // CHECK-LABEL: test_mm_adds_pi16
59*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.padds.w
60*67e74705SXin Li return _mm_adds_pi16(a, b);
61*67e74705SXin Li }
62*67e74705SXin Li
test_mm_adds_pu8(__m64 a,__m64 b)63*67e74705SXin Li __m64 test_mm_adds_pu8(__m64 a, __m64 b) {
64*67e74705SXin Li // CHECK-LABEL: test_mm_adds_pu8
65*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.paddus.b
66*67e74705SXin Li return _mm_adds_pu8(a, b);
67*67e74705SXin Li }
68*67e74705SXin Li
test_mm_adds_pu16(__m64 a,__m64 b)69*67e74705SXin Li __m64 test_mm_adds_pu16(__m64 a, __m64 b) {
70*67e74705SXin Li // CHECK-LABEL: test_mm_adds_pu16
71*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.paddus.w
72*67e74705SXin Li return _mm_adds_pu16(a, b);
73*67e74705SXin Li }
74*67e74705SXin Li
test_mm_alignr_pi8(__m64 a,__m64 b)75*67e74705SXin Li __m64 test_mm_alignr_pi8(__m64 a, __m64 b) {
76*67e74705SXin Li // CHECK-LABEL: test_mm_alignr_pi8
77*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.palignr.b
78*67e74705SXin Li return _mm_alignr_pi8(a, b, 2);
79*67e74705SXin Li }
80*67e74705SXin Li
test_mm_and_si64(__m64 a,__m64 b)81*67e74705SXin Li __m64 test_mm_and_si64(__m64 a, __m64 b) {
82*67e74705SXin Li // CHECK-LABEL: test_mm_and_si64
83*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pand
84*67e74705SXin Li return _mm_and_si64(a, b);
85*67e74705SXin Li }
86*67e74705SXin Li
test_mm_andnot_si64(__m64 a,__m64 b)87*67e74705SXin Li __m64 test_mm_andnot_si64(__m64 a, __m64 b) {
88*67e74705SXin Li // CHECK-LABEL: test_mm_andnot_si64
89*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pandn
90*67e74705SXin Li return _mm_andnot_si64(a, b);
91*67e74705SXin Li }
92*67e74705SXin Li
test_mm_avg_pu8(__m64 a,__m64 b)93*67e74705SXin Li __m64 test_mm_avg_pu8(__m64 a, __m64 b) {
94*67e74705SXin Li // CHECK-LABEL: test_mm_avg_pu8
95*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pavg.b
96*67e74705SXin Li return _mm_avg_pu8(a, b);
97*67e74705SXin Li }
98*67e74705SXin Li
test_mm_avg_pu16(__m64 a,__m64 b)99*67e74705SXin Li __m64 test_mm_avg_pu16(__m64 a, __m64 b) {
100*67e74705SXin Li // CHECK-LABEL: test_mm_avg_pu16
101*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pavg.w
102*67e74705SXin Li return _mm_avg_pu16(a, b);
103*67e74705SXin Li }
104*67e74705SXin Li
test_mm_cmpeq_pi8(__m64 a,__m64 b)105*67e74705SXin Li __m64 test_mm_cmpeq_pi8(__m64 a, __m64 b) {
106*67e74705SXin Li // CHECK-LABEL: test_mm_cmpeq_pi8
107*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pcmpeq.b
108*67e74705SXin Li return _mm_cmpeq_pi8(a, b);
109*67e74705SXin Li }
110*67e74705SXin Li
test_mm_cmpeq_pi16(__m64 a,__m64 b)111*67e74705SXin Li __m64 test_mm_cmpeq_pi16(__m64 a, __m64 b) {
112*67e74705SXin Li // CHECK-LABEL: test_mm_cmpeq_pi16
113*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pcmpeq.w
114*67e74705SXin Li return _mm_cmpeq_pi16(a, b);
115*67e74705SXin Li }
116*67e74705SXin Li
test_mm_cmpeq_pi32(__m64 a,__m64 b)117*67e74705SXin Li __m64 test_mm_cmpeq_pi32(__m64 a, __m64 b) {
118*67e74705SXin Li // CHECK-LABEL: test_mm_cmpeq_pi32
119*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pcmpeq.d
120*67e74705SXin Li return _mm_cmpeq_pi32(a, b);
121*67e74705SXin Li }
122*67e74705SXin Li
test_mm_cmpgt_pi8(__m64 a,__m64 b)123*67e74705SXin Li __m64 test_mm_cmpgt_pi8(__m64 a, __m64 b) {
124*67e74705SXin Li // CHECK-LABEL: test_mm_cmpgt_pi8
125*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pcmpgt.b
126*67e74705SXin Li return _mm_cmpgt_pi8(a, b);
127*67e74705SXin Li }
128*67e74705SXin Li
test_mm_cmpgt_pi16(__m64 a,__m64 b)129*67e74705SXin Li __m64 test_mm_cmpgt_pi16(__m64 a, __m64 b) {
130*67e74705SXin Li // CHECK-LABEL: test_mm_cmpgt_pi16
131*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pcmpgt.w
132*67e74705SXin Li return _mm_cmpgt_pi16(a, b);
133*67e74705SXin Li }
134*67e74705SXin Li
test_mm_cmpgt_pi32(__m64 a,__m64 b)135*67e74705SXin Li __m64 test_mm_cmpgt_pi32(__m64 a, __m64 b) {
136*67e74705SXin Li // CHECK-LABEL: test_mm_cmpgt_pi32
137*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pcmpgt.d
138*67e74705SXin Li return _mm_cmpgt_pi32(a, b);
139*67e74705SXin Li }
140*67e74705SXin Li
test_mm_cvt_pi2ps(__m128 a,__m64 b)141*67e74705SXin Li __m128 test_mm_cvt_pi2ps(__m128 a, __m64 b) {
142*67e74705SXin Li // CHECK-LABEL: test_mm_cvt_pi2ps
143*67e74705SXin Li // CHECK: <4 x float> @llvm.x86.sse.cvtpi2ps
144*67e74705SXin Li return _mm_cvt_pi2ps(a, b);
145*67e74705SXin Li }
146*67e74705SXin Li
test_mm_cvt_ps2pi(__m128 a)147*67e74705SXin Li __m64 test_mm_cvt_ps2pi(__m128 a) {
148*67e74705SXin Li // CHECK-LABEL: test_mm_cvt_ps2pi
149*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.sse.cvtps2pi
150*67e74705SXin Li return _mm_cvt_ps2pi(a);
151*67e74705SXin Li }
152*67e74705SXin Li
test_mm_cvtpd_pi32(__m128d a)153*67e74705SXin Li __m64 test_mm_cvtpd_pi32(__m128d a) {
154*67e74705SXin Li // CHECK-LABEL: test_mm_cvtpd_pi32
155*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.sse.cvtpd2pi
156*67e74705SXin Li return _mm_cvtpd_pi32(a);
157*67e74705SXin Li }
158*67e74705SXin Li
test_mm_cvtpi16_ps(__m64 a)159*67e74705SXin Li __m128 test_mm_cvtpi16_ps(__m64 a) {
160*67e74705SXin Li // CHECK-LABEL: test_mm_cvtpi16_ps
161*67e74705SXin Li // CHECK: call <4 x float> @llvm.x86.sse.cvtpi2ps
162*67e74705SXin Li return _mm_cvtpi16_ps(a);
163*67e74705SXin Li }
164*67e74705SXin Li
test_mm_cvtpi32_pd(__m64 a)165*67e74705SXin Li __m128d test_mm_cvtpi32_pd(__m64 a) {
166*67e74705SXin Li // CHECK-LABEL: test_mm_cvtpi32_pd
167*67e74705SXin Li // CHECK: call <2 x double> @llvm.x86.sse.cvtpi2pd
168*67e74705SXin Li return _mm_cvtpi32_pd(a);
169*67e74705SXin Li }
170*67e74705SXin Li
test_mm_cvtpi32_ps(__m128 a,__m64 b)171*67e74705SXin Li __m128 test_mm_cvtpi32_ps(__m128 a, __m64 b) {
172*67e74705SXin Li // CHECK-LABEL: test_mm_cvtpi32_ps
173*67e74705SXin Li // CHECK: call <4 x float> @llvm.x86.sse.cvtpi2ps
174*67e74705SXin Li return _mm_cvtpi32_ps(a, b);
175*67e74705SXin Li }
176*67e74705SXin Li
test_mm_cvtpi32x2_ps(__m64 a,__m64 b)177*67e74705SXin Li __m128 test_mm_cvtpi32x2_ps(__m64 a, __m64 b) {
178*67e74705SXin Li // CHECK-LABEL: test_mm_cvtpi32x2_ps
179*67e74705SXin Li // CHECK: call <4 x float> @llvm.x86.sse.cvtpi2ps
180*67e74705SXin Li // CHECK: call <4 x float> @llvm.x86.sse.cvtpi2ps
181*67e74705SXin Li return _mm_cvtpi32x2_ps(a, b);
182*67e74705SXin Li }
183*67e74705SXin Li
test_mm_cvtps_pi16(__m128 a)184*67e74705SXin Li __m64 test_mm_cvtps_pi16(__m128 a) {
185*67e74705SXin Li // CHECK-LABEL: test_mm_cvtps_pi16
186*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.sse.cvtps2pi
187*67e74705SXin Li return _mm_cvtps_pi16(a);
188*67e74705SXin Li }
189*67e74705SXin Li
test_mm_cvtps_pi32(__m128 a)190*67e74705SXin Li __m64 test_mm_cvtps_pi32(__m128 a) {
191*67e74705SXin Li // CHECK-LABEL: test_mm_cvtps_pi32
192*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.sse.cvtps2pi
193*67e74705SXin Li return _mm_cvtps_pi32(a);
194*67e74705SXin Li }
195*67e74705SXin Li
test_mm_cvtsi32_si64(int a)196*67e74705SXin Li __m64 test_mm_cvtsi32_si64(int a) {
197*67e74705SXin Li // CHECK-LABEL: test_mm_cvtsi32_si64
198*67e74705SXin Li // CHECK: insertelement <2 x i32>
199*67e74705SXin Li return _mm_cvtsi32_si64(a);
200*67e74705SXin Li }
201*67e74705SXin Li
test_mm_cvtsi64_si32(__m64 a)202*67e74705SXin Li int test_mm_cvtsi64_si32(__m64 a) {
203*67e74705SXin Li // CHECK-LABEL: test_mm_cvtsi64_si32
204*67e74705SXin Li // CHECK: extractelement <2 x i32>
205*67e74705SXin Li return _mm_cvtsi64_si32(a);
206*67e74705SXin Li }
207*67e74705SXin Li
test_mm_cvttpd_pi32(__m128d a)208*67e74705SXin Li __m64 test_mm_cvttpd_pi32(__m128d a) {
209*67e74705SXin Li // CHECK-LABEL: test_mm_cvttpd_pi32
210*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.sse.cvttpd2pi
211*67e74705SXin Li return _mm_cvttpd_pi32(a);
212*67e74705SXin Li }
213*67e74705SXin Li
test_mm_cvttps_pi32(__m128 a)214*67e74705SXin Li __m64 test_mm_cvttps_pi32(__m128 a) {
215*67e74705SXin Li // CHECK-LABEL: test_mm_cvttps_pi32
216*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.sse.cvttps2pi
217*67e74705SXin Li return _mm_cvttps_pi32(a);
218*67e74705SXin Li }
219*67e74705SXin Li
test_mm_extract_pi16(__m64 a)220*67e74705SXin Li int test_mm_extract_pi16(__m64 a) {
221*67e74705SXin Li // CHECK-LABEL: test_mm_extract_pi16
222*67e74705SXin Li // CHECK: call i32 @llvm.x86.mmx.pextr.w
223*67e74705SXin Li return _mm_extract_pi16(a, 2);
224*67e74705SXin Li }
225*67e74705SXin Li
test_m_from_int(int a)226*67e74705SXin Li __m64 test_m_from_int(int a) {
227*67e74705SXin Li // CHECK-LABEL: test_m_from_int
228*67e74705SXin Li // CHECK: insertelement <2 x i32>
229*67e74705SXin Li return _m_from_int(a);
230*67e74705SXin Li }
231*67e74705SXin Li
test_m_from_int64(long long a)232*67e74705SXin Li __m64 test_m_from_int64(long long a) {
233*67e74705SXin Li // CHECK-LABEL: test_m_from_int64
234*67e74705SXin Li // CHECK: bitcast
235*67e74705SXin Li return _m_from_int64(a);
236*67e74705SXin Li }
237*67e74705SXin Li
test_mm_hadd_pi16(__m64 a,__m64 b)238*67e74705SXin Li __m64 test_mm_hadd_pi16(__m64 a, __m64 b) {
239*67e74705SXin Li // CHECK-LABEL: test_mm_hadd_pi16
240*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.phadd.w
241*67e74705SXin Li return _mm_hadd_pi16(a, b);
242*67e74705SXin Li }
243*67e74705SXin Li
test_mm_hadd_pi32(__m64 a,__m64 b)244*67e74705SXin Li __m64 test_mm_hadd_pi32(__m64 a, __m64 b) {
245*67e74705SXin Li // CHECK-LABEL: test_mm_hadd_pi32
246*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.phadd.d
247*67e74705SXin Li return _mm_hadd_pi32(a, b);
248*67e74705SXin Li }
249*67e74705SXin Li
test_mm_hadds_pi16(__m64 a,__m64 b)250*67e74705SXin Li __m64 test_mm_hadds_pi16(__m64 a, __m64 b) {
251*67e74705SXin Li // CHECK-LABEL: test_mm_hadds_pi16
252*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.phadd.sw
253*67e74705SXin Li return _mm_hadds_pi16(a, b);
254*67e74705SXin Li }
255*67e74705SXin Li
test_mm_hsub_pi16(__m64 a,__m64 b)256*67e74705SXin Li __m64 test_mm_hsub_pi16(__m64 a, __m64 b) {
257*67e74705SXin Li // CHECK-LABEL: test_mm_hsub_pi16
258*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.phsub.w
259*67e74705SXin Li return _mm_hsub_pi16(a, b);
260*67e74705SXin Li }
261*67e74705SXin Li
test_mm_hsub_pi32(__m64 a,__m64 b)262*67e74705SXin Li __m64 test_mm_hsub_pi32(__m64 a, __m64 b) {
263*67e74705SXin Li // CHECK-LABEL: test_mm_hsub_pi32
264*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.phsub.d
265*67e74705SXin Li return _mm_hsub_pi32(a, b);
266*67e74705SXin Li }
267*67e74705SXin Li
test_mm_hsubs_pi16(__m64 a,__m64 b)268*67e74705SXin Li __m64 test_mm_hsubs_pi16(__m64 a, __m64 b) {
269*67e74705SXin Li // CHECK-LABEL: test_mm_hsubs_pi16
270*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.phsub.sw
271*67e74705SXin Li return _mm_hsubs_pi16(a, b);
272*67e74705SXin Li }
273*67e74705SXin Li
test_mm_insert_pi16(__m64 a,int d)274*67e74705SXin Li __m64 test_mm_insert_pi16(__m64 a, int d) {
275*67e74705SXin Li // CHECK-LABEL: test_mm_insert_pi16
276*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pinsr.w
277*67e74705SXin Li return _mm_insert_pi16(a, d, 2);
278*67e74705SXin Li }
279*67e74705SXin Li
test_mm_madd_pi16(__m64 a,__m64 b)280*67e74705SXin Li __m64 test_mm_madd_pi16(__m64 a, __m64 b) {
281*67e74705SXin Li // CHECK-LABEL: test_mm_madd_pi16
282*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pmadd.wd
283*67e74705SXin Li return _mm_madd_pi16(a, b);
284*67e74705SXin Li }
285*67e74705SXin Li
test_mm_maddubs_pi16(__m64 a,__m64 b)286*67e74705SXin Li __m64 test_mm_maddubs_pi16(__m64 a, __m64 b) {
287*67e74705SXin Li // CHECK-LABEL: test_mm_maddubs_pi16
288*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.pmadd.ub.sw
289*67e74705SXin Li return _mm_maddubs_pi16(a, b);
290*67e74705SXin Li }
291*67e74705SXin Li
test_mm_maskmove_si64(__m64 d,__m64 n,char * p)292*67e74705SXin Li void test_mm_maskmove_si64(__m64 d, __m64 n, char *p) {
293*67e74705SXin Li // CHECK-LABEL: test_mm_maskmove_si64
294*67e74705SXin Li // CHECK: call void @llvm.x86.mmx.maskmovq
295*67e74705SXin Li _mm_maskmove_si64(d, n, p);
296*67e74705SXin Li }
297*67e74705SXin Li
test_mm_max_pi16(__m64 a,__m64 b)298*67e74705SXin Li __m64 test_mm_max_pi16(__m64 a, __m64 b) {
299*67e74705SXin Li // CHECK-LABEL: test_mm_max_pi16
300*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pmaxs.w
301*67e74705SXin Li return _mm_max_pi16(a, b);
302*67e74705SXin Li }
303*67e74705SXin Li
test_mm_max_pu8(__m64 a,__m64 b)304*67e74705SXin Li __m64 test_mm_max_pu8(__m64 a, __m64 b) {
305*67e74705SXin Li // CHECK-LABEL: test_mm_max_pu8
306*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pmaxu.b
307*67e74705SXin Li return _mm_max_pu8(a, b);
308*67e74705SXin Li }
309*67e74705SXin Li
test_mm_min_pi16(__m64 a,__m64 b)310*67e74705SXin Li __m64 test_mm_min_pi16(__m64 a, __m64 b) {
311*67e74705SXin Li // CHECK-LABEL: test_mm_min_pi16
312*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pmins.w
313*67e74705SXin Li return _mm_min_pi16(a, b);
314*67e74705SXin Li }
315*67e74705SXin Li
test_mm_min_pu8(__m64 a,__m64 b)316*67e74705SXin Li __m64 test_mm_min_pu8(__m64 a, __m64 b) {
317*67e74705SXin Li // CHECK-LABEL: test_mm_min_pu8
318*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pminu.b
319*67e74705SXin Li return _mm_min_pu8(a, b);
320*67e74705SXin Li }
321*67e74705SXin Li
test_mm_movemask_pi8(__m64 a)322*67e74705SXin Li int test_mm_movemask_pi8(__m64 a) {
323*67e74705SXin Li // CHECK-LABEL: test_mm_movemask_pi8
324*67e74705SXin Li // CHECK: call i32 @llvm.x86.mmx.pmovmskb
325*67e74705SXin Li return _mm_movemask_pi8(a);
326*67e74705SXin Li }
327*67e74705SXin Li
test_mm_mul_su32(__m64 a,__m64 b)328*67e74705SXin Li __m64 test_mm_mul_su32(__m64 a, __m64 b) {
329*67e74705SXin Li // CHECK-LABEL: test_mm_mul_su32
330*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pmulu.dq(x86_mmx %{{.*}}, x86_mmx %{{.*}})
331*67e74705SXin Li return _mm_mul_su32(a, b);
332*67e74705SXin Li }
333*67e74705SXin Li
test_mm_mulhi_pi16(__m64 a,__m64 b)334*67e74705SXin Li __m64 test_mm_mulhi_pi16(__m64 a, __m64 b) {
335*67e74705SXin Li // CHECK-LABEL: test_mm_mulhi_pi16
336*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pmulh.w
337*67e74705SXin Li return _mm_mulhi_pi16(a, b);
338*67e74705SXin Li }
339*67e74705SXin Li
test_mm_mulhi_pu16(__m64 a,__m64 b)340*67e74705SXin Li __m64 test_mm_mulhi_pu16(__m64 a, __m64 b) {
341*67e74705SXin Li // CHECK-LABEL: test_mm_mulhi_pu16
342*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pmulhu.w
343*67e74705SXin Li return _mm_mulhi_pu16(a, b);
344*67e74705SXin Li }
345*67e74705SXin Li
test_mm_mulhrs_pi16(__m64 a,__m64 b)346*67e74705SXin Li __m64 test_mm_mulhrs_pi16(__m64 a, __m64 b) {
347*67e74705SXin Li // CHECK-LABEL: test_mm_mulhrs_pi16
348*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.pmul.hr.sw
349*67e74705SXin Li return _mm_mulhrs_pi16(a, b);
350*67e74705SXin Li }
351*67e74705SXin Li
test_mm_mullo_pi16(__m64 a,__m64 b)352*67e74705SXin Li __m64 test_mm_mullo_pi16(__m64 a, __m64 b) {
353*67e74705SXin Li // CHECK-LABEL: test_mm_mullo_pi16
354*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pmull.w
355*67e74705SXin Li return _mm_mullo_pi16(a, b);
356*67e74705SXin Li }
357*67e74705SXin Li
test_mm_or_si64(__m64 a,__m64 b)358*67e74705SXin Li __m64 test_mm_or_si64(__m64 a, __m64 b) {
359*67e74705SXin Li // CHECK-LABEL: test_mm_or_si64
360*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.por
361*67e74705SXin Li return _mm_or_si64(a, b);
362*67e74705SXin Li }
363*67e74705SXin Li
test_mm_packs_pi16(__m64 a,__m64 b)364*67e74705SXin Li __m64 test_mm_packs_pi16(__m64 a, __m64 b) {
365*67e74705SXin Li // CHECK-LABEL: test_mm_packs_pi16
366*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.packsswb
367*67e74705SXin Li return _mm_packs_pi16(a, b);
368*67e74705SXin Li }
369*67e74705SXin Li
test_mm_packs_pi32(__m64 a,__m64 b)370*67e74705SXin Li __m64 test_mm_packs_pi32(__m64 a, __m64 b) {
371*67e74705SXin Li // CHECK-LABEL: test_mm_packs_pi32
372*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.packssdw
373*67e74705SXin Li return _mm_packs_pi32(a, b);
374*67e74705SXin Li }
375*67e74705SXin Li
test_mm_packs_pu16(__m64 a,__m64 b)376*67e74705SXin Li __m64 test_mm_packs_pu16(__m64 a, __m64 b) {
377*67e74705SXin Li // CHECK-LABEL: test_mm_packs_pu16
378*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.packuswb
379*67e74705SXin Li return _mm_packs_pu16(a, b);
380*67e74705SXin Li }
381*67e74705SXin Li
test_mm_sad_pu8(__m64 a,__m64 b)382*67e74705SXin Li __m64 test_mm_sad_pu8(__m64 a, __m64 b) {
383*67e74705SXin Li // CHECK-LABEL: test_mm_sad_pu8
384*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psad.bw
385*67e74705SXin Li return _mm_sad_pu8(a, b);
386*67e74705SXin Li }
387*67e74705SXin Li
test_mm_shuffle_pi8(__m64 a,__m64 b)388*67e74705SXin Li __m64 test_mm_shuffle_pi8(__m64 a, __m64 b) {
389*67e74705SXin Li // CHECK-LABEL: test_mm_shuffle_pi8
390*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.pshuf.b
391*67e74705SXin Li return _mm_shuffle_pi8(a, b);
392*67e74705SXin Li }
393*67e74705SXin Li
test_mm_shuffle_pi16(__m64 a)394*67e74705SXin Li __m64 test_mm_shuffle_pi16(__m64 a) {
395*67e74705SXin Li // CHECK-LABEL: test_mm_shuffle_pi16
396*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.sse.pshuf.w
397*67e74705SXin Li return _mm_shuffle_pi16(a, 3);
398*67e74705SXin Li }
399*67e74705SXin Li
test_mm_sign_pi8(__m64 a,__m64 b)400*67e74705SXin Li __m64 test_mm_sign_pi8(__m64 a, __m64 b) {
401*67e74705SXin Li // CHECK-LABEL: test_mm_sign_pi8
402*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.psign.b
403*67e74705SXin Li return _mm_sign_pi8(a, b);
404*67e74705SXin Li }
405*67e74705SXin Li
test_mm_sign_pi16(__m64 a,__m64 b)406*67e74705SXin Li __m64 test_mm_sign_pi16(__m64 a, __m64 b) {
407*67e74705SXin Li // CHECK-LABEL: test_mm_sign_pi16
408*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.psign.w
409*67e74705SXin Li return _mm_sign_pi16(a, b);
410*67e74705SXin Li }
411*67e74705SXin Li
test_mm_sign_pi32(__m64 a,__m64 b)412*67e74705SXin Li __m64 test_mm_sign_pi32(__m64 a, __m64 b) {
413*67e74705SXin Li // CHECK-LABEL: test_mm_sign_pi32
414*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.ssse3.psign.d
415*67e74705SXin Li return _mm_sign_pi32(a, b);
416*67e74705SXin Li }
417*67e74705SXin Li
test_mm_sll_pi16(__m64 a,__m64 b)418*67e74705SXin Li __m64 test_mm_sll_pi16(__m64 a, __m64 b) {
419*67e74705SXin Li // CHECK-LABEL: test_mm_sll_pi16
420*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psll.w
421*67e74705SXin Li return _mm_sll_pi16(a, b);
422*67e74705SXin Li }
423*67e74705SXin Li
test_mm_sll_pi32(__m64 a,__m64 b)424*67e74705SXin Li __m64 test_mm_sll_pi32(__m64 a, __m64 b) {
425*67e74705SXin Li // CHECK-LABEL: test_mm_sll_pi32
426*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psll.d
427*67e74705SXin Li return _mm_sll_pi32(a, b);
428*67e74705SXin Li }
429*67e74705SXin Li
test_mm_sll_si64(__m64 a,__m64 b)430*67e74705SXin Li __m64 test_mm_sll_si64(__m64 a, __m64 b) {
431*67e74705SXin Li // CHECK-LABEL: test_mm_sll_si64
432*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psll.q
433*67e74705SXin Li return _mm_sll_si64(a, b);
434*67e74705SXin Li }
435*67e74705SXin Li
test_mm_slli_pi16(__m64 a)436*67e74705SXin Li __m64 test_mm_slli_pi16(__m64 a) {
437*67e74705SXin Li // CHECK-LABEL: test_mm_slli_pi16
438*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pslli.w
439*67e74705SXin Li return _mm_slli_pi16(a, 3);
440*67e74705SXin Li }
441*67e74705SXin Li
test_mm_slli_pi32(__m64 a)442*67e74705SXin Li __m64 test_mm_slli_pi32(__m64 a) {
443*67e74705SXin Li // CHECK-LABEL: test_mm_slli_pi32
444*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pslli.d
445*67e74705SXin Li return _mm_slli_pi32(a, 3);
446*67e74705SXin Li }
447*67e74705SXin Li
test_mm_slli_si64(__m64 a)448*67e74705SXin Li __m64 test_mm_slli_si64(__m64 a) {
449*67e74705SXin Li // CHECK-LABEL: test_mm_slli_si64
450*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pslli.q
451*67e74705SXin Li return _mm_slli_si64(a, 3);
452*67e74705SXin Li }
453*67e74705SXin Li
test_mm_sra_pi16(__m64 a,__m64 b)454*67e74705SXin Li __m64 test_mm_sra_pi16(__m64 a, __m64 b) {
455*67e74705SXin Li // CHECK-LABEL: test_mm_sra_pi16
456*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psra.w
457*67e74705SXin Li return _mm_sra_pi16(a, b);
458*67e74705SXin Li }
459*67e74705SXin Li
test_mm_sra_pi32(__m64 a,__m64 b)460*67e74705SXin Li __m64 test_mm_sra_pi32(__m64 a, __m64 b) {
461*67e74705SXin Li // CHECK-LABEL: test_mm_sra_pi32
462*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psra.d
463*67e74705SXin Li return _mm_sra_pi32(a, b);
464*67e74705SXin Li }
465*67e74705SXin Li
test_mm_srai_pi16(__m64 a)466*67e74705SXin Li __m64 test_mm_srai_pi16(__m64 a) {
467*67e74705SXin Li // CHECK-LABEL: test_mm_srai_pi16
468*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psrai.w
469*67e74705SXin Li return _mm_srai_pi16(a, 3);
470*67e74705SXin Li }
471*67e74705SXin Li
test_mm_srai_pi32(__m64 a)472*67e74705SXin Li __m64 test_mm_srai_pi32(__m64 a) {
473*67e74705SXin Li // CHECK-LABEL: test_mm_srai_pi32
474*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psrai.d
475*67e74705SXin Li return _mm_srai_pi32(a, 3);
476*67e74705SXin Li }
477*67e74705SXin Li
test_mm_srl_pi16(__m64 a,__m64 b)478*67e74705SXin Li __m64 test_mm_srl_pi16(__m64 a, __m64 b) {
479*67e74705SXin Li // CHECK-LABEL: test_mm_srl_pi16
480*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psrl.w
481*67e74705SXin Li return _mm_srl_pi16(a, b);
482*67e74705SXin Li }
483*67e74705SXin Li
test_mm_srl_pi32(__m64 a,__m64 b)484*67e74705SXin Li __m64 test_mm_srl_pi32(__m64 a, __m64 b) {
485*67e74705SXin Li // CHECK-LABEL: test_mm_srl_pi32
486*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psrl.d
487*67e74705SXin Li return _mm_srl_pi32(a, b);
488*67e74705SXin Li }
489*67e74705SXin Li
test_mm_srl_si64(__m64 a,__m64 b)490*67e74705SXin Li __m64 test_mm_srl_si64(__m64 a, __m64 b) {
491*67e74705SXin Li // CHECK-LABEL: test_mm_srl_si64
492*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psrl.q
493*67e74705SXin Li return _mm_srl_si64(a, b);
494*67e74705SXin Li }
495*67e74705SXin Li
test_mm_srli_pi16(__m64 a)496*67e74705SXin Li __m64 test_mm_srli_pi16(__m64 a) {
497*67e74705SXin Li // CHECK-LABEL: test_mm_srli_pi16
498*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psrli.w
499*67e74705SXin Li return _mm_srli_pi16(a, 3);
500*67e74705SXin Li }
501*67e74705SXin Li
test_mm_srli_pi32(__m64 a)502*67e74705SXin Li __m64 test_mm_srli_pi32(__m64 a) {
503*67e74705SXin Li // CHECK-LABEL: test_mm_srli_pi32
504*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psrli.d
505*67e74705SXin Li return _mm_srli_pi32(a, 3);
506*67e74705SXin Li }
507*67e74705SXin Li
test_mm_srli_si64(__m64 a)508*67e74705SXin Li __m64 test_mm_srli_si64(__m64 a) {
509*67e74705SXin Li // CHECK-LABEL: test_mm_srli_si64
510*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psrli.q
511*67e74705SXin Li return _mm_srli_si64(a, 3);
512*67e74705SXin Li }
513*67e74705SXin Li
test_mm_stream_pi(__m64 * p,__m64 a)514*67e74705SXin Li void test_mm_stream_pi(__m64 *p, __m64 a) {
515*67e74705SXin Li // CHECK-LABEL: test_mm_stream_pi
516*67e74705SXin Li // CHECK: call void @llvm.x86.mmx.movnt.dq
517*67e74705SXin Li _mm_stream_pi(p, a);
518*67e74705SXin Li }
519*67e74705SXin Li
test_mm_sub_pi8(__m64 a,__m64 b)520*67e74705SXin Li __m64 test_mm_sub_pi8(__m64 a, __m64 b) {
521*67e74705SXin Li // CHECK-LABEL: test_mm_sub_pi8
522*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psub.b
523*67e74705SXin Li return _mm_sub_pi8(a, b);
524*67e74705SXin Li }
525*67e74705SXin Li
test_mm_sub_pi16(__m64 a,__m64 b)526*67e74705SXin Li __m64 test_mm_sub_pi16(__m64 a, __m64 b) {
527*67e74705SXin Li // CHECK-LABEL: test_mm_sub_pi16
528*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psub.w
529*67e74705SXin Li return _mm_sub_pi16(a, b);
530*67e74705SXin Li }
531*67e74705SXin Li
test_mm_sub_pi32(__m64 a,__m64 b)532*67e74705SXin Li __m64 test_mm_sub_pi32(__m64 a, __m64 b) {
533*67e74705SXin Li // CHECK-LABEL: test_mm_sub_pi32
534*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psub.d
535*67e74705SXin Li return _mm_sub_pi32(a, b);
536*67e74705SXin Li }
537*67e74705SXin Li
test_mm_sub_si64(__m64 a,__m64 b)538*67e74705SXin Li __m64 test_mm_sub_si64(__m64 a, __m64 b) {
539*67e74705SXin Li // CHECK-LABEL: test_mm_sub_si64
540*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psub.q(x86_mmx %{{.*}}, x86_mmx %{{.*}})
541*67e74705SXin Li return _mm_sub_si64(a, b);
542*67e74705SXin Li }
543*67e74705SXin Li
test_mm_subs_pi8(__m64 a,__m64 b)544*67e74705SXin Li __m64 test_mm_subs_pi8(__m64 a, __m64 b) {
545*67e74705SXin Li // CHECK-LABEL: test_mm_subs_pi8
546*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psubs.b
547*67e74705SXin Li return _mm_subs_pi8(a, b);
548*67e74705SXin Li }
549*67e74705SXin Li
test_mm_subs_pi16(__m64 a,__m64 b)550*67e74705SXin Li __m64 test_mm_subs_pi16(__m64 a, __m64 b) {
551*67e74705SXin Li // CHECK-LABEL: test_mm_subs_pi16
552*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psubs.w
553*67e74705SXin Li return _mm_subs_pi16(a, b);
554*67e74705SXin Li }
555*67e74705SXin Li
test_mm_subs_pu8(__m64 a,__m64 b)556*67e74705SXin Li __m64 test_mm_subs_pu8(__m64 a, __m64 b) {
557*67e74705SXin Li // CHECK-LABEL: test_mm_subs_pu8
558*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psubus.b
559*67e74705SXin Li return _mm_subs_pu8(a, b);
560*67e74705SXin Li }
561*67e74705SXin Li
test_mm_subs_pu16(__m64 a,__m64 b)562*67e74705SXin Li __m64 test_mm_subs_pu16(__m64 a, __m64 b) {
563*67e74705SXin Li // CHECK-LABEL: test_mm_subs_pu16
564*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.psubus.w
565*67e74705SXin Li return _mm_subs_pu16(a, b);
566*67e74705SXin Li }
567*67e74705SXin Li
test_m_to_int(__m64 a)568*67e74705SXin Li int test_m_to_int(__m64 a) {
569*67e74705SXin Li // CHECK-LABEL: test_m_to_int
570*67e74705SXin Li // CHECK: extractelement <2 x i32>
571*67e74705SXin Li return _m_to_int(a);
572*67e74705SXin Li }
573*67e74705SXin Li
test_m_to_int64(__m64 a)574*67e74705SXin Li long long test_m_to_int64(__m64 a) {
575*67e74705SXin Li // CHECK-LABEL: test_m_to_int64
576*67e74705SXin Li // CHECK: bitcast
577*67e74705SXin Li return _m_to_int64(a);
578*67e74705SXin Li }
579*67e74705SXin Li
test_mm_unpackhi_pi8(__m64 a,__m64 b)580*67e74705SXin Li __m64 test_mm_unpackhi_pi8(__m64 a, __m64 b) {
581*67e74705SXin Li // CHECK-LABEL: test_mm_unpackhi_pi8
582*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.punpckhbw
583*67e74705SXin Li return _mm_unpackhi_pi8(a, b);
584*67e74705SXin Li }
585*67e74705SXin Li
test_mm_unpackhi_pi16(__m64 a,__m64 b)586*67e74705SXin Li __m64 test_mm_unpackhi_pi16(__m64 a, __m64 b) {
587*67e74705SXin Li // CHECK-LABEL: test_mm_unpackhi_pi16
588*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.punpckhwd
589*67e74705SXin Li return _mm_unpackhi_pi16(a, b);
590*67e74705SXin Li }
591*67e74705SXin Li
test_mm_unpackhi_pi32(__m64 a,__m64 b)592*67e74705SXin Li __m64 test_mm_unpackhi_pi32(__m64 a, __m64 b) {
593*67e74705SXin Li // CHECK-LABEL: test_mm_unpackhi_pi32
594*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.punpckhdq
595*67e74705SXin Li return _mm_unpackhi_pi32(a, b);
596*67e74705SXin Li }
597*67e74705SXin Li
test_mm_unpacklo_pi8(__m64 a,__m64 b)598*67e74705SXin Li __m64 test_mm_unpacklo_pi8(__m64 a, __m64 b) {
599*67e74705SXin Li // CHECK-LABEL: test_mm_unpacklo_pi8
600*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.punpcklbw
601*67e74705SXin Li return _mm_unpacklo_pi8(a, b);
602*67e74705SXin Li }
603*67e74705SXin Li
test_mm_unpacklo_pi16(__m64 a,__m64 b)604*67e74705SXin Li __m64 test_mm_unpacklo_pi16(__m64 a, __m64 b) {
605*67e74705SXin Li // CHECK-LABEL: test_mm_unpacklo_pi16
606*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.punpcklwd
607*67e74705SXin Li return _mm_unpacklo_pi16(a, b);
608*67e74705SXin Li }
609*67e74705SXin Li
test_mm_unpacklo_pi32(__m64 a,__m64 b)610*67e74705SXin Li __m64 test_mm_unpacklo_pi32(__m64 a, __m64 b) {
611*67e74705SXin Li // CHECK-LABEL: test_mm_unpacklo_pi32
612*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.punpckldq
613*67e74705SXin Li return _mm_unpacklo_pi32(a, b);
614*67e74705SXin Li }
615*67e74705SXin Li
test_mm_xor_si64(__m64 a,__m64 b)616*67e74705SXin Li __m64 test_mm_xor_si64(__m64 a, __m64 b) {
617*67e74705SXin Li // CHECK-LABEL: test_mm_xor_si64
618*67e74705SXin Li // CHECK: call x86_mmx @llvm.x86.mmx.pxor
619*67e74705SXin Li return _mm_xor_si64(a, b);
620*67e74705SXin Li }
621