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
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
200 int 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);
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);
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);
218 int 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);
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);
230 __m64 test_m_from_int64(long long a) {
231 // CHECK-LABEL: test_m_from_int64
233 return _m_from_int64(a);
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);
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);
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);
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);
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);
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);
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);
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);
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);
290 void 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);
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);
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);
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);
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);
320 int 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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
599 void test_mm_stream_pi(__m64 *p, __m64 a) {
600 // CHECK-LABEL: test_mm_stream_pi
601 // CHECK: call void @llvm.x86.mmx.movnt.dq
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);
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);
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);
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);
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);
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);
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);
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);
653 int test_m_to_int(__m64 a) {
654 // CHECK-LABEL: test_m_to_int
655 // CHECK: extractelement <2 x i32>
659 long long test_m_to_int64(__m64 a) {
660 // CHECK-LABEL: test_m_to_int64
662 return _m_to_int64(a);
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);
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);
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);
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);
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);
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);
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);