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 __attribute__((__always_inline__, __nodebug__, __target__("avx512f,vaes"), __min_vector_width__(512))) 22 23 24 static __inline__ __m256i __DEFAULT_FN_ATTRS _mm256_aesenc_epi128(__m256i __A,__m256i __B)25 _mm256_aesenc_epi128(__m256i __A, __m256i __B) 26 { 27 return (__m256i) __builtin_ia32_aesenc256((__v4di) __A, 28 (__v4di) __B); 29 } 30 31 static __inline__ __m512i __DEFAULT_FN_ATTRS_F _mm512_aesenc_epi128(__m512i __A,__m512i __B)32 _mm512_aesenc_epi128(__m512i __A, __m512i __B) 33 { 34 return (__m512i) __builtin_ia32_aesenc512((__v8di) __A, 35 (__v8di) __B); 36 } 37 38 static __inline__ __m256i __DEFAULT_FN_ATTRS _mm256_aesdec_epi128(__m256i __A,__m256i __B)39 _mm256_aesdec_epi128(__m256i __A, __m256i __B) 40 { 41 return (__m256i) __builtin_ia32_aesdec256((__v4di) __A, 42 (__v4di) __B); 43 } 44 45 static __inline__ __m512i __DEFAULT_FN_ATTRS_F _mm512_aesdec_epi128(__m512i __A,__m512i __B)46 _mm512_aesdec_epi128(__m512i __A, __m512i __B) 47 { 48 return (__m512i) __builtin_ia32_aesdec512((__v8di) __A, 49 (__v8di) __B); 50 } 51 52 static __inline__ __m256i __DEFAULT_FN_ATTRS _mm256_aesenclast_epi128(__m256i __A,__m256i __B)53 _mm256_aesenclast_epi128(__m256i __A, __m256i __B) 54 { 55 return (__m256i) __builtin_ia32_aesenclast256((__v4di) __A, 56 (__v4di) __B); 57 } 58 59 static __inline__ __m512i __DEFAULT_FN_ATTRS_F _mm512_aesenclast_epi128(__m512i __A,__m512i __B)60 _mm512_aesenclast_epi128(__m512i __A, __m512i __B) 61 { 62 return (__m512i) __builtin_ia32_aesenclast512((__v8di) __A, 63 (__v8di) __B); 64 } 65 66 static __inline__ __m256i __DEFAULT_FN_ATTRS _mm256_aesdeclast_epi128(__m256i __A,__m256i __B)67 _mm256_aesdeclast_epi128(__m256i __A, __m256i __B) 68 { 69 return (__m256i) __builtin_ia32_aesdeclast256((__v4di) __A, 70 (__v4di) __B); 71 } 72 73 static __inline__ __m512i __DEFAULT_FN_ATTRS_F _mm512_aesdeclast_epi128(__m512i __A,__m512i __B)74 _mm512_aesdeclast_epi128(__m512i __A, __m512i __B) 75 { 76 return (__m512i) __builtin_ia32_aesdeclast512((__v8di) __A, 77 (__v8di) __B); 78 } 79 80 81 #undef __DEFAULT_FN_ATTRS 82 #undef __DEFAULT_FN_ATTRS_F 83 84 #endif 85