zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

avx512vlcdintrin.h (8141B) - Raw


      1 /*===---- avx512vlcdintrin.h - AVX512VL and AVX512CD intrinsics ------------===
      2  *
      3  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4  * See https://llvm.org/LICENSE.txt for license information.
      5  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6  *
      7  *===-----------------------------------------------------------------------===
      8  */
      9 #ifndef __IMMINTRIN_H
     10 #error "Never use <avx512vlcdintrin.h> directly; include <immintrin.h> instead."
     11 #endif
     12 
     13 #ifndef __AVX512VLCDINTRIN_H
     14 #define __AVX512VLCDINTRIN_H
     15 
     16 /* Define the default attributes for the functions in this file. */
     17 #define __DEFAULT_FN_ATTRS128                                                  \
     18   __attribute__((__always_inline__, __nodebug__,                               \
     19                  __target__("avx512vl,avx512cd,no-evex512"),                   \
     20                  __min_vector_width__(128)))
     21 #define __DEFAULT_FN_ATTRS256                                                  \
     22   __attribute__((__always_inline__, __nodebug__,                               \
     23                  __target__("avx512vl,avx512cd,no-evex512"),                   \
     24                  __min_vector_width__(256)))
     25 
     26 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     27 _mm_broadcastmb_epi64 (__mmask8 __A)
     28 {
     29   return (__m128i) _mm_set1_epi64x((long long) __A);
     30 }
     31 
     32 static __inline__ __m256i __DEFAULT_FN_ATTRS256
     33 _mm256_broadcastmb_epi64 (__mmask8 __A)
     34 {
     35   return (__m256i) _mm256_set1_epi64x((long long)__A);
     36 }
     37 
     38 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     39 _mm_broadcastmw_epi32 (__mmask16 __A)
     40 {
     41   return (__m128i) _mm_set1_epi32((int)__A);
     42 }
     43 
     44 static __inline__ __m256i __DEFAULT_FN_ATTRS256
     45 _mm256_broadcastmw_epi32 (__mmask16 __A)
     46 {
     47   return (__m256i) _mm256_set1_epi32((int)__A);
     48 }
     49 
     50 
     51 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     52 _mm_conflict_epi64 (__m128i __A)
     53 {
     54   return (__m128i) __builtin_ia32_vpconflictdi_128 ((__v2di) __A);
     55 }
     56 
     57 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     58 _mm_mask_conflict_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
     59 {
     60   return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
     61                                              (__v2di)_mm_conflict_epi64(__A),
     62                                              (__v2di)__W);
     63 }
     64 
     65 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     66 _mm_maskz_conflict_epi64 (__mmask8 __U, __m128i __A)
     67 {
     68   return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
     69                                              (__v2di)_mm_conflict_epi64(__A),
     70                                              (__v2di)_mm_setzero_si128());
     71 }
     72 
     73 static __inline__ __m256i __DEFAULT_FN_ATTRS256
     74 _mm256_conflict_epi64 (__m256i __A)
     75 {
     76   return (__m256i) __builtin_ia32_vpconflictdi_256 ((__v4di) __A);
     77 }
     78 
     79 static __inline__ __m256i __DEFAULT_FN_ATTRS256
     80 _mm256_mask_conflict_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
     81 {
     82   return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
     83                                              (__v4di)_mm256_conflict_epi64(__A),
     84                                              (__v4di)__W);
     85 }
     86 
     87 static __inline__ __m256i __DEFAULT_FN_ATTRS256
     88 _mm256_maskz_conflict_epi64 (__mmask8 __U, __m256i __A)
     89 {
     90   return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
     91                                              (__v4di)_mm256_conflict_epi64(__A),
     92                                              (__v4di)_mm256_setzero_si256());
     93 }
     94 
     95 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     96 _mm_conflict_epi32 (__m128i __A)
     97 {
     98   return (__m128i) __builtin_ia32_vpconflictsi_128 ((__v4si) __A);
     99 }
    100 
    101 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    102 _mm_mask_conflict_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
    103 {
    104   return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
    105                                              (__v4si)_mm_conflict_epi32(__A),
    106                                              (__v4si)__W);
    107 }
    108 
    109 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    110 _mm_maskz_conflict_epi32 (__mmask8 __U, __m128i __A)
    111 {
    112   return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
    113                                              (__v4si)_mm_conflict_epi32(__A),
    114                                              (__v4si)_mm_setzero_si128());
    115 }
    116 
    117 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    118 _mm256_conflict_epi32 (__m256i __A)
    119 {
    120   return (__m256i) __builtin_ia32_vpconflictsi_256 ((__v8si) __A);
    121 }
    122 
    123 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    124 _mm256_mask_conflict_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
    125 {
    126   return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
    127                                              (__v8si)_mm256_conflict_epi32(__A),
    128                                              (__v8si)__W);
    129 }
    130 
    131 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    132 _mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A)
    133 {
    134   return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
    135                                              (__v8si)_mm256_conflict_epi32(__A),
    136                                              (__v8si)_mm256_setzero_si256());
    137 }
    138 
    139 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    140 _mm_lzcnt_epi32 (__m128i __A)
    141 {
    142   return (__m128i) __builtin_ia32_vplzcntd_128 ((__v4si) __A);
    143 }
    144 
    145 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    146 _mm_mask_lzcnt_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
    147 {
    148   return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
    149                                              (__v4si)_mm_lzcnt_epi32(__A),
    150                                              (__v4si)__W);
    151 }
    152 
    153 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    154 _mm_maskz_lzcnt_epi32 (__mmask8 __U, __m128i __A)
    155 {
    156   return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
    157                                              (__v4si)_mm_lzcnt_epi32(__A),
    158                                              (__v4si)_mm_setzero_si128());
    159 }
    160 
    161 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    162 _mm256_lzcnt_epi32 (__m256i __A)
    163 {
    164   return (__m256i) __builtin_ia32_vplzcntd_256 ((__v8si) __A);
    165 }
    166 
    167 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    168 _mm256_mask_lzcnt_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
    169 {
    170   return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
    171                                              (__v8si)_mm256_lzcnt_epi32(__A),
    172                                              (__v8si)__W);
    173 }
    174 
    175 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    176 _mm256_maskz_lzcnt_epi32 (__mmask8 __U, __m256i __A)
    177 {
    178   return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
    179                                              (__v8si)_mm256_lzcnt_epi32(__A),
    180                                              (__v8si)_mm256_setzero_si256());
    181 }
    182 
    183 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    184 _mm_lzcnt_epi64 (__m128i __A)
    185 {
    186   return (__m128i) __builtin_ia32_vplzcntq_128 ((__v2di) __A);
    187 }
    188 
    189 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    190 _mm_mask_lzcnt_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
    191 {
    192   return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
    193                                              (__v2di)_mm_lzcnt_epi64(__A),
    194                                              (__v2di)__W);
    195 }
    196 
    197 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    198 _mm_maskz_lzcnt_epi64 (__mmask8 __U, __m128i __A)
    199 {
    200   return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
    201                                              (__v2di)_mm_lzcnt_epi64(__A),
    202                                              (__v2di)_mm_setzero_si128());
    203 }
    204 
    205 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    206 _mm256_lzcnt_epi64 (__m256i __A)
    207 {
    208   return (__m256i) __builtin_ia32_vplzcntq_256 ((__v4di) __A);
    209 }
    210 
    211 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    212 _mm256_mask_lzcnt_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
    213 {
    214   return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
    215                                              (__v4di)_mm256_lzcnt_epi64(__A),
    216                                              (__v4di)__W);
    217 }
    218 
    219 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    220 _mm256_maskz_lzcnt_epi64 (__mmask8 __U, __m256i __A)
    221 {
    222   return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
    223                                              (__v4di)_mm256_lzcnt_epi64(__A),
    224                                              (__v4di)_mm256_setzero_si256());
    225 }
    226 
    227 #undef __DEFAULT_FN_ATTRS128
    228 #undef __DEFAULT_FN_ATTRS256
    229 
    230 #endif /* __AVX512VLCDINTRIN_H */