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 | |
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); |
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 | |
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); |
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 | |
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); |
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 | |
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); |
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 | |
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 |
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 | |
653 | int 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 | |
659 | long 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 | |