Home | History | Annotate | Download | only in CodeGen
      1 // REQUIRES: x86-64-registered-target
      2 // RUN: %clang_cc1 %s -O3 -triple=x86_64-apple-darwin -target-feature +ssse3 -S -o - | FileCheck %s
      3 
      4 // FIXME: Disable inclusion of mm_malloc.h, our current implementation is broken
      5 // on win32 since we don't generally know how to find errno.h.
      6 #define __MM_MALLOC_H
      7 
      8 #include <tmmintrin.h>
      9 
     10 __m64 test1(__m64 a, __m64 b) {
     11   // CHECK: phaddw
     12   return _mm_hadd_pi16(a, b);
     13 }
     14 
     15 __m64 test2(__m64 a, __m64 b) {
     16   // CHECK: phaddd
     17   return _mm_hadd_pi32(a, b);
     18 }
     19 
     20 __m64 test3(__m64 a, __m64 b) {
     21   // CHECK: phaddsw
     22   return _mm_hadds_pi16(a, b);
     23 }
     24 
     25 __m64 test4(__m64 a, __m64 b) {
     26   // CHECK: phsubw
     27   return _mm_hsub_pi16(a, b);
     28 }
     29 
     30 __m64 test5(__m64 a, __m64 b) {
     31   // CHECK: phsubd
     32   return _mm_hsub_pi32(a, b);
     33 }
     34 
     35 __m64 test6(__m64 a, __m64 b) {
     36   // CHECK: phsubsw
     37   return _mm_hsubs_pi16(a, b);
     38 }
     39 
     40 __m64 test7(__m64 a, __m64 b) {
     41   // CHECK: pmaddubsw
     42   return _mm_maddubs_pi16(a, b);
     43 }
     44 
     45 __m64 test8(__m64 a, __m64 b) {
     46   // CHECK: pmulhrsw
     47   return _mm_mulhrs_pi16(a, b);
     48 }
     49 
     50 __m64 test9(__m64 a, __m64 b) {
     51   // CHECK: pshufb
     52   return _mm_shuffle_pi8(a, b);
     53 }
     54 
     55 __m64 test10(__m64 a, __m64 b) {
     56   // CHECK: psignb
     57   return _mm_sign_pi8(a, b);
     58 }
     59 
     60 __m64 test11(__m64 a, __m64 b) {
     61   // CHECK: psignw
     62   return _mm_sign_pi16(a, b);
     63 }
     64 
     65 __m64 test12(__m64 a, __m64 b) {
     66   // CHECK: psignd
     67   return _mm_sign_pi32(a, b);
     68 }
     69 
     70 __m64 test13(__m64 a) {
     71   // CHECK: pabsb
     72   return _mm_abs_pi8(a);
     73 }
     74 
     75 __m64 test14(__m64 a) {
     76   // CHECK: pabsw
     77   return _mm_abs_pi16(a);
     78 }
     79 
     80 __m64 test15(__m64 a) {
     81   // CHECK: pabsd
     82   return _mm_abs_pi32(a);
     83 }
     84 
     85 __m64 test16(__m64 a, __m64 b) {
     86   // CHECK: palignr
     87   return _mm_alignr_pi8(a, b, 2);
     88 }
     89 
     90 __m64 test17(__m128d a) {
     91   // CHECK: cvtpd2pi
     92   return _mm_cvtpd_pi32(a);
     93 }
     94 
     95 __m64 test18(__m128d a) {
     96   // CHECK: cvttpd2pi
     97   return _mm_cvttpd_pi32(a);
     98 }
     99 
    100 __m128d test19(__m64 a) {
    101   // CHECK: cvtpi2pd
    102   return _mm_cvtpi32_pd(a);
    103 }
    104 
    105 __m64 test20(__m64 a, __m64 b) {
    106   // CHECK: pmuludq
    107   return _mm_mul_su32(a, b);
    108 }
    109 
    110 __m64 test21(__m64 a) {
    111   // CHECK: pshufw
    112   return _mm_shuffle_pi16(a, 3);
    113 }
    114 
    115 __m64 test22(__m64 a, __m64 b) {
    116   // CHECK: pmulhuw
    117   return _mm_mulhi_pu16(a, b);
    118 }
    119 
    120 void test23(__m64 d, __m64 n, char *p) {
    121   // CHECK: maskmovq
    122   _mm_maskmove_si64(d, n, p);
    123 }
    124 
    125 int test24(__m64 a) {
    126   // CHECK: pmovmskb
    127   return _mm_movemask_pi8(a);
    128 }
    129 
    130 void test25(__m64 *p, __m64 a) {
    131   // CHECK: movntq
    132   _mm_stream_pi(p, a);
    133 }
    134 
    135 __m64 test26(__m64 a, __m64 b) {
    136   // CHECK: pavgb
    137   return _mm_avg_pu8(a, b);
    138 }
    139 
    140 __m64 test27(__m64 a, __m64 b) {
    141   // CHECK: pavgw
    142   return _mm_avg_pu16(a, b);
    143 }
    144 
    145 __m64 test28(__m64 a, __m64 b) {
    146   // CHECK: pmaxub
    147   return _mm_max_pu8(a, b);
    148 }
    149 
    150 __m64 test29(__m64 a, __m64 b) {
    151   // CHECK: pmaxsw
    152   return _mm_max_pi16(a, b);
    153 }
    154 
    155 __m64 test30(__m64 a, __m64 b) {
    156   // CHECK: pminub
    157   return _mm_min_pu8(a, b);
    158 }
    159 
    160 __m64 test31(__m64 a, __m64 b) {
    161   // CHECK: pminsw
    162   return _mm_min_pi16(a, b);
    163 }
    164 
    165 __m64 test32(__m64 a, __m64 b) {
    166   // CHECK: psadbw
    167   return _mm_sad_pu8(a, b);
    168 }
    169 
    170 __m64 test33(__m64 a, __m64 b) {
    171   // CHECK: paddb
    172   return _mm_add_pi8(a, b);
    173 }
    174 
    175 __m64 test34(__m64 a, __m64 b) {
    176   // CHECK: paddw
    177   return _mm_add_pi16(a, b);
    178 }
    179 
    180 __m64 test35(__m64 a, __m64 b) {
    181   // CHECK: paddd
    182   return _mm_add_pi32(a, b);
    183 }
    184 
    185 __m64 test36(__m64 a, __m64 b) {
    186   // CHECK: paddq
    187   return __builtin_ia32_paddq(a, b);
    188 }
    189 
    190 __m64 test37(__m64 a, __m64 b) {
    191   // CHECK: paddsb
    192   return _mm_adds_pi8(a, b);
    193 }
    194 
    195 __m64 test38(__m64 a, __m64 b) {
    196   // CHECK: paddsw
    197   return _mm_adds_pi16(a, b);
    198 }
    199 
    200 __m64 test39(__m64 a, __m64 b) {
    201   // CHECK: paddusb
    202   return _mm_adds_pu8(a, b);
    203 }
    204 
    205 __m64 test40(__m64 a, __m64 b) {
    206   // CHECK: paddusw
    207   return _mm_adds_pu16(a, b);
    208 }
    209 
    210 __m64 test41(__m64 a, __m64 b) {
    211   // CHECK: psubb
    212   return _mm_sub_pi8(a, b);
    213 }
    214 
    215 __m64 test42(__m64 a, __m64 b) {
    216   // CHECK: psubw
    217   return _mm_sub_pi16(a, b);
    218 }
    219 
    220 __m64 test43(__m64 a, __m64 b) {
    221   // CHECK: psubd
    222   return _mm_sub_pi32(a, b);
    223 }
    224 
    225 __m64 test44(__m64 a, __m64 b) {
    226   // CHECK: psubq
    227   return __builtin_ia32_psubq(a, b);
    228 }
    229 
    230 __m64 test45(__m64 a, __m64 b) {
    231   // CHECK: psubsb
    232   return _mm_subs_pi8(a, b);
    233 }
    234 
    235 __m64 test46(__m64 a, __m64 b) {
    236   // CHECK: psubsw
    237   return _mm_subs_pi16(a, b);
    238 }
    239 
    240 __m64 test47(__m64 a, __m64 b) {
    241   // CHECK: psubusb
    242   return _mm_subs_pu8(a, b);
    243 }
    244 
    245 __m64 test48(__m64 a, __m64 b) {
    246   // CHECK: psubusw
    247   return _mm_subs_pu16(a, b);
    248 }
    249 
    250 __m64 test49(__m64 a, __m64 b) {
    251   // CHECK: pmaddwd
    252   return _mm_madd_pi16(a, b);
    253 }
    254 
    255 __m64 test50(__m64 a, __m64 b) {
    256   // CHECK: pmulhw
    257   return _mm_mulhi_pi16(a, b);
    258 }
    259 
    260 __m64 test51(__m64 a, __m64 b) {
    261   // CHECK: pmullw
    262   return _mm_mullo_pi16(a, b);
    263 }
    264 
    265 __m64 test52(__m64 a, __m64 b) {
    266   // CHECK: pmullw
    267   return _mm_mullo_pi16(a, b);
    268 }
    269 
    270 __m64 test53(__m64 a, __m64 b) {
    271   // CHECK: pand
    272   return _mm_and_si64(a, b);
    273 }
    274 
    275 __m64 test54(__m64 a, __m64 b) {
    276   // CHECK: pandn
    277   return _mm_andnot_si64(a, b);
    278 }
    279 
    280 __m64 test55(__m64 a, __m64 b) {
    281   // CHECK: por
    282   return _mm_or_si64(a, b);
    283 }
    284 
    285 __m64 test56(__m64 a, __m64 b) {
    286   // CHECK: pxor
    287   return _mm_xor_si64(a, b);
    288 }
    289 
    290 __m64 test57(__m64 a, __m64 b) {
    291   // CHECK: pavgb
    292   return _mm_avg_pu8(a, b);
    293 }
    294 
    295 __m64 test58(__m64 a, __m64 b) {
    296   // CHECK: pavgw
    297   return _mm_avg_pu16(a, b);
    298 }
    299 
    300 __m64 test59(__m64 a, __m64 b) {
    301   // CHECK: psllw
    302   return _mm_sll_pi16(a, b);
    303 }
    304 
    305 __m64 test60(__m64 a, __m64 b) {
    306   // CHECK: pslld
    307   return _mm_sll_pi32(a, b);
    308 }
    309 
    310 __m64 test61(__m64 a, __m64 b) {
    311   // CHECK: psllq
    312   return _mm_sll_si64(a, b);
    313 }
    314 
    315 __m64 test62(__m64 a, __m64 b) {
    316   // CHECK: psrlw
    317   return _mm_srl_pi16(a, b);
    318 }
    319 
    320 __m64 test63(__m64 a, __m64 b) {
    321   // CHECK: psrld
    322   return _mm_srl_pi32(a, b);
    323 }
    324 
    325 __m64 test64(__m64 a, __m64 b) {
    326   // CHECK: psrlq
    327   return _mm_srl_si64(a, b);
    328 }
    329 
    330 __m64 test65(__m64 a, __m64 b) {
    331   // CHECK: psraw
    332   return _mm_sra_pi16(a, b);
    333 }
    334 
    335 __m64 test66(__m64 a, __m64 b) {
    336   // CHECK: psrad
    337   return _mm_sra_pi32(a, b);
    338 }
    339 
    340 __m64 test67(__m64 a) {
    341   // CHECK: psllw
    342   return _mm_slli_pi16(a, 3);
    343 }
    344 
    345 __m64 test68(__m64 a) {
    346   // CHECK: pslld
    347   return _mm_slli_pi32(a, 3);
    348 }
    349 
    350 __m64 test69(__m64 a) {
    351   // CHECK: psllq
    352   return _mm_slli_si64(a, 3);
    353 }
    354 
    355 __m64 test70(__m64 a) {
    356   // CHECK: psrlw
    357   return _mm_srli_pi16(a, 3);
    358 }
    359 
    360 __m64 test71(__m64 a) {
    361   // CHECK: psrld
    362   return _mm_srli_pi32(a, 3);
    363 }
    364 
    365 __m64 test72(__m64 a) {
    366   // CHECK: psrlq
    367   return _mm_srli_si64(a, 3);
    368 }
    369 
    370 __m64 test73(__m64 a) {
    371   // CHECK: psraw
    372   return _mm_srai_pi16(a, 3);
    373 }
    374 
    375 __m64 test74(__m64 a) {
    376   // CHECK: psrad
    377   return _mm_srai_pi32(a, 3);
    378 }
    379 
    380 __m64 test75(__m64 a, __m64 b) {
    381   // CHECK: packsswb
    382   return _mm_packs_pi16(a, b);
    383 }
    384 
    385 __m64 test76(__m64 a, __m64 b) {
    386   // CHECK: packssdw
    387   return _mm_packs_pi32(a, b);
    388 }
    389 
    390 __m64 test77(__m64 a, __m64 b) {
    391   // CHECK: packuswb
    392   return _mm_packs_pu16(a, b);
    393 }
    394 
    395 __m64 test78(__m64 a, __m64 b) {
    396   // CHECK: punpckhbw
    397   return _mm_unpackhi_pi8(a, b);
    398 }
    399 
    400 __m64 test79(__m64 a, __m64 b) {
    401   // CHECK: punpckhwd
    402   return _mm_unpackhi_pi16(a, b);
    403 }
    404 
    405 __m64 test80(__m64 a, __m64 b) {
    406   // CHECK: punpckhdq
    407   return _mm_unpackhi_pi32(a, b);
    408 }
    409 
    410 __m64 test81(__m64 a, __m64 b) {
    411   // CHECK: punpcklbw
    412   return _mm_unpacklo_pi8(a, b);
    413 }
    414 
    415 __m64 test82(__m64 a, __m64 b) {
    416   // CHECK: punpcklwd
    417   return _mm_unpacklo_pi16(a, b);
    418 }
    419 
    420 __m64 test83(__m64 a, __m64 b) {
    421   // CHECK: punpckldq
    422   return _mm_unpacklo_pi32(a, b);
    423 }
    424 
    425 __m64 test84(__m64 a, __m64 b) {
    426   // CHECK: pcmpeqb
    427   return _mm_cmpeq_pi8(a, b);
    428 }
    429 
    430 __m64 test85(__m64 a, __m64 b) {
    431   // CHECK: pcmpeqw
    432   return _mm_cmpeq_pi16(a, b);
    433 }
    434 
    435 __m64 test86(__m64 a, __m64 b) {
    436   // CHECK: pcmpeqd
    437   return _mm_cmpeq_pi32(a, b);
    438 }
    439 
    440 __m64 test87(__m64 a, __m64 b) {
    441   // CHECK: pcmpgtb
    442   return _mm_cmpgt_pi8(a, b);
    443 }
    444 
    445 __m64 test88(__m64 a, __m64 b) {
    446   // CHECK: pcmpgtw
    447   return _mm_cmpgt_pi16(a, b);
    448 }
    449 
    450 __m64 test89(__m64 a, __m64 b) {
    451   // CHECK: pcmpgtd
    452   return _mm_cmpgt_pi32(a, b);
    453 }
    454