zig

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

vaesintrin.h (2671B) - Raw


      1 /*===------------------ vaesintrin.h - VAES intrinsics ---------------------===
      2  *
      3  *
      4  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      5  * See https://llvm.org/LICENSE.txt for license information.
      6  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      7  *
      8  *===-----------------------------------------------------------------------===
      9  */
     10 #ifndef __IMMINTRIN_H
     11 #error "Never use <vaesintrin.h> directly; include <immintrin.h> instead."
     12 #endif
     13 
     14 #ifndef __VAESINTRIN_H
     15 #define __VAESINTRIN_H
     16 
     17 /* Default attributes for YMM forms. */
     18 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("vaes"), __min_vector_width__(256)))
     19 
     20 /* Default attributes for ZMM forms. */
     21 #define __DEFAULT_FN_ATTRS_F                                                   \
     22   __attribute__((__always_inline__, __nodebug__,                               \
     23                  __target__("avx512f,evex512,vaes"),                           \
     24                  __min_vector_width__(512)))
     25 
     26 static __inline__ __m256i __DEFAULT_FN_ATTRS
     27  _mm256_aesenc_epi128(__m256i __A, __m256i __B)
     28 {
     29   return (__m256i) __builtin_ia32_aesenc256((__v4di) __A,
     30               (__v4di) __B);
     31 }
     32 
     33 static __inline__ __m256i __DEFAULT_FN_ATTRS
     34  _mm256_aesdec_epi128(__m256i __A, __m256i __B)
     35 {
     36   return (__m256i) __builtin_ia32_aesdec256((__v4di) __A,
     37               (__v4di) __B);
     38 }
     39 
     40 static __inline__ __m256i __DEFAULT_FN_ATTRS
     41  _mm256_aesenclast_epi128(__m256i __A, __m256i __B)
     42 {
     43   return (__m256i) __builtin_ia32_aesenclast256((__v4di) __A,
     44               (__v4di) __B);
     45 }
     46 
     47 static __inline__ __m256i __DEFAULT_FN_ATTRS
     48  _mm256_aesdeclast_epi128(__m256i __A, __m256i __B)
     49 {
     50   return (__m256i) __builtin_ia32_aesdeclast256((__v4di) __A,
     51               (__v4di) __B);
     52 }
     53 
     54 #ifdef __AVX512FINTRIN_H
     55 static __inline__ __m512i __DEFAULT_FN_ATTRS_F
     56  _mm512_aesenc_epi128(__m512i __A, __m512i __B)
     57 {
     58   return (__m512i) __builtin_ia32_aesenc512((__v8di) __A,
     59               (__v8di) __B);
     60 }
     61 
     62 static __inline__ __m512i __DEFAULT_FN_ATTRS_F
     63  _mm512_aesdec_epi128(__m512i __A, __m512i __B)
     64 {
     65   return (__m512i) __builtin_ia32_aesdec512((__v8di) __A,
     66               (__v8di) __B);
     67 }
     68 
     69 static __inline__ __m512i __DEFAULT_FN_ATTRS_F
     70  _mm512_aesenclast_epi128(__m512i __A, __m512i __B)
     71 {
     72   return (__m512i) __builtin_ia32_aesenclast512((__v8di) __A,
     73               (__v8di) __B);
     74 }
     75 
     76 static __inline__ __m512i __DEFAULT_FN_ATTRS_F
     77  _mm512_aesdeclast_epi128(__m512i __A, __m512i __B)
     78 {
     79   return (__m512i) __builtin_ia32_aesdeclast512((__v8di) __A,
     80               (__v8di) __B);
     81 }
     82 #endif // __AVX512FINTRIN_H
     83 
     84 #undef __DEFAULT_FN_ATTRS
     85 #undef __DEFAULT_FN_ATTRS_F
     86 
     87 #endif // __VAESINTRIN_H