Home | History | Annotate | Download | only in include
      1 /*===------------- avx512cdintrin.h - AVX512CD intrinsics ------------------===
      2  *
      3  *
      4  * Permission is hereby granted, free of charge, to any person obtaining a copy
      5  * of this software and associated documentation files (the "Software"), to deal
      6  * in the Software without restriction, including without limitation the rights
      7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      8  * copies of the Software, and to permit persons to whom the Software is
      9  * furnished to do so, subject to the following conditions:
     10  *
     11  * The above copyright notice and this permission notice shall be included in
     12  * all copies or substantial portions of the Software.
     13  *
     14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     20  * THE SOFTWARE.
     21  *
     22  *===-----------------------------------------------------------------------===
     23  */
     24 #ifndef __IMMINTRIN_H
     25 #error "Never use <avx512cdintrin.h> directly; include <immintrin.h> instead."
     26 #endif
     27 
     28 #ifndef __AVX512CDINTRIN_H
     29 #define __AVX512CDINTRIN_H
     30 
     31 /* Define the default attributes for the functions in this file. */
     32 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512cd")))
     33 
     34 static __inline__ __m512i __DEFAULT_FN_ATTRS
     35 _mm512_conflict_epi64 (__m512i __A)
     36 {
     37   return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
     38                  (__v8di) _mm512_setzero_si512 (),
     39                  (__mmask8) -1);
     40 }
     41 
     42 static __inline__ __m512i __DEFAULT_FN_ATTRS
     43 _mm512_mask_conflict_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
     44 {
     45   return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
     46                (__v8di) __W,
     47                (__mmask8) __U);
     48 }
     49 
     50 static __inline__ __m512i __DEFAULT_FN_ATTRS
     51 _mm512_maskz_conflict_epi64 (__mmask8 __U, __m512i __A)
     52 {
     53   return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
     54                  (__v8di) _mm512_setzero_si512 (),
     55                  (__mmask8) __U);
     56 }
     57 
     58 static __inline__ __m512i __DEFAULT_FN_ATTRS
     59 _mm512_conflict_epi32 (__m512i __A)
     60 {
     61   return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
     62                  (__v16si) _mm512_setzero_si512 (),
     63                  (__mmask16) -1);
     64 }
     65 
     66 static __inline__ __m512i __DEFAULT_FN_ATTRS
     67 _mm512_mask_conflict_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
     68 {
     69   return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
     70                (__v16si) __W,
     71                (__mmask16) __U);
     72 }
     73 
     74 static __inline__ __m512i __DEFAULT_FN_ATTRS
     75 _mm512_maskz_conflict_epi32 (__mmask16 __U, __m512i __A)
     76 {
     77   return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
     78                  (__v16si) _mm512_setzero_si512 (),
     79                  (__mmask16) __U);
     80 }
     81 
     82 static __inline__ __m512i __DEFAULT_FN_ATTRS
     83 _mm512_lzcnt_epi32 (__m512i __A)
     84 {
     85   return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
     86              (__v16si) _mm512_setzero_si512 (),
     87              (__mmask16) -1);
     88 }
     89 
     90 static __inline__ __m512i __DEFAULT_FN_ATTRS
     91 _mm512_mask_lzcnt_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
     92 {
     93   return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
     94                  (__v16si) __W,
     95                  (__mmask16) __U);
     96 }
     97 
     98 static __inline__ __m512i __DEFAULT_FN_ATTRS
     99 _mm512_maskz_lzcnt_epi32 (__mmask16 __U, __m512i __A)
    100 {
    101   return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
    102              (__v16si) _mm512_setzero_si512 (),
    103              (__mmask16) __U);
    104 }
    105 
    106 static __inline__ __m512i __DEFAULT_FN_ATTRS
    107 _mm512_lzcnt_epi64 (__m512i __A)
    108 {
    109   return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
    110              (__v8di) _mm512_setzero_si512 (),
    111              (__mmask8) -1);
    112 }
    113 
    114 static __inline__ __m512i __DEFAULT_FN_ATTRS
    115 _mm512_mask_lzcnt_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
    116 {
    117   return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
    118                  (__v8di) __W,
    119                  (__mmask8) __U);
    120 }
    121 
    122 static __inline__ __m512i __DEFAULT_FN_ATTRS
    123 _mm512_maskz_lzcnt_epi64 (__mmask8 __U, __m512i __A)
    124 {
    125   return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
    126              (__v8di) _mm512_setzero_si512 (),
    127              (__mmask8) __U);
    128 }
    129 
    130 static __inline__ __m512i __DEFAULT_FN_ATTRS
    131 _mm512_broadcastmb_epi64 (__mmask8 __A)
    132 {
    133   return (__m512i) __builtin_ia32_broadcastmb512 (__A);
    134 }
    135 
    136 static __inline__ __m512i __DEFAULT_FN_ATTRS
    137 _mm512_broadcastmw_epi32 (__mmask16 __A)
    138 {
    139   return (__m512i) __builtin_ia32_broadcastmw512 (__A);
    140 }
    141 
    142 #undef __DEFAULT_FN_ATTRS
    143 
    144 #endif
    145