vaesintrin.h revision 341825
1327302Sdim/*===------------------ vaesintrin.h - VAES intrinsics ---------------------=== 2327302Sdim * 3327302Sdim * 4327302Sdim * Permission is hereby granted, free of charge, to any person obtaining a copy 5327302Sdim * of this software and associated documentation files (the "Software"), to deal 6327302Sdim * in the Software without restriction, including without limitation the rights 7327302Sdim * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8327302Sdim * copies of the Software, and to permit persons to whom the Software is 9327302Sdim * furnished to do so, subject to the following conditions: 10327302Sdim * 11327302Sdim * The above copyright notice and this permission notice shall be included in 12327302Sdim * all copies or substantial portions of the Software. 13327302Sdim * 14327302Sdim * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15327302Sdim * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16327302Sdim * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17327302Sdim * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18327302Sdim * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19327302Sdim * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20327302Sdim * THE SOFTWARE. 21327302Sdim * 22327302Sdim *===-----------------------------------------------------------------------=== 23327302Sdim */ 24327302Sdim#ifndef __IMMINTRIN_H 25327302Sdim#error "Never use <vaesintrin.h> directly; include <immintrin.h> instead." 26327302Sdim#endif 27327302Sdim 28327302Sdim#ifndef __VAESINTRIN_H 29327302Sdim#define __VAESINTRIN_H 30327302Sdim 31327302Sdim/* Default attributes for YMM forms. */ 32341825Sdim#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("vaes"), __min_vector_width__(256))) 33327302Sdim 34327302Sdim/* Default attributes for ZMM forms. */ 35341825Sdim#define __DEFAULT_FN_ATTRS_F __attribute__((__always_inline__, __nodebug__, __target__("avx512f,vaes"), __min_vector_width__(512))) 36327302Sdim 37327302Sdim 38327302Sdimstatic __inline__ __m256i __DEFAULT_FN_ATTRS 39327302Sdim _mm256_aesenc_epi128(__m256i __A, __m256i __B) 40327302Sdim{ 41327302Sdim return (__m256i) __builtin_ia32_aesenc256((__v4di) __A, 42327302Sdim (__v4di) __B); 43327302Sdim} 44327302Sdim 45327302Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS_F 46327302Sdim _mm512_aesenc_epi128(__m512i __A, __m512i __B) 47327302Sdim{ 48327302Sdim return (__m512i) __builtin_ia32_aesenc512((__v8di) __A, 49327302Sdim (__v8di) __B); 50327302Sdim} 51327302Sdim 52327302Sdimstatic __inline__ __m256i __DEFAULT_FN_ATTRS 53327302Sdim _mm256_aesdec_epi128(__m256i __A, __m256i __B) 54327302Sdim{ 55327302Sdim return (__m256i) __builtin_ia32_aesdec256((__v4di) __A, 56327302Sdim (__v4di) __B); 57327302Sdim} 58327302Sdim 59327302Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS_F 60327302Sdim _mm512_aesdec_epi128(__m512i __A, __m512i __B) 61327302Sdim{ 62327302Sdim return (__m512i) __builtin_ia32_aesdec512((__v8di) __A, 63327302Sdim (__v8di) __B); 64327302Sdim} 65327302Sdim 66327302Sdimstatic __inline__ __m256i __DEFAULT_FN_ATTRS 67327302Sdim _mm256_aesenclast_epi128(__m256i __A, __m256i __B) 68327302Sdim{ 69327302Sdim return (__m256i) __builtin_ia32_aesenclast256((__v4di) __A, 70327302Sdim (__v4di) __B); 71327302Sdim} 72327302Sdim 73327302Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS_F 74327302Sdim _mm512_aesenclast_epi128(__m512i __A, __m512i __B) 75327302Sdim{ 76327302Sdim return (__m512i) __builtin_ia32_aesenclast512((__v8di) __A, 77327302Sdim (__v8di) __B); 78327302Sdim} 79327302Sdim 80327302Sdimstatic __inline__ __m256i __DEFAULT_FN_ATTRS 81327302Sdim _mm256_aesdeclast_epi128(__m256i __A, __m256i __B) 82327302Sdim{ 83327302Sdim return (__m256i) __builtin_ia32_aesdeclast256((__v4di) __A, 84327302Sdim (__v4di) __B); 85327302Sdim} 86327302Sdim 87327302Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS_F 88327302Sdim _mm512_aesdeclast_epi128(__m512i __A, __m512i __B) 89327302Sdim{ 90327302Sdim return (__m512i) __builtin_ia32_aesdeclast512((__v8di) __A, 91327302Sdim (__v8di) __B); 92327302Sdim} 93327302Sdim 94327302Sdim 95327302Sdim#undef __DEFAULT_FN_ATTRS 96327302Sdim#undef __DEFAULT_FN_ATTRS_F 97327302Sdim 98327302Sdim#endif 99