zig

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

avx10_2_512convertintrin.h (13161B) - Raw


      1 /*===--------- avx10_2_512convertintrin.h - AVX10_2_512CONVERT -------------===
      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                                                                         \
     11     "Never use <avx10_2_512convertintrin.h> directly; include <immintrin.h> instead."
     12 #endif // __IMMINTRIN_H
     13 
     14 #ifdef __SSE2__
     15 
     16 #ifndef __AVX10_2_512CONVERTINTRIN_H
     17 #define __AVX10_2_512CONVERTINTRIN_H
     18 
     19 /* Define the default attributes for the functions in this file. */
     20 #define __DEFAULT_FN_ATTRS512                                                  \
     21   __attribute__((__always_inline__, __nodebug__, __target__("avx10.2-512"),    \
     22                  __min_vector_width__(512)))
     23 
     24 static __inline__ __m512h __DEFAULT_FN_ATTRS512 _mm512_cvtx2ps_ph(__m512 __A,
     25                                                                   __m512 __B) {
     26   return (__m512h)__builtin_ia32_vcvt2ps2phx512_mask(
     27       (__v16sf)__A, (__v16sf)__B, (__v32hf)_mm512_setzero_ph(), (__mmask32)(-1),
     28       _MM_FROUND_CUR_DIRECTION);
     29 }
     30 
     31 static __inline__ __m512h __DEFAULT_FN_ATTRS512
     32 _mm512_mask_cvtx2ps_ph(__m512h __W, __mmask32 __U, __m512 __A, __m512 __B) {
     33   return (__m512h)__builtin_ia32_vcvt2ps2phx512_mask(
     34       (__v16sf)__A, (__v16sf)__B, (__v32hf)__W, (__mmask32)__U,
     35       _MM_FROUND_CUR_DIRECTION);
     36 }
     37 
     38 static __inline__ __m512h __DEFAULT_FN_ATTRS512
     39 _mm512_maskz_cvtx2ps_ph(__mmask32 __U, __m512 __A, __m512 __B) {
     40   return (__m512h)__builtin_ia32_vcvt2ps2phx512_mask(
     41       (__v16sf)__A, (__v16sf)__B, (__v32hf)_mm512_setzero_ph(), (__mmask32)__U,
     42       _MM_FROUND_CUR_DIRECTION);
     43 }
     44 
     45 #define _mm512_cvtx_round2ps_ph(A, B, R)                                       \
     46   ((__m512h)__builtin_ia32_vcvt2ps2phx512_mask(                                \
     47       (__v16sf)(A), (__v16sf)(B), (__v32hf)_mm512_undefined_ph(),              \
     48       (__mmask32)(-1), (const int)(R)))
     49 
     50 #define _mm512_mask_cvtx_round2ps_ph(W, U, A, B, R)                            \
     51   ((__m512h)__builtin_ia32_vcvt2ps2phx512_mask((__v16sf)(A), (__v16sf)(B),     \
     52                                                (__v32hf)(W), (__mmask32)(U),   \
     53                                                (const int)(R)))
     54 
     55 #define _mm512_maskz_cvtx_round2ps_ph(U, A, B, R)                              \
     56   ((__m512h)__builtin_ia32_vcvt2ps2phx512_mask(                                \
     57       (__v16sf)(A), (__v16sf)(B), (__v32hf)_mm512_setzero_ph(),                \
     58       (__mmask32)(U), (const int)(R)))
     59 
     60 static __inline__ __m256i __DEFAULT_FN_ATTRS512
     61 _mm512_cvtbiasph_bf8(__m512i __A, __m512h __B) {
     62   return (__m256i)__builtin_ia32_vcvtbiasph2bf8_512_mask(
     63       (__v64qi)__A, (__v32hf)__B, (__v32qi)_mm256_undefined_si256(),
     64       (__mmask32)-1);
     65 }
     66 
     67 static __inline__ __m256i __DEFAULT_FN_ATTRS512 _mm512_mask_cvtbiasph_bf8(
     68     __m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {
     69   return (__m256i)__builtin_ia32_vcvtbiasph2bf8_512_mask(
     70       (__v64qi)__A, (__v32hf)__B, (__v32qi)(__m256i)__W, (__mmask32)__U);
     71 }
     72 
     73 static __inline__ __m256i __DEFAULT_FN_ATTRS512
     74 _mm512_maskz_cvtbiasph_bf8(__mmask32 __U, __m512i __A, __m512h __B) {
     75   return (__m256i)__builtin_ia32_vcvtbiasph2bf8_512_mask(
     76       (__v64qi)__A, (__v32hf)__B, (__v32qi)(__m256i)_mm256_setzero_si256(),
     77       (__mmask32)__U);
     78 }
     79 
     80 static __inline__ __m256i __DEFAULT_FN_ATTRS512
     81 _mm512_cvtbiassph_bf8(__m512i __A, __m512h __B) {
     82   return (__m256i)__builtin_ia32_vcvtbiasph2bf8s_512_mask(
     83       (__v64qi)__A, (__v32hf)__B, (__v32qi)_mm256_undefined_si256(),
     84       (__mmask32)-1);
     85 }
     86 
     87 static __inline__ __m256i __DEFAULT_FN_ATTRS512 _mm512_mask_cvtbiassph_bf8(
     88     __m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {
     89   return (__m256i)__builtin_ia32_vcvtbiasph2bf8s_512_mask(
     90       (__v64qi)__A, (__v32hf)__B, (__v32qi)(__m256i)__W, (__mmask32)__U);
     91 }
     92 
     93 static __inline__ __m256i __DEFAULT_FN_ATTRS512
     94 _mm512_maskz_cvtbiassph_bf8(__mmask32 __U, __m512i __A, __m512h __B) {
     95   return (__m256i)__builtin_ia32_vcvtbiasph2bf8s_512_mask(
     96       (__v64qi)__A, (__v32hf)__B, (__v32qi)(__m256i)_mm256_setzero_si256(),
     97       (__mmask32)__U);
     98 }
     99 
    100 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    101 _mm512_cvtbiasph_hf8(__m512i __A, __m512h __B) {
    102   return (__m256i)__builtin_ia32_vcvtbiasph2hf8_512_mask(
    103       (__v64qi)__A, (__v32hf)__B, (__v32qi)_mm256_undefined_si256(),
    104       (__mmask32)-1);
    105 }
    106 
    107 static __inline__ __m256i __DEFAULT_FN_ATTRS512 _mm512_mask_cvtbiasph_hf8(
    108     __m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {
    109   return (__m256i)__builtin_ia32_vcvtbiasph2hf8_512_mask(
    110       (__v64qi)__A, (__v32hf)__B, (__v32qi)(__m256i)__W, (__mmask32)__U);
    111 }
    112 
    113 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    114 _mm512_maskz_cvtbiasph_hf8(__mmask32 __U, __m512i __A, __m512h __B) {
    115   return (__m256i)__builtin_ia32_vcvtbiasph2hf8_512_mask(
    116       (__v64qi)__A, (__v32hf)__B, (__v32qi)(__m256i)_mm256_setzero_si256(),
    117       (__mmask32)__U);
    118 }
    119 
    120 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    121 _mm512_cvtbiassph_hf8(__m512i __A, __m512h __B) {
    122   return (__m256i)__builtin_ia32_vcvtbiasph2hf8s_512_mask(
    123       (__v64qi)__A, (__v32hf)__B, (__v32qi)_mm256_undefined_si256(),
    124       (__mmask32)-1);
    125 }
    126 
    127 static __inline__ __m256i __DEFAULT_FN_ATTRS512 _mm512_mask_cvtbiassph_hf8(
    128     __m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {
    129   return (__m256i)__builtin_ia32_vcvtbiasph2hf8s_512_mask(
    130       (__v64qi)__A, (__v32hf)__B, (__v32qi)(__m256i)__W, (__mmask32)__U);
    131 }
    132 
    133 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    134 _mm512_maskz_cvtbiassph_hf8(__mmask32 __U, __m512i __A, __m512h __B) {
    135   return (__m256i)__builtin_ia32_vcvtbiasph2hf8s_512_mask(
    136       (__v64qi)__A, (__v32hf)__B, (__v32qi)(__m256i)_mm256_setzero_si256(),
    137       (__mmask32)__U);
    138 }
    139 
    140 static __inline__ __m512i __DEFAULT_FN_ATTRS512 _mm512_cvt2ph_bf8(__m512h __A,
    141                                                                   __m512h __B) {
    142   return (__m512i)__builtin_ia32_vcvt2ph2bf8_512((__v32hf)(__A),
    143                                                  (__v32hf)(__B));
    144 }
    145 
    146 static __inline__ __m512i __DEFAULT_FN_ATTRS512
    147 _mm512_mask_cvt2ph_bf8(__m512i __W, __mmask64 __U, __m512h __A, __m512h __B) {
    148   return (__m512i)__builtin_ia32_selectb_512(
    149       (__mmask64)__U, (__v64qi)_mm512_cvt2ph_bf8(__A, __B), (__v64qi)__W);
    150 }
    151 
    152 static __inline__ __m512i __DEFAULT_FN_ATTRS512
    153 _mm512_maskz_cvt2ph_bf8(__mmask64 __U, __m512h __A, __m512h __B) {
    154   return (__m512i)__builtin_ia32_selectb_512(
    155       (__mmask64)__U, (__v64qi)_mm512_cvt2ph_bf8(__A, __B),
    156       (__v64qi)(__m512i)_mm512_setzero_si512());
    157 }
    158 
    159 static __inline__ __m512i __DEFAULT_FN_ATTRS512
    160 _mm512_cvts2ph_bf8(__m512h __A, __m512h __B) {
    161   return (__m512i)__builtin_ia32_vcvt2ph2bf8s_512((__v32hf)(__A),
    162                                                   (__v32hf)(__B));
    163 }
    164 
    165 static __inline__ __m512i __DEFAULT_FN_ATTRS512
    166 _mm512_mask_cvts2ph_bf8(__m512i __W, __mmask64 __U, __m512h __A, __m512h __B) {
    167   return (__m512i)__builtin_ia32_selectb_512(
    168       (__mmask64)__U, (__v64qi)_mm512_cvts2ph_bf8(__A, __B), (__v64qi)__W);
    169 }
    170 
    171 static __inline__ __m512i __DEFAULT_FN_ATTRS512
    172 _mm512_maskz_cvts2ph_bf8(__mmask64 __U, __m512h __A, __m512h __B) {
    173   return (__m512i)__builtin_ia32_selectb_512(
    174       (__mmask64)__U, (__v64qi)_mm512_cvts2ph_bf8(__A, __B),
    175       (__v64qi)(__m512i)_mm512_setzero_si512());
    176 }
    177 
    178 static __inline__ __m512i __DEFAULT_FN_ATTRS512 _mm512_cvt2ph_hf8(__m512h __A,
    179                                                                   __m512h __B) {
    180   return (__m512i)__builtin_ia32_vcvt2ph2hf8_512((__v32hf)(__A),
    181                                                  (__v32hf)(__B));
    182 }
    183 
    184 static __inline__ __m512i __DEFAULT_FN_ATTRS512
    185 _mm512_mask_cvt2ph_hf8(__m512i __W, __mmask64 __U, __m512h __A, __m512h __B) {
    186   return (__m512i)__builtin_ia32_selectb_512(
    187       (__mmask64)__U, (__v64qi)_mm512_cvt2ph_hf8(__A, __B), (__v64qi)__W);
    188 }
    189 
    190 static __inline__ __m512i __DEFAULT_FN_ATTRS512
    191 _mm512_maskz_cvt2ph_hf8(__mmask64 __U, __m512h __A, __m512h __B) {
    192   return (__m512i)__builtin_ia32_selectb_512(
    193       (__mmask64)__U, (__v64qi)_mm512_cvt2ph_hf8(__A, __B),
    194       (__v64qi)(__m512i)_mm512_setzero_si512());
    195 }
    196 
    197 static __inline__ __m512i __DEFAULT_FN_ATTRS512
    198 _mm512_cvts2ph_hf8(__m512h __A, __m512h __B) {
    199   return (__m512i)__builtin_ia32_vcvt2ph2hf8s_512((__v32hf)(__A),
    200                                                   (__v32hf)(__B));
    201 }
    202 
    203 static __inline__ __m512i __DEFAULT_FN_ATTRS512
    204 _mm512_mask_cvts2ph_hf8(__m512i __W, __mmask64 __U, __m512h __A, __m512h __B) {
    205   return (__m512i)__builtin_ia32_selectb_512(
    206       (__mmask64)__U, (__v64qi)_mm512_cvts2ph_hf8(__A, __B), (__v64qi)__W);
    207 }
    208 
    209 static __inline__ __m512i __DEFAULT_FN_ATTRS512
    210 _mm512_maskz_cvts2ph_hf8(__mmask64 __U, __m512h __A, __m512h __B) {
    211   return (__m512i)__builtin_ia32_selectb_512(
    212       (__mmask64)__U, (__v64qi)_mm512_cvts2ph_hf8(__A, __B),
    213       (__v64qi)(__m512i)_mm512_setzero_si512());
    214 }
    215 
    216 static __inline__ __m512h __DEFAULT_FN_ATTRS512 _mm512_cvthf8(__m256i __A) {
    217   return (__m512h)__builtin_ia32_vcvthf8_2ph512_mask(
    218       (__v32qi)__A, (__v32hf)(__m512h)_mm512_undefined_ph(), (__mmask32)-1);
    219 }
    220 
    221 static __inline__ __m512h __DEFAULT_FN_ATTRS512
    222 _mm512_mask_cvthf8(__m512h __W, __mmask32 __U, __m256i __A) {
    223   return (__m512h)__builtin_ia32_vcvthf8_2ph512_mask(
    224       (__v32qi)__A, (__v32hf)(__m512h)__W, (__mmask32)__U);
    225 }
    226 
    227 static __inline__ __m512h __DEFAULT_FN_ATTRS512
    228 _mm512_maskz_cvthf8(__mmask32 __U, __m256i __A) {
    229   return (__m512h)__builtin_ia32_vcvthf8_2ph512_mask(
    230       (__v32qi)__A, (__v32hf)(__m512h)_mm512_setzero_ph(), (__mmask32)__U);
    231 }
    232 
    233 static __inline__ __m256i __DEFAULT_FN_ATTRS512 _mm512_cvtph_bf8(__m512h __A) {
    234   return (__m256i)__builtin_ia32_vcvtph2bf8_512_mask(
    235       (__v32hf)__A, (__v32qi)(__m256i)_mm256_undefined_si256(), (__mmask32)-1);
    236 }
    237 
    238 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    239 _mm512_mask_cvtph_bf8(__m256i __W, __mmask32 __U, __m512h __A) {
    240   return (__m256i)__builtin_ia32_vcvtph2bf8_512_mask(
    241       (__v32hf)__A, (__v32qi)(__m256i)__W, (__mmask32)__U);
    242 }
    243 
    244 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    245 _mm512_maskz_cvtph_bf8(__mmask32 __U, __m512h __A) {
    246   return (__m256i)__builtin_ia32_vcvtph2bf8_512_mask(
    247       (__v32hf)__A, (__v32qi)(__m256i)_mm256_setzero_si256(), (__mmask32)__U);
    248 }
    249 
    250 static __inline__ __m256i __DEFAULT_FN_ATTRS512 _mm512_cvtsph_bf8(__m512h __A) {
    251   return (__m256i)__builtin_ia32_vcvtph2bf8s_512_mask(
    252       (__v32hf)__A, (__v32qi)(__m256i)_mm256_undefined_si256(), (__mmask32)-1);
    253 }
    254 
    255 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    256 _mm512_mask_cvtsph_bf8(__m256i __W, __mmask32 __U, __m512h __A) {
    257   return (__m256i)__builtin_ia32_vcvtph2bf8s_512_mask(
    258       (__v32hf)__A, (__v32qi)(__m256i)__W, (__mmask32)__U);
    259 }
    260 
    261 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    262 _mm512_maskz_cvtsph_bf8(__mmask32 __U, __m512h __A) {
    263   return (__m256i)__builtin_ia32_vcvtph2bf8s_512_mask(
    264       (__v32hf)__A, (__v32qi)(__m256i)_mm256_setzero_si256(), (__mmask32)__U);
    265 }
    266 
    267 static __inline__ __m256i __DEFAULT_FN_ATTRS512 _mm512_cvtph_hf8(__m512h __A) {
    268   return (__m256i)__builtin_ia32_vcvtph2hf8_512_mask(
    269       (__v32hf)__A, (__v32qi)(__m256i)_mm256_undefined_si256(), (__mmask32)-1);
    270 }
    271 
    272 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    273 _mm512_mask_cvtph_hf8(__m256i __W, __mmask32 __U, __m512h __A) {
    274   return (__m256i)__builtin_ia32_vcvtph2hf8_512_mask(
    275       (__v32hf)__A, (__v32qi)(__m256i)__W, (__mmask32)__U);
    276 }
    277 
    278 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    279 _mm512_maskz_cvtph_hf8(__mmask32 __U, __m512h __A) {
    280   return (__m256i)__builtin_ia32_vcvtph2hf8_512_mask(
    281       (__v32hf)__A, (__v32qi)(__m256i)_mm256_setzero_si256(), (__mmask32)__U);
    282 }
    283 
    284 static __inline__ __m256i __DEFAULT_FN_ATTRS512 _mm512_cvtsph_hf8(__m512h __A) {
    285   return (__m256i)__builtin_ia32_vcvtph2hf8s_512_mask(
    286       (__v32hf)__A, (__v32qi)(__m256i)_mm256_undefined_si256(), (__mmask32)-1);
    287 }
    288 
    289 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    290 _mm512_mask_cvtsph_hf8(__m256i __W, __mmask32 __U, __m512h __A) {
    291   return (__m256i)__builtin_ia32_vcvtph2hf8s_512_mask(
    292       (__v32hf)__A, (__v32qi)(__m256i)__W, (__mmask32)__U);
    293 }
    294 
    295 static __inline__ __m256i __DEFAULT_FN_ATTRS512
    296 _mm512_maskz_cvtsph_hf8(__mmask32 __U, __m512h __A) {
    297   return (__m256i)__builtin_ia32_vcvtph2hf8s_512_mask(
    298       (__v32hf)__A, (__v32qi)(__m256i)_mm256_setzero_si256(), (__mmask32)__U);
    299 }
    300 
    301 static __inline __m512h __DEFAULT_FN_ATTRS512 _mm512_cvtbf8_ph(__m256i __A) {
    302   return _mm512_castsi512_ph(_mm512_slli_epi16(_mm512_cvtepi8_epi16(__A), 8));
    303 }
    304 
    305 static __inline __m512h __DEFAULT_FN_ATTRS512
    306 _mm512_mask_cvtbf8_ph(__m512h __S, __mmask32 __U, __m256i __A) {
    307   return _mm512_castsi512_ph(
    308       _mm512_mask_slli_epi16((__m512i)__S, __U, _mm512_cvtepi8_epi16(__A), 8));
    309 }
    310 
    311 static __inline __m512h __DEFAULT_FN_ATTRS512
    312 _mm512_maskz_cvtbf8_ph(__mmask32 __U, __m256i __A) {
    313   return _mm512_castsi512_ph(
    314       _mm512_slli_epi16(_mm512_maskz_cvtepi8_epi16(__U, __A), 8));
    315 }
    316 
    317 #undef __DEFAULT_FN_ATTRS512
    318 
    319 #endif // __AVX10_2_512CONVERTINTRIN_H
    320 #endif // __SSE2__