aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGen/mmx-builtins.c
blob: b1426849c0e8e498a610bc03f327a56a5301b41a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
// REQUIRES: x86-64-registered-target
// RUN: %clang_cc1 %s -O3 -triple=x86_64-apple-darwin -target-feature +ssse3 -S -o - | FileCheck %s

// FIXME: Disable inclusion of mm_malloc.h, our current implementation is broken
// on win32 since we don't generally know how to find errno.h.
#define __MM_MALLOC_H

#include <tmmintrin.h>

__m64 test1(__m64 a, __m64 b) {
  // CHECK: phaddw
  return _mm_hadd_pi16(a, b);
}

__m64 test2(__m64 a, __m64 b) {
  // CHECK: phaddd
  return _mm_hadd_pi32(a, b);
}

__m64 test3(__m64 a, __m64 b) {
  // CHECK: phaddsw
  return _mm_hadds_pi16(a, b);
}

__m64 test4(__m64 a, __m64 b) {
  // CHECK: phsubw
  return _mm_hsub_pi16(a, b);
}

__m64 test5(__m64 a, __m64 b) {
  // CHECK: phsubd
  return _mm_hsub_pi32(a, b);
}

__m64 test6(__m64 a, __m64 b) {
  // CHECK: phsubsw
  return _mm_hsubs_pi16(a, b);
}

__m64 test7(__m64 a, __m64 b) {
  // CHECK: pmaddubsw
  return _mm_maddubs_pi16(a, b);
}

__m64 test8(__m64 a, __m64 b) {
  // CHECK: pmulhrsw
  return _mm_mulhrs_pi16(a, b);
}

__m64 test9(__m64 a, __m64 b) {
  // CHECK: pshufb
  return _mm_shuffle_pi8(a, b);
}

__m64 test10(__m64 a, __m64 b) {
  // CHECK: psignb
  return _mm_sign_pi8(a, b);
}

__m64 test11(__m64 a, __m64 b) {
  // CHECK: psignw
  return _mm_sign_pi16(a, b);
}

__m64 test12(__m64 a, __m64 b) {
  // CHECK: psignd
  return _mm_sign_pi32(a, b);
}

__m64 test13(__m64 a) {
  // CHECK: pabsb
  return _mm_abs_pi8(a);
}

__m64 test14(__m64 a) {
  // CHECK: pabsw
  return _mm_abs_pi16(a);
}

__m64 test15(__m64 a) {
  // CHECK: pabsd
  return _mm_abs_pi32(a);
}

__m64 test16(__m64 a, __m64 b) {
  // CHECK: palignr
  return _mm_alignr_pi8(a, b, 2);
}

__m64 test17(__m128d a) {
  // CHECK: cvtpd2pi
  return _mm_cvtpd_pi32(a);
}

__m64 test18(__m128d a) {
  // CHECK: cvttpd2pi
  return _mm_cvttpd_pi32(a);
}

__m128d test19(__m64 a) {
  // CHECK: cvtpi2pd
  return _mm_cvtpi32_pd(a);
}

__m64 test20(__m64 a, __m64 b) {
  // CHECK: pmuludq
  return _mm_mul_su32(a, b);
}

__m64 test21(__m64 a) {
  // CHECK: pshufw
  return _mm_shuffle_pi16(a, 3);
}

__m64 test22(__m64 a, __m64 b) {
  // CHECK: pmulhuw
  return _mm_mulhi_pu16(a, b);
}

void test23(__m64 d, __m64 n, char *p) {
  // CHECK: maskmovq
  _mm_maskmove_si64(d, n, p);
}

int test24(__m64 a) {
  // CHECK: pmovmskb
  return _mm_movemask_pi8(a);
}

void test25(__m64 *p, __m64 a) {
  // CHECK: movntq
  _mm_stream_pi(p, a);
}

__m64 test26(__m64 a, __m64 b) {
  // CHECK: pavgb
  return _mm_avg_pu8(a, b);
}

__m64 test27(__m64 a, __m64 b) {
  // CHECK: pavgw
  return _mm_avg_pu16(a, b);
}

