4#include "native/config.h"
12#if NATIVE_HOST_NEON || defined(NATIVE_DOXYGEN)
13namespace native::detail::arm_aes {
15 template<isa<arm> Arch>
requires(Arch.has(arm_feature::aes))
17 uint8x16_t aese(uint8x16_t state, uint8x16_t round_key) noexcept {
18 return vaeseq_u8(state, round_key);
21 template<isa<arm> Arch>
requires(Arch.has(arm_feature::aes))
23 uint8x16_t aesd(uint8x16_t state, uint8x16_t round_key) noexcept {
24 return vaesdq_u8(state, round_key);
27 template<isa<arm> Arch>
requires(Arch.has(arm_feature::aes))
29 uint8x16_t aesmc(uint8x16_t state) noexcept {
30 return vaesmcq_u8(state);
33 template<isa<arm> Arch>
requires(Arch.has(arm_feature::aes))
35 uint8x16_t aesimc(uint8x16_t state) noexcept {
36 return vaesimcq_u8(state);
40 template<isa<arm> Arch,
class... T>
void aese(T...) =
delete;
42 template<isa<arm> Arch,
class... T>
void aesd(T...) =
delete;
44 template<isa<arm> Arch,
class... T>
void aesmc(T...) =
delete;
46 template<isa<arm> Arch,
class... T>
void aesimc(T...) =
delete;
Compiler attributes for host code, with shader-safe shared modifiers.
constexpr simd< std::uint8_t, 16, Arch > aesimc(simd< std::uint8_t, 16, Arch > state) noexcept
Apply inverse AES MixColumns independently to the four state columns.
constexpr simd< std::uint8_t, 16, Arch > aesmc(simd< std::uint8_t, 16, Arch > state) noexcept
Apply AES MixColumns independently to the four state columns.
constexpr simd< std::uint8_t, 16, Arch > aesd(simd< std::uint8_t, 16, Arch > state, simd< std::uint8_t, 16, Arch > round_key) noexcept
Apply AddRoundKey, inverse ShiftRows and inverse SubBytes to one AES state.
constexpr simd< std::uint8_t, 16, Arch > aese(simd< std::uint8_t, 16, Arch > state, simd< std::uint8_t, 16, Arch > round_key) noexcept
Apply AddRoundKey, SubBytes and ShiftRows to one AES state.
#define native_inline
inline [[always_inline]]
#define native_nodiscard
C++17 [[nodiscard]].
#define native_const
[[const]] is not const
#define native_target(x)
this indicates a required feature set for the current multiversioned function.