MCKL
Monte Carlo Kernel Library
Macros
aes_aesni_common.hpp File Reference

Go to the source code of this file.

Macros

#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENC(xmmk)
 
#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENC_MEM(k)
 
#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENCFIRST(xmmk)
 
#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENCFIRST_MEM(k)
 
#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENCLAST(xmmk)
 
#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENCLAST_MEM(k)
 
#define MCKL_RANDOM_INTERNAL_AES_AESNI_EVAL
 
#define MCKL_RANDOM_INTERNAL_AES_AESNI_STORE(n, N, rptr)
 

Macro Definition Documentation

◆ MCKL_RANDOM_INTERNAL_AES_AESNI_ENC

#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENC (   xmmk)
Value:
xmm0 = _mm_aesenc_si128(xmm0, xmmk); \
xmm1 = _mm_aesenc_si128(xmm1, xmmk); \
xmm2 = _mm_aesenc_si128(xmm2, xmmk); \
xmm3 = _mm_aesenc_si128(xmm3, xmmk); \
xmm4 = _mm_aesenc_si128(xmm4, xmmk); \
xmm5 = _mm_aesenc_si128(xmm5, xmmk); \
xmm6 = _mm_aesenc_si128(xmm6, xmmk); \
xmm7 = _mm_aesenc_si128(xmm7, xmmk);

Definition at line 45 of file aes_aesni_common.hpp.

◆ MCKL_RANDOM_INTERNAL_AES_AESNI_ENC_MEM

#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENC_MEM (   k)
Value:
{ \
const __m128i xmmk = k; \
xmm0 = _mm_aesenc_si128(xmm0, xmmk); \
xmm1 = _mm_aesenc_si128(xmm1, xmmk); \
xmm2 = _mm_aesenc_si128(xmm2, xmmk); \
xmm3 = _mm_aesenc_si128(xmm3, xmmk); \
xmm4 = _mm_aesenc_si128(xmm4, xmmk); \
xmm5 = _mm_aesenc_si128(xmm5, xmmk); \
xmm6 = _mm_aesenc_si128(xmm6, xmmk); \
xmm7 = _mm_aesenc_si128(xmm7, xmmk); \
}

Definition at line 78 of file aes_aesni_common.hpp.

◆ MCKL_RANDOM_INTERNAL_AES_AESNI_ENCFIRST

#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENCFIRST (   xmmk)
Value:
xmm0 = _mm_xor_si128(xmm0, xmmk); \
xmm1 = _mm_xor_si128(xmm1, xmmk); \
xmm2 = _mm_xor_si128(xmm2, xmmk); \
xmm3 = _mm_xor_si128(xmm3, xmmk); \
xmm4 = _mm_xor_si128(xmm4, xmmk); \
xmm5 = _mm_xor_si128(xmm5, xmmk); \
xmm6 = _mm_xor_si128(xmm6, xmmk); \
xmm7 = _mm_xor_si128(xmm7, xmmk);

Definition at line 35 of file aes_aesni_common.hpp.

◆ MCKL_RANDOM_INTERNAL_AES_AESNI_ENCFIRST_MEM

#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENCFIRST_MEM (   k)
Value:
{ \
const __m128i xmmk = k; \
xmm0 = _mm_xor_si128(xmm0, xmmk); \
xmm1 = _mm_xor_si128(xmm1, xmmk); \
xmm2 = _mm_xor_si128(xmm2, xmmk); \
xmm3 = _mm_xor_si128(xmm3, xmmk); \
xmm4 = _mm_xor_si128(xmm4, xmmk); \
xmm5 = _mm_xor_si128(xmm5, xmmk); \
xmm6 = _mm_xor_si128(xmm6, xmmk); \
xmm7 = _mm_xor_si128(xmm7, xmmk); \
}

Definition at line 65 of file aes_aesni_common.hpp.

◆ MCKL_RANDOM_INTERNAL_AES_AESNI_ENCLAST

