58 {
60
62 {
64
66 {
72 }
73 }
74
75 #pragma clang loop vectorize(enable) interleave(enable)
77 {
78
79 #pragma clang loop vectorize(enable) interleave(enable)
80 for (std::size_t
j = 0;
j < 5;
j++)
82
84 #pragma clang loop vectorize(enable) interleave(enable)
85 for (std::size_t
j = 0;
j < 5;
j++)
86 {
87 t = bc[(
j + 4) % 5] ^ rotl64(bc[(
j + 1) % 5], 1);
88 #pragma clang loop vectorize(enable) interleave(enable)
91 }
92
93
95 #pragma clang loop vectorize(enable) interleave(enable)
97 {
101 t = bc[0];
102 }
103
104
105 #pragma clang loop vectorize(enable) interleave(enable)
107 {
108 #pragma clang loop vectorize(enable) interleave(enable)
109 for (std::size_t k = 0; k < 5; k++)
111 #pragma clang loop vectorize(enable) interleave(enable)
112 for (std::size_t k = 0; k < 5; k++)
113 words[k +
j] ^= (~bc[(k + 1) % 5]) & bc[(k + 2) % 5];
114 }
115
116
118 }
119
121 {
124
125 for (std::size_t i = 0; i <
sizeof(
words); i++)
126 {
129 v[0] = tmp & 0xFF;
130 v[1] = (tmp >> 8) & 0xFF;
131 v[2] = (tmp >> 16) & 0xFF;
132 v[3] = (tmp >> 24) & 0xFF;
133 v[4] = (tmp >> 32) & 0xFF;
134 v[5] = (tmp >> 40) & 0xFF;
135 v[6] = (tmp >> 48) & 0xFF;
136 v[7] = (tmp >> 56) & 0xFF;
137 }
138 }
139 }
unsigned __int64 uint64_t
static constexpr uint8_t number_of_rounds
static constexpr uint64_t round_constants[number_of_rounds]
static constexpr uint8_t pi_lanes[number_of_rounds]
uint64_t words[number_of_words *5]
static constexpr uint8_t number_of_words
static constexpr uint8_t rot_constants[number_of_rounds]