Clang Project

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