clang 20.0.0git
__wmmintrin_aes.h
Go to the documentation of this file.
1/*===---- __wmmintrin_aes.h - AES intrinsics -------------------------------===
2 *
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 *
7 *===-----------------------------------------------------------------------===
8 */
9
10#ifndef __WMMINTRIN_H
11#error "Never use <__wmmintrin_aes.h> directly; include <wmmintrin.h> instead."
12#endif
13
14#ifndef __WMMINTRIN_AES_H
15#define __WMMINTRIN_AES_H
16
17/* Define the default attributes for the functions in this file. */
18#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("aes"), __min_vector_width__(128)))
19
20/// Performs a single round of AES encryption using the Equivalent
21/// Inverse Cipher, transforming the state value from the first source
22/// operand using a 128-bit round key value contained in the second source
23/// operand, and writes the result to the destination.
24///
25/// \headerfile <x86intrin.h>
26///
27/// This intrinsic corresponds to the <c> VAESENC </c> instruction.
28///
29/// \param __V
30/// A 128-bit integer vector containing the state value.
31/// \param __R
32/// A 128-bit integer vector containing the round key value.
33/// \returns A 128-bit integer vector containing the encrypted value.
34static __inline__ __m128i __DEFAULT_FN_ATTRS
35_mm_aesenc_si128(__m128i __V, __m128i __R)
36{
37 return (__m128i)__builtin_ia32_aesenc128((__v2di)__V, (__v2di)__R);
38}
39
40/// Performs the final round of AES encryption using the Equivalent
41/// Inverse Cipher, transforming the state value from the first source
42/// operand using a 128-bit round key value contained in the second source
43/// operand, and writes the result to the destination.
44///
45/// \headerfile <x86intrin.h>
46///
47/// This intrinsic corresponds to the <c> VAESENCLAST </c> instruction.
48///
49/// \param __V
50/// A 128-bit integer vector containing the state value.
51/// \param __R
52/// A 128-bit integer vector containing the round key value.
53/// \returns A 128-bit integer vector containing the encrypted value.
54static __inline__ __m128i __DEFAULT_FN_ATTRS
55_mm_aesenclast_si128(__m128i __V, __m128i __R)
56{
57 return (__m128i)__builtin_ia32_aesenclast128((__v2di)__V, (__v2di)__R);
58}
59
60/// Performs a single round of AES decryption using the Equivalent
61/// Inverse Cipher, transforming the state value from the first source
62/// operand using a 128-bit round key value contained in the second source
63/// operand, and writes the result to the destination.
64///
65/// \headerfile <x86intrin.h>
66///
67/// This intrinsic corresponds to the <c> VAESDEC </c> instruction.
68///
69/// \param __V
70/// A 128-bit integer vector containing the state value.
71/// \param __R
72/// A 128-bit integer vector containing the round key value.
73/// \returns A 128-bit integer vector containing the decrypted value.
74static __inline__ __m128i __DEFAULT_FN_ATTRS
75_mm_aesdec_si128(__m128i __V, __m128i __R)
76{
77 return (__m128i)__builtin_ia32_aesdec128((__v2di)__V, (__v2di)__R);
78}
79
80/// Performs the final round of AES decryption using the Equivalent
81/// Inverse Cipher, transforming the state value from the first source
82/// operand using a 128-bit round key value contained in the second source
83/// operand, and writes the result to the destination.
84///
85/// \headerfile <x86intrin.h>
86///
87/// This intrinsic corresponds to the <c> VAESDECLAST </c> instruction.
88///
89/// \param __V
90/// A 128-bit integer vector containing the state value.
91/// \param __R
92/// A 128-bit integer vector containing the round key value.
93/// \returns A 128-bit integer vector containing the decrypted value.
94static __inline__ __m128i __DEFAULT_FN_ATTRS
95_mm_aesdeclast_si128(__m128i __V, __m128i __R)
96{
97 return (__m128i)__builtin_ia32_aesdeclast128((__v2di)__V, (__v2di)__R);
98}
99
100/// Applies the AES InvMixColumns() transformation to an expanded key
101/// contained in the source operand, and writes the result to the
102/// destination.
103///
104/// \headerfile <x86intrin.h>
105///
106/// This intrinsic corresponds to the <c> VAESIMC </c> instruction.
107///
108/// \param __V
109/// A 128-bit integer vector containing the expanded key.
110/// \returns A 128-bit integer vector containing the transformed value.
111static __inline__ __m128i __DEFAULT_FN_ATTRS
113{
114 return (__m128i)__builtin_ia32_aesimc128((__v2di)__V);
115}
116
117/// Generates a round key for AES encryption, operating on 128-bit data
118/// specified in the first source operand and using an 8-bit round constant
119/// specified by the second source operand, and writes the result to the
120/// destination.
121///
122/// \headerfile <x86intrin.h>
123///
124/// \code
125/// __m128i _mm_aeskeygenassist_si128(__m128i C, const int R);
126/// \endcode
127///
128/// This intrinsic corresponds to the <c> AESKEYGENASSIST </c> instruction.
129///
130/// \param C
131/// A 128-bit integer vector that is used to generate the AES encryption key.
132/// \param R
133/// An 8-bit round constant used to generate the AES encryption key.
134/// \returns A 128-bit round key for AES encryption.
135#define _mm_aeskeygenassist_si128(C, R) \
136 ((__m128i)__builtin_ia32_aeskeygenassist128((__v2di)(__m128i)(C), (int)(R)))
137
138#undef __DEFAULT_FN_ATTRS
139
140#endif /* __WMMINTRIN_AES_H */
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_aesenc_si128(__m128i __V, __m128i __R)
Performs a single round of AES encryption using the Equivalent Inverse Cipher, transforming the state...
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_aesenclast_si128(__m128i __V, __m128i __R)
Performs the final round of AES encryption using the Equivalent Inverse Cipher, transforming the stat...
#define __DEFAULT_FN_ATTRS
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_aesimc_si128(__m128i __V)
Applies the AES InvMixColumns() transformation to an expanded key contained in the source operand,...
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_aesdeclast_si128(__m128i __V, __m128i __R)
Performs the final round of AES decryption using the Equivalent Inverse Cipher, transforming the stat...
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_aesdec_si128(__m128i __V, __m128i __R)
Performs a single round of AES decryption using the Equivalent Inverse Cipher, transforming the state...