__m64 test28(__m64 a, __m64 b) {
  // CHECK: pmaxub
  return _mm_max_pu8(a, b);
}

__m64 test29(__m64 a, __m64 b) {
  // CHECK: pmaxsw
  return _mm_max_pi16(a, b);
}

__m64 test30(__m64 a, __m64 b) {
  // CHECK: pminub
  return _mm_min_pu8(a, b);
}

__m64 test31(__m64 a, __m64 b) {
  // CHECK: pminsw
  return _mm_min_pi16(a, b);
}

__m64 test32(__m64 a, __m64 b) {
  // CHECK: psadbw
  return _mm_sad_pu8(a, b);
}

__m64 test33(__m64 a, __m64 b) {
  // CHECK: paddb
  return _mm_add_pi8(a, b);
}

__m64 test34(__m64 a, __m64 b) {
  // CHECK: paddw
  return _mm_add_pi16(a, b);
}

__m64 test35(__m64 a, __m64 b) {
  // CHECK: paddd
  return _mm_add_pi32(a, b);
}

__m64 test36(__m64 a, __m64 b) {
  // CHECK: paddq
  return __builtin_ia32_paddq(a, b);
}

__m64 test37(__m64 a, __m64 b) {
  // CHECK: paddsb
  return _mm_adds_pi8(a, b);
}

__m64 test38(__m64 a, __m64 b) {
  // CHECK: paddsw
  return _mm_adds_pi16(a, b);
}

__m64 test39(__m64 a, __m64 b) {
  // CHECK: paddusb
  return _mm_adds_pu8(a, b);
}

__m64 test40(__m64 a, __m64 b) {
  // CHECK: paddusw
  return _mm_adds_pu16(a, b);
}

__m64 test41(__m64 a, __m64 b) {
  // CHECK: psubb
  return _mm_sub_pi8(a, b);
}

__m64 test42(__m64 a, __m64 b) {
  // CHECK: psubw
  return _mm_sub_pi16(a, b);
}

__m64 test43(__m64 a, __m64 b) {
  // CHECK: psubd
  return _mm_sub_pi32(a, b);
}

__m64 test44(__m64 a, __m64 b) {
  // CHECK: psubq
  return __builtin_ia32_psubq(a, b);
}

__m64 test45(__m64 a, __m64 b) {
  // CHECK: psubsb
  return _mm_subs_pi8(a, b);
}

__m64 test46(__m64 a, __m64 b) {
  // CHECK: psubsw
  return _mm_subs_pi16(a, b);
}

__m64 test47(__m64 a, __m64 b) {
  // CHECK: psubusb
  return _mm_subs_pu8(a, b);
}

__m64 test48(__m64 a, __m64 b) {
  // CHECK: psubusw
  return _mm_subs_pu16(a, b);
}

__m64 test49(__m64 a, __m64 b) {
  // CHECK: pmaddwd
  return _mm_madd_pi16(a, b);
}

__m64 test50(__m64 a, __m64 b) {
  // CHECK: pmulhw
  return _mm_mulhi_pi16(a, b);
}

__m64 test51(__m64 a, __m64 b) {
  // CHECK: pmullw
  return _mm_mullo_pi16(a, b);
}

__m64 test52(__m64 a, __m64 b) {
  // CHECK: pmullw
  return _mm_mullo_pi16(a, b);
}

__m64 test53(__m64 a, __m64 b) {
  // CHECK: pand
  return _mm_and_si64(a, b);
}

__m64 test54(__m64 a, __m64 b) {
  // CHECK: pandn
  return _mm_andnot_si64(a, b);
}

__m64 test55(__m64 a, __m64 b) {
  // CHECK: por
  return _mm_or_si64(a, b);
}

__m64 test56(__m64 a, __m64 b) {
  // CHECK: pxor
  return _mm_xor_si64(a, b);
}

__m64 test57(__m64 a, __m64 b) {
  // CHECK: pavgb
  return _mm_avg_pu8(a, b);
}

__m64 test58(__m64 a, __m64 b) {
  // CHECK: pavgw
  return _mm_avg_pu16(a, b);
}

