vaesintrin.h revision 327302
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. */
32327302Sdim#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("vaes")))
33327302Sdim
34327302Sdim/* Default attributes for ZMM forms. */
35327302Sdim#define __DEFAULT_FN_ATTRS_F __attribute__((__always_inline__, __nodebug__, __target__("avx512f,vaes")))
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