1327302Sdim/*===------------------ vaesintrin.h - VAES intrinsics ---------------------===
2327302Sdim *
3327302Sdim *
4353358Sdim * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5353358Sdim * See https://llvm.org/LICENSE.txt for license information.
6353358Sdim * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7327302Sdim *
8327302Sdim *===-----------------------------------------------------------------------===
9327302Sdim */
10327302Sdim#ifndef __IMMINTRIN_H
11327302Sdim#error "Never use <vaesintrin.h> directly; include <immintrin.h> instead."
12327302Sdim#endif
13327302Sdim
14327302Sdim#ifndef __VAESINTRIN_H
15327302Sdim#define __VAESINTRIN_H
16327302Sdim
17327302Sdim/* Default attributes for YMM forms. */
18341825Sdim#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("vaes"), __min_vector_width__(256)))
19327302Sdim
20327302Sdim/* Default attributes for ZMM forms. */
21341825Sdim#define __DEFAULT_FN_ATTRS_F __attribute__((__always_inline__, __nodebug__, __target__("avx512f,vaes"), __min_vector_width__(512)))
22327302Sdim
23327302Sdim
24327302Sdimstatic __inline__ __m256i __DEFAULT_FN_ATTRS
25327302Sdim _mm256_aesenc_epi128(__m256i __A, __m256i __B)
26327302Sdim{
27327302Sdim  return (__m256i) __builtin_ia32_aesenc256((__v4di) __A,
28327302Sdim              (__v4di) __B);
29327302Sdim}
30327302Sdim
31327302Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS_F
32327302Sdim _mm512_aesenc_epi128(__m512i __A, __m512i __B)
33327302Sdim{
34327302Sdim  return (__m512i) __builtin_ia32_aesenc512((__v8di) __A,
35327302Sdim              (__v8di) __B);
36327302Sdim}
37327302Sdim
38327302Sdimstatic __inline__ __m256i __DEFAULT_FN_ATTRS
39327302Sdim _mm256_aesdec_epi128(__m256i __A, __m256i __B)
40327302Sdim{
41327302Sdim  return (__m256i) __builtin_ia32_aesdec256((__v4di) __A,
42327302Sdim              (__v4di) __B);
43327302Sdim}
44327302Sdim
45327302Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS_F
46327302Sdim _mm512_aesdec_epi128(__m512i __A, __m512i __B)
47327302Sdim{
48327302Sdim  return (__m512i) __builtin_ia32_aesdec512((__v8di) __A,
49327302Sdim              (__v8di) __B);
50327302Sdim}
51327302Sdim
52327302Sdimstatic __inline__ __m256i __DEFAULT_FN_ATTRS
53327302Sdim _mm256_aesenclast_epi128(__m256i __A, __m256i __B)
54327302Sdim{
55327302Sdim  return (__m256i) __builtin_ia32_aesenclast256((__v4di) __A,
56327302Sdim              (__v4di) __B);
57327302Sdim}
58327302Sdim
59327302Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS_F
60327302Sdim _mm512_aesenclast_epi128(__m512i __A, __m512i __B)
61327302Sdim{
62327302Sdim  return (__m512i) __builtin_ia32_aesenclast512((__v8di) __A,
63327302Sdim              (__v8di) __B);
64327302Sdim}
65327302Sdim
66327302Sdimstatic __inline__ __m256i __DEFAULT_FN_ATTRS
67327302Sdim _mm256_aesdeclast_epi128(__m256i __A, __m256i __B)
68327302Sdim{
69327302Sdim  return (__m256i) __builtin_ia32_aesdeclast256((__v4di) __A,
70327302Sdim              (__v4di) __B);
71327302Sdim}
72327302Sdim
73327302Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS_F
74327302Sdim _mm512_aesdeclast_epi128(__m512i __A, __m512i __B)
75327302Sdim{
76327302Sdim  return (__m512i) __builtin_ia32_aesdeclast512((__v8di) __A,
77327302Sdim              (__v8di) __B);
78327302Sdim}
79327302Sdim
80327302Sdim
81327302Sdim#undef __DEFAULT_FN_ATTRS
82327302Sdim#undef __DEFAULT_FN_ATTRS_F
83327302Sdim
84327302Sdim#endif
85