32 #ifndef __Random123_ars_dot_hpp__
33 #define __Random123_ars_dot_hpp__
40 #ifndef ARS1xm128i_DEFAULT_ROUNDS
41 #define ARS1xm128i_DEFAULT_ROUNDS 7
58 __m128i kweyl = _mm_set_epi64x(R123_64BIT(0xBB67AE8584CAA73B),
59 R123_64BIT(0x9E3779B97F4A7C15));
63 __m128i kk = k.
v[0].
m;
64 __m128i
v = _mm_xor_si128(in.
v[0].
m, kk);
66 R123_ASSERT(Nrounds<=10);
68 kk = _mm_add_epi64(kk, kweyl);
69 v = _mm_aesenc_si128(
v, kk);
72 kk = _mm_add_epi64(kk, kweyl);
73 v = _mm_aesenc_si128(
v, kk);
76 kk = _mm_add_epi64(kk, kweyl);
77 v = _mm_aesenc_si128(
v, kk);
80 kk = _mm_add_epi64(kk, kweyl);
81 v = _mm_aesenc_si128(
v, kk);
84 kk = _mm_add_epi64(kk, kweyl);
85 v = _mm_aesenc_si128(
v, kk);
88 kk = _mm_add_epi64(kk, kweyl);
89 v = _mm_aesenc_si128(
v, kk);
92 kk = _mm_add_epi64(kk, kweyl);
93 v = _mm_aesenc_si128(
v, kk);
96 kk = _mm_add_epi64(kk, kweyl);
97 v = _mm_aesenc_si128(
v, kk);
100 kk = _mm_add_epi64(kk, kweyl);
101 v = _mm_aesenc_si128(
v, kk);
103 kk = _mm_add_epi64(kk, kweyl);
104 v = _mm_aesenclast_si128(
v, kk);
112 #define ars1xm128i(c,k) ars1xm128i_R(ars1xm128i_rounds, c, k)
128 c128.
v[0].
m = _mm_set_epi32(c.
v[3], c.
v[2], c.
v[1], c.
v[0]);
129 k128.
v[0].
m = _mm_set_epi32(k.
v[3], k.
v[2], k.
v[1], k.
v[0]);
131 _mm_storeu_si128((__m128i*)&c.
v[0], c128.
v[0].
m);
138 #define ars4x32(c,k) ars4x32_R(ars4x32_rounds, c, k)
163 template<
unsigned int ROUNDS>
178 template<
unsigned int ROUNDS>