#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENCLAST (   xmmk)
Value:
xmm0 = _mm_aesenclast_si128(xmm0, xmmk); \
xmm1 = _mm_aesenclast_si128(xmm1, xmmk); \
xmm2 = _mm_aesenclast_si128(xmm2, xmmk); \
xmm3 = _mm_aesenclast_si128(xmm3, xmmk); \
xmm4 = _mm_aesenclast_si128(xmm4, xmmk); \
xmm5 = _mm_aesenclast_si128(xmm5, xmmk); \
xmm6 = _mm_aesenclast_si128(xmm6, xmmk); \
xmm7 = _mm_aesenclast_si128(xmm7, xmmk);

Definition at line 55 of file aes_aesni_common.hpp.

◆ MCKL_RANDOM_INTERNAL_AES_AESNI_ENCLAST_MEM

#define MCKL_RANDOM_INTERNAL_AES_AESNI_ENCLAST_MEM (   k)
Value:
{ \
const __m128i xmmk = k; \
xmm0 = _mm_aesenclast_si128(xmm0, xmmk); \
xmm1 = _mm_aesenclast_si128(xmm1, xmmk); \
xmm2 = _mm_aesenclast_si128(xmm2, xmmk); \
xmm3 = _mm_aesenclast_si128(xmm3, xmmk); \
xmm4 = _mm_aesenclast_si128(xmm4, xmmk); \
xmm5 = _mm_aesenclast_si128(xmm5, xmmk); \
xmm6 = _mm_aesenclast_si128(xmm6, xmmk); \
xmm7 = _mm_aesenclast_si128(xmm7, xmmk); \
}

Definition at line 91 of file aes_aesni_common.hpp.

◆ MCKL_RANDOM_INTERNAL_AES_AESNI_EVAL

#define MCKL_RANDOM_INTERNAL_AES_AESNI_EVAL
Value:
template <typename ResultType> \
static void eval(std::array<std::uint64_t, 2> &ctr, std::size_t n, \
ResultType *r, const KeySeqType &ks) \
{ \
constexpr std::size_t R = sizeof(__m128i) / sizeof(ResultType); \
\
const std::size_t n0 = \
static_cast<std::size_t>(std::min(static_cast<std::uint64_t>(n), \
std::numeric_limits<std::uint64_t>::max() - ctr.front())); \
\
eval_kernel(ctr, n0, r, ks); \
n -= n0; \
r += n0 * R; \
\
if (n != 0) { \
eval(ctr, r, ks); \
n -= 1; \
r += R; \
} \
\
eval_kernel(ctr, n, r, ks); \
}

Definition at line 104 of file aes_aesni_common.hpp.

◆ MCKL_RANDOM_INTERNAL_AES_AESNI_STORE

#define MCKL_RANDOM_INTERNAL_AES_AESNI_STORE (   n,
  N,
  rptr 
)
Value:
if (n >= N) { \
n -= N; \
_mm_storeu_si128(rptr++, xmm0); \
_mm_storeu_si128(rptr++, xmm1); \
_mm_storeu_si128(rptr++, xmm2); \
_mm_storeu_si128(rptr++, xmm3); \
_mm_storeu_si128(rptr++, xmm4); \
_mm_storeu_si128(rptr++, xmm5); \
_mm_storeu_si128(rptr++, xmm6); \
_mm_storeu_si128(rptr++, xmm7); \
} else { \
std::array<__m128i, S> s; \
std::get<0>(s) = xmm0; \
std::get<1>(s) = xmm1; \
std::get<2>(s) = xmm2; \
std::get<3>(s) = xmm3; \
std::get<4>(s) = xmm4; \
std::get<5>(s) = xmm5; \
std::get<6>(s) = xmm6; \
std::get<7>(s) = xmm7; \
std::memcpy(rptr, s.data(), n * sizeof(__m128i)); \
break; \
}

Definition at line 128 of file aes_aesni_common.hpp.