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