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 88