__m64 test59(__m64 a, __m64 b) {
  // CHECK: psllw
  return _mm_sll_pi16(a, b);
}

__m64 test60(__m64 a, __m64 b) {
  // CHECK: pslld
  return _mm_sll_pi32(a, b);
}

__m64 test61(__m64 a, __m64 b) {
  // CHECK: psllq
  return _mm_sll_si64(a, b);
}

__m64 test62(__m64 a, __m64 b) {
  // CHECK: psrlw
  return _mm_srl_pi16(a, b);
}

__m64 test63(__m64 a, __m64 b) {
  // CHECK: psrld
  return _mm_srl_pi32(a, b);
}

__m64 test64(__m64 a, __m64 b) {
  // CHECK: psrlq
  return _mm_srl_si64(a, b);
}

__m64 test65(__m64 a, __m64 b) {
  // CHECK: psraw
  return _mm_sra_pi16(a, b);
}

__m64 test66(__m64 a, __m64 b) {
  // CHECK: psrad
  return _mm_sra_pi32(a, b);
}

__m64 test67(__m64 a) {
  // CHECK: psllw
  return _mm_slli_pi16(a, 3);
}

__m64 test68(__m64 a) {
  // CHECK: pslld
  return _mm_slli_pi32(a, 3);
}

__m64 test69(__m64 a) {
  // CHECK: psllq
  return _mm_slli_si64(a, 3);
}

__m64 test70(__m64 a) {
  // CHECK: psrlw
  return _mm_srli_pi16(a, 3);
}

__m64 test71(__m64 a) {
  // CHECK: psrld
  return _mm_srli_pi32(a, 3);
}

__m64 test72(__m64 a) {
  // CHECK: psrlq
  return _mm_srli_si64(a, 3);
}

__m64 test73(__m64 a) {
  // CHECK: psraw
  return _mm_srai_pi16(a, 3);
}

__m64 test74(__m64 a) {
  // CHECK: psrad
  return _mm_srai_pi32(a, 3);
}

__m64 test75(__m64 a, __m64 b) {
  // CHECK: packsswb
  return _mm_packs_pi16(a, b);
}

__m64 test76(__m64 a, __m64 b) {
  // CHECK: packssdw
  return _mm_packs_pi32(a, b);
}

__m64 test77(__m64 a, __m64 b) {
  // CHECK: packuswb
  return _mm_packs_pu16(a, b);
}

__m64 test78(__m64 a, __m64 b) {
  // CHECK: punpckhbw
  return _mm_unpackhi_pi8(a, b);
}

__m64 test79(__m64 a, __m64 b) {
  // CHECK: punpckhwd
  return _mm_unpackhi_pi16(a, b);
}

__m64 test80(__m64 a, __m64 b) {
  // CHECK: punpckhdq
  return _mm_unpackhi_pi32(a, b);
}

__m64 test81(__m64 a, __m64 b) {
  // CHECK: punpcklbw
  return _mm_unpacklo_pi8(a, b);
}

__m64 test82(__m64 a, __m64 b) {
  // CHECK: punpcklwd
  return _mm_unpacklo_pi16(a, b);
}

__m64 test83(__m64 a, __m64 b) {
  // CHECK: punpckldq
  return _mm_unpacklo_pi32(a, b);
}

__m64 test84(__m64 a, __m64 b) {
  // CHECK: pcmpeqb
  return _mm_cmpeq_pi8(a, b);
}

__m64 test85(__m64 a, __m64 b) {
  // CHECK: pcmpeqw
  return _mm_cmpeq_pi16(a, b);
}

__m64 test86(__m64 a, __m64 b) {
  // CHECK: pcmpeqd
  return _mm_cmpeq_pi32(a, b);
}

__m64 test87(__m64 a, __m64 b) {
  // CHECK: pcmpgtb
  return _mm_cmpgt_pi8(a, b);
}

__m64 test88(__m64 a, __m64 b) {
  // CHECK: pcmpgtw
  return _mm_cmpgt_pi16(a, b);
}

__m64 test89(__m64 a, __m64 b) {
  // CHECK: pcmpgtd
  return _mm_cmpgt_pi32(a, b);
}