Crypto++  8.4
Free C++ class library of cryptographic schemes
keccak_simd.cpp
1 // keccak_simd.cpp - written and placed in the public domain by Jeffrey Walton.
2 //
3 // This source file uses intrinsics to gain access to SSE and
4 // NEON instructions. A separate source file is needed because
5 // additional CXXFLAGS are required to enable the appropriate
6 // instructions sets in some build configurations.
7 
8 // The XKCP package is provided by Guido Bertoni, Joan Daemen, Seth Hoffert,
9 // Michael Peeters, Gilles Van Assche, and Ronny Van Keer. The code was
10 // placed public domain by the authors.
11 
12 // KeccakF1600x2_SSE is ParallelHash128. The SSE2 ParallelHash128
13 // implementation was extracted from XKCP using the following command.
14 //
15 // gcc -I lib/common -I lib/low/KeccakP-1600/Optimized
16 // -I lib/low/KeccakP-1600-times2/SIMD128/SSE2ufull
17 // lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c -E
18 
19 #include "pch.h"
20 #include "config.h"
21 #include "keccak.h"
22 #include "misc.h"
23 
24 #if (CRYPTOPP_SSSE3_AVAILABLE)
25 # include <emmintrin.h>
26 # include <tmmintrin.h>
27 #endif
28 
29 #if defined(__XOP__)
30 # include <ammintrin.h>
31 # if defined(__GNUC__)
32 # include <x86intrin.h>
33 # endif
34 #endif
35 
36 // Squash MS LNK4221 and libtool warnings
37 extern const char KECCAK_SIMD_FNAME[] = __FILE__;
38 
39 NAMESPACE_BEGIN(CryptoPP)
40 
41 #if (CRYPTOPP_SSSE3_AVAILABLE)
42 
43 // The Keccak ParallelHash128 core function
44 extern void KeccakF1600x2_SSE(word64 *state);
45 
46 // The F1600 round constants
47 extern const word64 KeccakF1600Constants[24];
48 
49 CRYPTOPP_ALIGN_DATA(16)
50 const word64
51 rho8[2] = {W64LIT(0x0605040302010007), W64LIT(0x0E0D0C0B0A09080F)};
52 
53 CRYPTOPP_ALIGN_DATA(16)
54 const word64
55 rho56[2] = {W64LIT(0x0007060504030201), W64LIT(0x080F0E0D0C0B0A09)};
56 
57 // Clang intrinsic casts, http://bugs.llvm.org/show_bug.cgi?id=20670
58 #define M128_CAST(x) ((__m128i *)(void *)(x))
59 #define CONST_M128_CAST(x) ((const __m128i *)(const void *)(x))
60 
61 #if defined(__XOP__)
62 # define ROL64in128(a, o) _mm_roti_epi64((a), (o))
63 # define ROL64in128_8(a) ROL64in128((a), 8)
64 # define ROL64in128_56(a) ROL64in128((a), 56)
65 #else
66 # define ROL64in128(a, o) _mm_or_si128(_mm_slli_epi64((a), (o)), _mm_srli_epi64(a, 64-(o)))
67 # define ROL64in128_8(a) _mm_shuffle_epi8((a), _mm_load_si128(CONST_M128_CAST(rho8)))
68 # define ROL64in128_56(a) _mm_shuffle_epi8((a), _mm_load_si128(CONST_M128_CAST(rho56)))
69 #endif
70 
71 // Damn Visual Studio is missing too many intrinsics...
72 inline __m128i SPLAT64(const word64 a)
73 {
74 #if defined(_MSC_VER)
75  double x; std::memcpy(&x, &a, 8);
76  return _mm_castpd_si128(_mm_loaddup_pd(&x));
77 #else
78  return _mm_set1_epi64x(a);
79 #endif
80 }
81 
82 // The Keccak ParallelHash128 core function
83 void KeccakF1600x2_SSE(word64 *state)
84 {
85  __m128i Aba, Abe, Abi, Abo, Abu;
86  __m128i Aga, Age, Agi, Ago, Agu;
87  __m128i Aka, Ake, Aki, Ako, Aku;
88  __m128i Ama, Ame, Ami, Amo, Amu;
89  __m128i Asa, Ase, Asi, Aso, Asu;
90  __m128i Bba, Bbe, Bbi, Bbo, Bbu;
91  __m128i Bga, Bge, Bgi, Bgo, Bgu;
92  __m128i Bka, Bke, Bki, Bko, Bku;
93  __m128i Bma, Bme, Bmi, Bmo, Bmu;
94  __m128i Bsa, Bse, Bsi, Bso, Bsu;
95  __m128i Ca, Ce, Ci, Co, Cu;
96  __m128i Da, De, Di, Do, Du;
97  __m128i Eba, Ebe, Ebi, Ebo, Ebu;
98  __m128i Ega, Ege, Egi, Ego, Egu;
99  __m128i Eka, Eke, Eki, Eko, Eku;
100  __m128i Ema, Eme, Emi, Emo, Emu;
101  __m128i Esa, Ese, Esi, Eso, Esu;
102 
103  __m128i* lanes = reinterpret_cast<__m128i*>(state);
104  Aba = _mm_loadu_si128(CONST_M128_CAST(lanes+ 0));
105  Abe = _mm_loadu_si128(CONST_M128_CAST(lanes+ 1));
106  Abi = _mm_loadu_si128(CONST_M128_CAST(lanes+ 2));
107  Abo = _mm_loadu_si128(CONST_M128_CAST(lanes+ 3));
108  Abu = _mm_loadu_si128(CONST_M128_CAST(lanes+ 4));
109  Aga = _mm_loadu_si128(CONST_M128_CAST(lanes+ 5));
110  Age = _mm_loadu_si128(CONST_M128_CAST(lanes+ 6));
111  Agi = _mm_loadu_si128(CONST_M128_CAST(lanes+ 7));
112  Ago = _mm_loadu_si128(CONST_M128_CAST(lanes+ 8));
113  Agu = _mm_loadu_si128(CONST_M128_CAST(lanes+ 9));
114  Aka = _mm_loadu_si128(CONST_M128_CAST(lanes+10));
115  Ake = _mm_loadu_si128(CONST_M128_CAST(lanes+11));
116  Aki = _mm_loadu_si128(CONST_M128_CAST(lanes+12));
117  Ako = _mm_loadu_si128(CONST_M128_CAST(lanes+13));
118  Aku = _mm_loadu_si128(CONST_M128_CAST(lanes+14));
119  Ama = _mm_loadu_si128(CONST_M128_CAST(lanes+15));
120  Ame = _mm_loadu_si128(CONST_M128_CAST(lanes+16));
121  Ami = _mm_loadu_si128(CONST_M128_CAST(lanes+17));
122  Amo = _mm_loadu_si128(CONST_M128_CAST(lanes+18));
123  Amu = _mm_loadu_si128(CONST_M128_CAST(lanes+19));
124  Asa = _mm_loadu_si128(CONST_M128_CAST(lanes+20));
125  Ase = _mm_loadu_si128(CONST_M128_CAST(lanes+21));
126  Asi = _mm_loadu_si128(CONST_M128_CAST(lanes+22));
127  Aso = _mm_loadu_si128(CONST_M128_CAST(lanes+23));
128  Asu = _mm_loadu_si128(CONST_M128_CAST(lanes+24));
129 
130  Ca = _mm_xor_si128(Aba, _mm_xor_si128(Aga, _mm_xor_si128(Aka, _mm_xor_si128(Ama, Asa))));
131  Ce = _mm_xor_si128(Abe, _mm_xor_si128(Age, _mm_xor_si128(Ake, _mm_xor_si128(Ame, Ase))));
132  Ci = _mm_xor_si128(Abi, _mm_xor_si128(Agi, _mm_xor_si128(Aki, _mm_xor_si128(Ami, Asi))));
133  Co = _mm_xor_si128(Abo, _mm_xor_si128(Ago, _mm_xor_si128(Ako, _mm_xor_si128(Amo, Aso))));
134  Cu = _mm_xor_si128(Abu, _mm_xor_si128(Agu, _mm_xor_si128(Aku, _mm_xor_si128(Amu, Asu))));
135  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
136  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
137  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
138  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
139  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
140 
141  Aba = _mm_xor_si128(Aba, Da);
142  Bba = Aba;
143  Age = _mm_xor_si128(Age, De);
144  Bbe = ROL64in128(Age, 44);
145  Aki = _mm_xor_si128(Aki, Di);
146  Bbi = ROL64in128(Aki, 43);
147  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
148  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[0]));
149  Ca = Eba;
150  Amo = _mm_xor_si128(Amo, Do);
151  Bbo = ROL64in128(Amo, 21);
152  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
153  Ce = Ebe;
154  Asu = _mm_xor_si128(Asu, Du);
155  Bbu = ROL64in128(Asu, 14);
156  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
157  Ci = Ebi;
158  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
159  Co = Ebo;
160  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
161  Cu = Ebu;
162  Abo = _mm_xor_si128(Abo, Do);
163  Bga = ROL64in128(Abo, 28);
164  Agu = _mm_xor_si128(Agu, Du);
165  Bge = ROL64in128(Agu, 20);
166  Aka = _mm_xor_si128(Aka, Da);
167  Bgi = ROL64in128(Aka, 3);
168  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
169  Ca = _mm_xor_si128(Ca, Ega);
170  Ame = _mm_xor_si128(Ame, De);
171  Bgo = ROL64in128(Ame, 45);
172  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
173  Ce = _mm_xor_si128(Ce, Ege);
174  Asi = _mm_xor_si128(Asi, Di);
175  Bgu = ROL64in128(Asi, 61);
176  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
177  Ci = _mm_xor_si128(Ci, Egi);
178  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
179  Co = _mm_xor_si128(Co, Ego);
180  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
181  Cu = _mm_xor_si128(Cu, Egu);
182  Abe = _mm_xor_si128(Abe, De);
183  Bka = ROL64in128(Abe, 1);
184  Agi = _mm_xor_si128(Agi, Di);
185  Bke = ROL64in128(Agi, 6);
186  Ako = _mm_xor_si128(Ako, Do);
187  Bki = ROL64in128(Ako, 25);
188  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
189  Ca = _mm_xor_si128(Ca, Eka);
190  Amu = _mm_xor_si128(Amu, Du);
191  Bko = ROL64in128_8(Amu);
192  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
193  Ce = _mm_xor_si128(Ce, Eke);
194  Asa = _mm_xor_si128(Asa, Da);
195  Bku = ROL64in128(Asa, 18);
196  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
197  Ci = _mm_xor_si128(Ci, Eki);
198  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
199  Co = _mm_xor_si128(Co, Eko);
200  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
201  Cu = _mm_xor_si128(Cu, Eku);
202  Abu = _mm_xor_si128(Abu, Du);
203  Bma = ROL64in128(Abu, 27);
204  Aga = _mm_xor_si128(Aga, Da);
205  Bme = ROL64in128(Aga, 36);
206  Ake = _mm_xor_si128(Ake, De);
207  Bmi = ROL64in128(Ake, 10);
208  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
209  Ca = _mm_xor_si128(Ca, Ema);
210  Ami = _mm_xor_si128(Ami, Di);
211  Bmo = ROL64in128(Ami, 15);
212  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
213  Ce = _mm_xor_si128(Ce, Eme);
214  Aso = _mm_xor_si128(Aso, Do);
215  Bmu = ROL64in128_56(Aso);
216  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
217  Ci = _mm_xor_si128(Ci, Emi);
218  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
219  Co = _mm_xor_si128(Co, Emo);
220  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
221  Cu = _mm_xor_si128(Cu, Emu);
222  Abi = _mm_xor_si128(Abi, Di);
223  Bsa = ROL64in128(Abi, 62);
224  Ago = _mm_xor_si128(Ago, Do);
225  Bse = ROL64in128(Ago, 55);
226  Aku = _mm_xor_si128(Aku, Du);
227  Bsi = ROL64in128(Aku, 39);
228  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
229  Ca = _mm_xor_si128(Ca, Esa);
230  Ama = _mm_xor_si128(Ama, Da);
231  Bso = ROL64in128(Ama, 41);
232  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
233  Ce = _mm_xor_si128(Ce, Ese);
234  Ase = _mm_xor_si128(Ase, De);
235  Bsu = ROL64in128(Ase, 2);
236  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
237  Ci = _mm_xor_si128(Ci, Esi);
238  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
239  Co = _mm_xor_si128(Co, Eso);
240  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
241  Cu = _mm_xor_si128(Cu, Esu);
242  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
243  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
244  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
245  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
246  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
247  Eba = _mm_xor_si128(Eba, Da);
248  Bba = Eba;
249  Ege = _mm_xor_si128(Ege, De);
250  Bbe = ROL64in128(Ege, 44);
251  Eki = _mm_xor_si128(Eki, Di);
252  Bbi = ROL64in128(Eki, 43);
253  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
254  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[1]));
255  Ca = Aba;
256  Emo = _mm_xor_si128(Emo, Do);
257  Bbo = ROL64in128(Emo, 21);
258  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
259  Ce = Abe;
260  Esu = _mm_xor_si128(Esu, Du);
261  Bbu = ROL64in128(Esu, 14);
262  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
263  Ci = Abi;
264  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
265  Co = Abo;
266  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
267  Cu = Abu;
268  Ebo = _mm_xor_si128(Ebo, Do);
269  Bga = ROL64in128(Ebo, 28);
270  Egu = _mm_xor_si128(Egu, Du);
271  Bge = ROL64in128(Egu, 20);
272  Eka = _mm_xor_si128(Eka, Da);
273  Bgi = ROL64in128(Eka, 3);
274  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
275  Ca = _mm_xor_si128(Ca, Aga);
276  Eme = _mm_xor_si128(Eme, De);
277  Bgo = ROL64in128(Eme, 45);
278  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
279  Ce = _mm_xor_si128(Ce, Age);
280  Esi = _mm_xor_si128(Esi, Di);
281  Bgu = ROL64in128(Esi, 61);
282  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
283  Ci = _mm_xor_si128(Ci, Agi);
284  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
285  Co = _mm_xor_si128(Co, Ago);
286  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
287  Cu = _mm_xor_si128(Cu, Agu);
288  Ebe = _mm_xor_si128(Ebe, De);
289  Bka = ROL64in128(Ebe, 1);
290  Egi = _mm_xor_si128(Egi, Di);
291  Bke = ROL64in128(Egi, 6);
292  Eko = _mm_xor_si128(Eko, Do);
293  Bki = ROL64in128(Eko, 25);
294  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
295  Ca = _mm_xor_si128(Ca, Aka);
296  Emu = _mm_xor_si128(Emu, Du);
297  Bko = ROL64in128_8(Emu);
298  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
299  Ce = _mm_xor_si128(Ce, Ake);
300  Esa = _mm_xor_si128(Esa, Da);
301  Bku = ROL64in128(Esa, 18);
302  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
303  Ci = _mm_xor_si128(Ci, Aki);
304  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
305  Co = _mm_xor_si128(Co, Ako);
306  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
307  Cu = _mm_xor_si128(Cu, Aku);
308  Ebu = _mm_xor_si128(Ebu, Du);
309  Bma = ROL64in128(Ebu, 27);
310  Ega = _mm_xor_si128(Ega, Da);
311  Bme = ROL64in128(Ega, 36);
312  Eke = _mm_xor_si128(Eke, De);
313  Bmi = ROL64in128(Eke, 10);
314  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
315  Ca = _mm_xor_si128(Ca, Ama);
316  Emi = _mm_xor_si128(Emi, Di);
317  Bmo = ROL64in128(Emi, 15);
318  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
319  Ce = _mm_xor_si128(Ce, Ame);
320  Eso = _mm_xor_si128(Eso, Do);
321  Bmu = ROL64in128_56(Eso);
322  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
323  Ci = _mm_xor_si128(Ci, Ami);
324  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
325  Co = _mm_xor_si128(Co, Amo);
326  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
327  Cu = _mm_xor_si128(Cu, Amu);
328  Ebi = _mm_xor_si128(Ebi, Di);
329  Bsa = ROL64in128(Ebi, 62);
330  Ego = _mm_xor_si128(Ego, Do);
331  Bse = ROL64in128(Ego, 55);
332  Eku = _mm_xor_si128(Eku, Du);
333  Bsi = ROL64in128(Eku, 39);
334  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
335  Ca = _mm_xor_si128(Ca, Asa);
336  Ema = _mm_xor_si128(Ema, Da);
337  Bso = ROL64in128(Ema, 41);
338  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
339  Ce = _mm_xor_si128(Ce, Ase);
340  Ese = _mm_xor_si128(Ese, De);
341  Bsu = ROL64in128(Ese, 2);
342  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
343  Ci = _mm_xor_si128(Ci, Asi);
344  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
345  Co = _mm_xor_si128(Co, Aso);
346  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
347  Cu = _mm_xor_si128(Cu, Asu);
348  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
349  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
350  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
351  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
352  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
353  Aba = _mm_xor_si128(Aba, Da);
354  Bba = Aba;
355  Age = _mm_xor_si128(Age, De);
356  Bbe = ROL64in128(Age, 44);
357  Aki = _mm_xor_si128(Aki, Di);
358  Bbi = ROL64in128(Aki, 43);
359  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
360  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[2]));
361  Ca = Eba;
362  Amo = _mm_xor_si128(Amo, Do);
363  Bbo = ROL64in128(Amo, 21);
364  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
365  Ce = Ebe;
366  Asu = _mm_xor_si128(Asu, Du);
367  Bbu = ROL64in128(Asu, 14);
368  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
369  Ci = Ebi;
370  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
371  Co = Ebo;
372  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
373  Cu = Ebu;
374  Abo = _mm_xor_si128(Abo, Do);
375  Bga = ROL64in128(Abo, 28);
376  Agu = _mm_xor_si128(Agu, Du);
377  Bge = ROL64in128(Agu, 20);
378  Aka = _mm_xor_si128(Aka, Da);
379  Bgi = ROL64in128(Aka, 3);
380  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
381  Ca = _mm_xor_si128(Ca, Ega);
382  Ame = _mm_xor_si128(Ame, De);
383  Bgo = ROL64in128(Ame, 45);
384  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
385  Ce = _mm_xor_si128(Ce, Ege);
386  Asi = _mm_xor_si128(Asi, Di);
387  Bgu = ROL64in128(Asi, 61);
388  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
389  Ci = _mm_xor_si128(Ci, Egi);
390  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
391  Co = _mm_xor_si128(Co, Ego);
392  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
393  Cu = _mm_xor_si128(Cu, Egu);
394  Abe = _mm_xor_si128(Abe, De);
395  Bka = ROL64in128(Abe, 1);
396  Agi = _mm_xor_si128(Agi, Di);
397  Bke = ROL64in128(Agi, 6);
398  Ako = _mm_xor_si128(Ako, Do);
399  Bki = ROL64in128(Ako, 25);
400  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
401  Ca = _mm_xor_si128(Ca, Eka);
402  Amu = _mm_xor_si128(Amu, Du);
403  Bko = ROL64in128_8(Amu);
404  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
405  Ce = _mm_xor_si128(Ce, Eke);
406  Asa = _mm_xor_si128(Asa, Da);
407  Bku = ROL64in128(Asa, 18);
408  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
409  Ci = _mm_xor_si128(Ci, Eki);
410  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
411  Co = _mm_xor_si128(Co, Eko);
412  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
413  Cu = _mm_xor_si128(Cu, Eku);
414  Abu = _mm_xor_si128(Abu, Du);
415  Bma = ROL64in128(Abu, 27);
416  Aga = _mm_xor_si128(Aga, Da);
417  Bme = ROL64in128(Aga, 36);
418  Ake = _mm_xor_si128(Ake, De);
419  Bmi = ROL64in128(Ake, 10);
420  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
421  Ca = _mm_xor_si128(Ca, Ema);
422  Ami = _mm_xor_si128(Ami, Di);
423  Bmo = ROL64in128(Ami, 15);
424  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
425  Ce = _mm_xor_si128(Ce, Eme);
426  Aso = _mm_xor_si128(Aso, Do);
427  Bmu = ROL64in128_56(Aso);
428  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
429  Ci = _mm_xor_si128(Ci, Emi);
430  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
431  Co = _mm_xor_si128(Co, Emo);
432  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
433  Cu = _mm_xor_si128(Cu, Emu);
434  Abi = _mm_xor_si128(Abi, Di);
435  Bsa = ROL64in128(Abi, 62);
436  Ago = _mm_xor_si128(Ago, Do);
437  Bse = ROL64in128(Ago, 55);
438  Aku = _mm_xor_si128(Aku, Du);
439  Bsi = ROL64in128(Aku, 39);
440  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
441  Ca = _mm_xor_si128(Ca, Esa);
442  Ama = _mm_xor_si128(Ama, Da);
443  Bso = ROL64in128(Ama, 41);
444  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
445  Ce = _mm_xor_si128(Ce, Ese);
446  Ase = _mm_xor_si128(Ase, De);
447  Bsu = ROL64in128(Ase, 2);
448  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
449  Ci = _mm_xor_si128(Ci, Esi);
450  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
451  Co = _mm_xor_si128(Co, Eso);
452  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
453  Cu = _mm_xor_si128(Cu, Esu);
454  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
455  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
456  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
457  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
458  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
459  Eba = _mm_xor_si128(Eba, Da);
460  Bba = Eba;
461  Ege = _mm_xor_si128(Ege, De);
462  Bbe = ROL64in128(Ege, 44);
463  Eki = _mm_xor_si128(Eki, Di);
464  Bbi = ROL64in128(Eki, 43);
465  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
466  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[3]));
467  Ca = Aba;
468  Emo = _mm_xor_si128(Emo, Do);
469  Bbo = ROL64in128(Emo, 21);
470  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
471  Ce = Abe;
472  Esu = _mm_xor_si128(Esu, Du);
473  Bbu = ROL64in128(Esu, 14);
474  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
475  Ci = Abi;
476  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
477  Co = Abo;
478  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
479  Cu = Abu;
480  Ebo = _mm_xor_si128(Ebo, Do);
481  Bga = ROL64in128(Ebo, 28);
482  Egu = _mm_xor_si128(Egu, Du);
483  Bge = ROL64in128(Egu, 20);
484  Eka = _mm_xor_si128(Eka, Da);
485  Bgi = ROL64in128(Eka, 3);
486  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
487  Ca = _mm_xor_si128(Ca, Aga);
488  Eme = _mm_xor_si128(Eme, De);
489  Bgo = ROL64in128(Eme, 45);
490  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
491  Ce = _mm_xor_si128(Ce, Age);
492  Esi = _mm_xor_si128(Esi, Di);
493  Bgu = ROL64in128(Esi, 61);
494  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
495  Ci = _mm_xor_si128(Ci, Agi);
496  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
497  Co = _mm_xor_si128(Co, Ago);
498  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
499  Cu = _mm_xor_si128(Cu, Agu);
500  Ebe = _mm_xor_si128(Ebe, De);
501  Bka = ROL64in128(Ebe, 1);
502  Egi = _mm_xor_si128(Egi, Di);
503  Bke = ROL64in128(Egi, 6);
504  Eko = _mm_xor_si128(Eko, Do);
505  Bki = ROL64in128(Eko, 25);
506  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
507  Ca = _mm_xor_si128(Ca, Aka);
508  Emu = _mm_xor_si128(Emu, Du);
509  Bko = ROL64in128_8(Emu);
510  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
511  Ce = _mm_xor_si128(Ce, Ake);
512  Esa = _mm_xor_si128(Esa, Da);
513  Bku = ROL64in128(Esa, 18);
514  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
515  Ci = _mm_xor_si128(Ci, Aki);
516  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
517  Co = _mm_xor_si128(Co, Ako);
518  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
519  Cu = _mm_xor_si128(Cu, Aku);
520  Ebu = _mm_xor_si128(Ebu, Du);
521  Bma = ROL64in128(Ebu, 27);
522  Ega = _mm_xor_si128(Ega, Da);
523  Bme = ROL64in128(Ega, 36);
524  Eke = _mm_xor_si128(Eke, De);
525  Bmi = ROL64in128(Eke, 10);
526  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
527  Ca = _mm_xor_si128(Ca, Ama);
528  Emi = _mm_xor_si128(Emi, Di);
529  Bmo = ROL64in128(Emi, 15);
530  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
531  Ce = _mm_xor_si128(Ce, Ame);
532  Eso = _mm_xor_si128(Eso, Do);
533  Bmu = ROL64in128_56(Eso);
534  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
535  Ci = _mm_xor_si128(Ci, Ami);
536  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
537  Co = _mm_xor_si128(Co, Amo);
538  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
539  Cu = _mm_xor_si128(Cu, Amu);
540  Ebi = _mm_xor_si128(Ebi, Di);
541  Bsa = ROL64in128(Ebi, 62);
542  Ego = _mm_xor_si128(Ego, Do);
543  Bse = ROL64in128(Ego, 55);
544  Eku = _mm_xor_si128(Eku, Du);
545  Bsi = ROL64in128(Eku, 39);
546  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
547  Ca = _mm_xor_si128(Ca, Asa);
548  Ema = _mm_xor_si128(Ema, Da);
549  Bso = ROL64in128(Ema, 41);
550  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
551  Ce = _mm_xor_si128(Ce, Ase);
552  Ese = _mm_xor_si128(Ese, De);
553  Bsu = ROL64in128(Ese, 2);
554  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
555  Ci = _mm_xor_si128(Ci, Asi);
556  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
557  Co = _mm_xor_si128(Co, Aso);
558  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
559  Cu = _mm_xor_si128(Cu, Asu);
560  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
561  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
562  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
563  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
564  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
565  Aba = _mm_xor_si128(Aba, Da);
566  Bba = Aba;
567  Age = _mm_xor_si128(Age, De);
568  Bbe = ROL64in128(Age, 44);
569  Aki = _mm_xor_si128(Aki, Di);
570  Bbi = ROL64in128(Aki, 43);
571  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
572  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[4]));
573  Ca = Eba;
574  Amo = _mm_xor_si128(Amo, Do);
575  Bbo = ROL64in128(Amo, 21);
576  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
577  Ce = Ebe;
578  Asu = _mm_xor_si128(Asu, Du);
579  Bbu = ROL64in128(Asu, 14);
580  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
581  Ci = Ebi;
582  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
583  Co = Ebo;
584  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
585  Cu = Ebu;
586  Abo = _mm_xor_si128(Abo, Do);
587  Bga = ROL64in128(Abo, 28);
588  Agu = _mm_xor_si128(Agu, Du);
589  Bge = ROL64in128(Agu, 20);
590  Aka = _mm_xor_si128(Aka, Da);
591  Bgi = ROL64in128(Aka, 3);
592  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
593  Ca = _mm_xor_si128(Ca, Ega);
594  Ame = _mm_xor_si128(Ame, De);
595  Bgo = ROL64in128(Ame, 45);
596  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
597  Ce = _mm_xor_si128(Ce, Ege);
598  Asi = _mm_xor_si128(Asi, Di);
599  Bgu = ROL64in128(Asi, 61);
600  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
601  Ci = _mm_xor_si128(Ci, Egi);
602  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
603  Co = _mm_xor_si128(Co, Ego);
604  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
605  Cu = _mm_xor_si128(Cu, Egu);
606  Abe = _mm_xor_si128(Abe, De);
607  Bka = ROL64in128(Abe, 1);
608  Agi = _mm_xor_si128(Agi, Di);
609  Bke = ROL64in128(Agi, 6);
610  Ako = _mm_xor_si128(Ako, Do);
611  Bki = ROL64in128(Ako, 25);
612  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
613  Ca = _mm_xor_si128(Ca, Eka);
614  Amu = _mm_xor_si128(Amu, Du);
615  Bko = ROL64in128_8(Amu);
616  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
617  Ce = _mm_xor_si128(Ce, Eke);
618  Asa = _mm_xor_si128(Asa, Da);
619  Bku = ROL64in128(Asa, 18);
620  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
621  Ci = _mm_xor_si128(Ci, Eki);
622  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
623  Co = _mm_xor_si128(Co, Eko);
624  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
625  Cu = _mm_xor_si128(Cu, Eku);
626  Abu = _mm_xor_si128(Abu, Du);
627  Bma = ROL64in128(Abu, 27);
628  Aga = _mm_xor_si128(Aga, Da);
629  Bme = ROL64in128(Aga, 36);
630  Ake = _mm_xor_si128(Ake, De);
631  Bmi = ROL64in128(Ake, 10);
632  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
633  Ca = _mm_xor_si128(Ca, Ema);
634  Ami = _mm_xor_si128(Ami, Di);
635  Bmo = ROL64in128(Ami, 15);
636  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
637  Ce = _mm_xor_si128(Ce, Eme);
638  Aso = _mm_xor_si128(Aso, Do);
639  Bmu = ROL64in128_56(Aso);
640  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
641  Ci = _mm_xor_si128(Ci, Emi);
642  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
643  Co = _mm_xor_si128(Co, Emo);
644  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
645  Cu = _mm_xor_si128(Cu, Emu);
646  Abi = _mm_xor_si128(Abi, Di);
647  Bsa = ROL64in128(Abi, 62);
648  Ago = _mm_xor_si128(Ago, Do);
649  Bse = ROL64in128(Ago, 55);
650  Aku = _mm_xor_si128(Aku, Du);
651  Bsi = ROL64in128(Aku, 39);
652  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
653  Ca = _mm_xor_si128(Ca, Esa);
654  Ama = _mm_xor_si128(Ama, Da);
655  Bso = ROL64in128(Ama, 41);
656  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
657  Ce = _mm_xor_si128(Ce, Ese);
658  Ase = _mm_xor_si128(Ase, De);
659  Bsu = ROL64in128(Ase, 2);
660  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
661  Ci = _mm_xor_si128(Ci, Esi);
662  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
663  Co = _mm_xor_si128(Co, Eso);
664  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
665  Cu = _mm_xor_si128(Cu, Esu);
666  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
667  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
668  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
669  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
670  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
671  Eba = _mm_xor_si128(Eba, Da);
672  Bba = Eba;
673  Ege = _mm_xor_si128(Ege, De);
674  Bbe = ROL64in128(Ege, 44);
675  Eki = _mm_xor_si128(Eki, Di);
676  Bbi = ROL64in128(Eki, 43);
677  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
678  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[5]));
679  Ca = Aba;
680  Emo = _mm_xor_si128(Emo, Do);
681  Bbo = ROL64in128(Emo, 21);
682  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
683  Ce = Abe;
684  Esu = _mm_xor_si128(Esu, Du);
685  Bbu = ROL64in128(Esu, 14);
686  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
687  Ci = Abi;
688  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
689  Co = Abo;
690  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
691  Cu = Abu;
692  Ebo = _mm_xor_si128(Ebo, Do);
693  Bga = ROL64in128(Ebo, 28);
694  Egu = _mm_xor_si128(Egu, Du);
695  Bge = ROL64in128(Egu, 20);
696  Eka = _mm_xor_si128(Eka, Da);
697  Bgi = ROL64in128(Eka, 3);
698  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
699  Ca = _mm_xor_si128(Ca, Aga);
700  Eme = _mm_xor_si128(Eme, De);
701  Bgo = ROL64in128(Eme, 45);
702  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
703  Ce = _mm_xor_si128(Ce, Age);
704  Esi = _mm_xor_si128(Esi, Di);
705  Bgu = ROL64in128(Esi, 61);
706  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
707  Ci = _mm_xor_si128(Ci, Agi);
708  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
709  Co = _mm_xor_si128(Co, Ago);
710  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
711  Cu = _mm_xor_si128(Cu, Agu);
712  Ebe = _mm_xor_si128(Ebe, De);
713  Bka = ROL64in128(Ebe, 1);
714  Egi = _mm_xor_si128(Egi, Di);
715  Bke = ROL64in128(Egi, 6);
716  Eko = _mm_xor_si128(Eko, Do);
717  Bki = ROL64in128(Eko, 25);
718  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
719  Ca = _mm_xor_si128(Ca, Aka);
720  Emu = _mm_xor_si128(Emu, Du);
721  Bko = ROL64in128_8(Emu);
722  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
723  Ce = _mm_xor_si128(Ce, Ake);
724  Esa = _mm_xor_si128(Esa, Da);
725  Bku = ROL64in128(Esa, 18);
726  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
727  Ci = _mm_xor_si128(Ci, Aki);
728  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
729  Co = _mm_xor_si128(Co, Ako);
730  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
731  Cu = _mm_xor_si128(Cu, Aku);
732  Ebu = _mm_xor_si128(Ebu, Du);
733  Bma = ROL64in128(Ebu, 27);
734  Ega = _mm_xor_si128(Ega, Da);
735  Bme = ROL64in128(Ega, 36);
736  Eke = _mm_xor_si128(Eke, De);
737  Bmi = ROL64in128(Eke, 10);
738  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
739  Ca = _mm_xor_si128(Ca, Ama);
740  Emi = _mm_xor_si128(Emi, Di);
741  Bmo = ROL64in128(Emi, 15);
742  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
743  Ce = _mm_xor_si128(Ce, Ame);
744  Eso = _mm_xor_si128(Eso, Do);
745  Bmu = ROL64in128_56(Eso);
746  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
747  Ci = _mm_xor_si128(Ci, Ami);
748  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
749  Co = _mm_xor_si128(Co, Amo);
750  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
751  Cu = _mm_xor_si128(Cu, Amu);
752  Ebi = _mm_xor_si128(Ebi, Di);
753  Bsa = ROL64in128(Ebi, 62);
754  Ego = _mm_xor_si128(Ego, Do);
755  Bse = ROL64in128(Ego, 55);
756  Eku = _mm_xor_si128(Eku, Du);
757  Bsi = ROL64in128(Eku, 39);
758  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
759  Ca = _mm_xor_si128(Ca, Asa);
760  Ema = _mm_xor_si128(Ema, Da);
761  Bso = ROL64in128(Ema, 41);
762  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
763  Ce = _mm_xor_si128(Ce, Ase);
764  Ese = _mm_xor_si128(Ese, De);
765  Bsu = ROL64in128(Ese, 2);
766  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
767  Ci = _mm_xor_si128(Ci, Asi);
768  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
769  Co = _mm_xor_si128(Co, Aso);
770  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
771  Cu = _mm_xor_si128(Cu, Asu);
772  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
773  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
774  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
775  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
776  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
777  Aba = _mm_xor_si128(Aba, Da);
778  Bba = Aba;
779  Age = _mm_xor_si128(Age, De);
780  Bbe = ROL64in128(Age, 44);
781  Aki = _mm_xor_si128(Aki, Di);
782  Bbi = ROL64in128(Aki, 43);
783  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
784  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[6]));
785  Ca = Eba;
786  Amo = _mm_xor_si128(Amo, Do);
787  Bbo = ROL64in128(Amo, 21);
788  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
789  Ce = Ebe;
790  Asu = _mm_xor_si128(Asu, Du);
791  Bbu = ROL64in128(Asu, 14);
792  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
793  Ci = Ebi;
794  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
795  Co = Ebo;
796  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
797  Cu = Ebu;
798  Abo = _mm_xor_si128(Abo, Do);
799  Bga = ROL64in128(Abo, 28);
800  Agu = _mm_xor_si128(Agu, Du);
801  Bge = ROL64in128(Agu, 20);
802  Aka = _mm_xor_si128(Aka, Da);
803  Bgi = ROL64in128(Aka, 3);
804  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
805  Ca = _mm_xor_si128(Ca, Ega);
806  Ame = _mm_xor_si128(Ame, De);
807  Bgo = ROL64in128(Ame, 45);
808  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
809  Ce = _mm_xor_si128(Ce, Ege);
810  Asi = _mm_xor_si128(Asi, Di);
811  Bgu = ROL64in128(Asi, 61);
812  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
813  Ci = _mm_xor_si128(Ci, Egi);
814  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
815  Co = _mm_xor_si128(Co, Ego);
816  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
817  Cu = _mm_xor_si128(Cu, Egu);
818  Abe = _mm_xor_si128(Abe, De);
819  Bka = ROL64in128(Abe, 1);
820  Agi = _mm_xor_si128(Agi, Di);
821  Bke = ROL64in128(Agi, 6);
822  Ako = _mm_xor_si128(Ako, Do);
823  Bki = ROL64in128(Ako, 25);
824  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
825  Ca = _mm_xor_si128(Ca, Eka);
826  Amu = _mm_xor_si128(Amu, Du);
827  Bko = ROL64in128_8(Amu);
828  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
829  Ce = _mm_xor_si128(Ce, Eke);
830  Asa = _mm_xor_si128(Asa, Da);
831  Bku = ROL64in128(Asa, 18);
832  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
833  Ci = _mm_xor_si128(Ci, Eki);
834  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
835  Co = _mm_xor_si128(Co, Eko);
836  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
837  Cu = _mm_xor_si128(Cu, Eku);
838  Abu = _mm_xor_si128(Abu, Du);
839  Bma = ROL64in128(Abu, 27);
840  Aga = _mm_xor_si128(Aga, Da);
841  Bme = ROL64in128(Aga, 36);
842  Ake = _mm_xor_si128(Ake, De);
843  Bmi = ROL64in128(Ake, 10);
844  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
845  Ca = _mm_xor_si128(Ca, Ema);
846  Ami = _mm_xor_si128(Ami, Di);
847  Bmo = ROL64in128(Ami, 15);
848  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
849  Ce = _mm_xor_si128(Ce, Eme);
850  Aso = _mm_xor_si128(Aso, Do);
851  Bmu = ROL64in128_56(Aso);
852  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
853  Ci = _mm_xor_si128(Ci, Emi);
854  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
855  Co = _mm_xor_si128(Co, Emo);
856  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
857  Cu = _mm_xor_si128(Cu, Emu);
858  Abi = _mm_xor_si128(Abi, Di);
859  Bsa = ROL64in128(Abi, 62);
860  Ago = _mm_xor_si128(Ago, Do);
861  Bse = ROL64in128(Ago, 55);
862  Aku = _mm_xor_si128(Aku, Du);
863  Bsi = ROL64in128(Aku, 39);
864  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
865  Ca = _mm_xor_si128(Ca, Esa);
866  Ama = _mm_xor_si128(Ama, Da);
867  Bso = ROL64in128(Ama, 41);
868  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
869  Ce = _mm_xor_si128(Ce, Ese);
870  Ase = _mm_xor_si128(Ase, De);
871  Bsu = ROL64in128(Ase, 2);
872  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
873  Ci = _mm_xor_si128(Ci, Esi);
874  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
875  Co = _mm_xor_si128(Co, Eso);
876  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
877  Cu = _mm_xor_si128(Cu, Esu);
878  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
879  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
880  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
881  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
882  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
883  Eba = _mm_xor_si128(Eba, Da);
884  Bba = Eba;
885  Ege = _mm_xor_si128(Ege, De);
886  Bbe = ROL64in128(Ege, 44);
887  Eki = _mm_xor_si128(Eki, Di);
888  Bbi = ROL64in128(Eki, 43);
889  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
890  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[7]));
891  Ca = Aba;
892  Emo = _mm_xor_si128(Emo, Do);
893  Bbo = ROL64in128(Emo, 21);
894  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
895  Ce = Abe;
896  Esu = _mm_xor_si128(Esu, Du);
897  Bbu = ROL64in128(Esu, 14);
898  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
899  Ci = Abi;
900  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
901  Co = Abo;
902  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
903  Cu = Abu;
904  Ebo = _mm_xor_si128(Ebo, Do);
905  Bga = ROL64in128(Ebo, 28);
906  Egu = _mm_xor_si128(Egu, Du);
907  Bge = ROL64in128(Egu, 20);
908  Eka = _mm_xor_si128(Eka, Da);
909  Bgi = ROL64in128(Eka, 3);
910  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
911  Ca = _mm_xor_si128(Ca, Aga);
912  Eme = _mm_xor_si128(Eme, De);
913  Bgo = ROL64in128(Eme, 45);
914  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
915  Ce = _mm_xor_si128(Ce, Age);
916  Esi = _mm_xor_si128(Esi, Di);
917  Bgu = ROL64in128(Esi, 61);
918  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
919  Ci = _mm_xor_si128(Ci, Agi);
920  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
921  Co = _mm_xor_si128(Co, Ago);
922  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
923  Cu = _mm_xor_si128(Cu, Agu);
924  Ebe = _mm_xor_si128(Ebe, De);
925  Bka = ROL64in128(Ebe, 1);
926  Egi = _mm_xor_si128(Egi, Di);
927  Bke = ROL64in128(Egi, 6);
928  Eko = _mm_xor_si128(Eko, Do);
929  Bki = ROL64in128(Eko, 25);
930  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
931  Ca = _mm_xor_si128(Ca, Aka);
932  Emu = _mm_xor_si128(Emu, Du);
933  Bko = ROL64in128_8(Emu);
934  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
935  Ce = _mm_xor_si128(Ce, Ake);
936  Esa = _mm_xor_si128(Esa, Da);
937  Bku = ROL64in128(Esa, 18);
938  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
939  Ci = _mm_xor_si128(Ci, Aki);
940  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
941  Co = _mm_xor_si128(Co, Ako);
942  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
943  Cu = _mm_xor_si128(Cu, Aku);
944  Ebu = _mm_xor_si128(Ebu, Du);
945  Bma = ROL64in128(Ebu, 27);
946  Ega = _mm_xor_si128(Ega, Da);
947  Bme = ROL64in128(Ega, 36);
948  Eke = _mm_xor_si128(Eke, De);
949  Bmi = ROL64in128(Eke, 10);
950  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
951  Ca = _mm_xor_si128(Ca, Ama);
952  Emi = _mm_xor_si128(Emi, Di);
953  Bmo = ROL64in128(Emi, 15);
954  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
955  Ce = _mm_xor_si128(Ce, Ame);
956  Eso = _mm_xor_si128(Eso, Do);
957  Bmu = ROL64in128_56(Eso);
958  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
959  Ci = _mm_xor_si128(Ci, Ami);
960  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
961  Co = _mm_xor_si128(Co, Amo);
962  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
963  Cu = _mm_xor_si128(Cu, Amu);
964  Ebi = _mm_xor_si128(Ebi, Di);
965  Bsa = ROL64in128(Ebi, 62);
966  Ego = _mm_xor_si128(Ego, Do);
967  Bse = ROL64in128(Ego, 55);
968  Eku = _mm_xor_si128(Eku, Du);
969  Bsi = ROL64in128(Eku, 39);
970  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
971  Ca = _mm_xor_si128(Ca, Asa);
972  Ema = _mm_xor_si128(Ema, Da);
973  Bso = ROL64in128(Ema, 41);
974  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
975  Ce = _mm_xor_si128(Ce, Ase);
976  Ese = _mm_xor_si128(Ese, De);
977  Bsu = ROL64in128(Ese, 2);
978  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
979  Ci = _mm_xor_si128(Ci, Asi);
980  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
981  Co = _mm_xor_si128(Co, Aso);
982  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
983  Cu = _mm_xor_si128(Cu, Asu);
984  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
985  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
986  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
987  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
988  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
989  Aba = _mm_xor_si128(Aba, Da);
990  Bba = Aba;
991  Age = _mm_xor_si128(Age, De);
992  Bbe = ROL64in128(Age, 44);
993  Aki = _mm_xor_si128(Aki, Di);
994  Bbi = ROL64in128(Aki, 43);
995  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
996  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[8]));
997  Ca = Eba;
998  Amo = _mm_xor_si128(Amo, Do);
999  Bbo = ROL64in128(Amo, 21);
1000  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
1001  Ce = Ebe;
1002  Asu = _mm_xor_si128(Asu, Du);
1003  Bbu = ROL64in128(Asu, 14);
1004  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
1005  Ci = Ebi;
1006  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
1007  Co = Ebo;
1008  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
1009  Cu = Ebu;
1010  Abo = _mm_xor_si128(Abo, Do);
1011  Bga = ROL64in128(Abo, 28);
1012  Agu = _mm_xor_si128(Agu, Du);
1013  Bge = ROL64in128(Agu, 20);
1014  Aka = _mm_xor_si128(Aka, Da);
1015  Bgi = ROL64in128(Aka, 3);
1016  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
1017  Ca = _mm_xor_si128(Ca, Ega);
1018  Ame = _mm_xor_si128(Ame, De);
1019  Bgo = ROL64in128(Ame, 45);
1020  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
1021  Ce = _mm_xor_si128(Ce, Ege);
1022  Asi = _mm_xor_si128(Asi, Di);
1023  Bgu = ROL64in128(Asi, 61);
1024  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
1025  Ci = _mm_xor_si128(Ci, Egi);
1026  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
1027  Co = _mm_xor_si128(Co, Ego);
1028  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
1029  Cu = _mm_xor_si128(Cu, Egu);
1030  Abe = _mm_xor_si128(Abe, De);
1031  Bka = ROL64in128(Abe, 1);
1032  Agi = _mm_xor_si128(Agi, Di);
1033  Bke = ROL64in128(Agi, 6);
1034  Ako = _mm_xor_si128(Ako, Do);
1035  Bki = ROL64in128(Ako, 25);
1036  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
1037  Ca = _mm_xor_si128(Ca, Eka);
1038  Amu = _mm_xor_si128(Amu, Du);
1039  Bko = ROL64in128_8(Amu);
1040  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
1041  Ce = _mm_xor_si128(Ce, Eke);
1042  Asa = _mm_xor_si128(Asa, Da);
1043  Bku = ROL64in128(Asa, 18);
1044  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
1045  Ci = _mm_xor_si128(Ci, Eki);
1046  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
1047  Co = _mm_xor_si128(Co, Eko);
1048  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
1049  Cu = _mm_xor_si128(Cu, Eku);
1050  Abu = _mm_xor_si128(Abu, Du);
1051  Bma = ROL64in128(Abu, 27);
1052  Aga = _mm_xor_si128(Aga, Da);
1053  Bme = ROL64in128(Aga, 36);
1054  Ake = _mm_xor_si128(Ake, De);
1055  Bmi = ROL64in128(Ake, 10);
1056  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
1057  Ca = _mm_xor_si128(Ca, Ema);
1058  Ami = _mm_xor_si128(Ami, Di);
1059  Bmo = ROL64in128(Ami, 15);
1060  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
1061  Ce = _mm_xor_si128(Ce, Eme);
1062  Aso = _mm_xor_si128(Aso, Do);
1063  Bmu = ROL64in128_56(Aso);
1064  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
1065  Ci = _mm_xor_si128(Ci, Emi);
1066  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
1067  Co = _mm_xor_si128(Co, Emo);
1068  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
1069  Cu = _mm_xor_si128(Cu, Emu);
1070  Abi = _mm_xor_si128(Abi, Di);
1071  Bsa = ROL64in128(Abi, 62);
1072  Ago = _mm_xor_si128(Ago, Do);
1073  Bse = ROL64in128(Ago, 55);
1074  Aku = _mm_xor_si128(Aku, Du);
1075  Bsi = ROL64in128(Aku, 39);
1076  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
1077  Ca = _mm_xor_si128(Ca, Esa);
1078  Ama = _mm_xor_si128(Ama, Da);
1079  Bso = ROL64in128(Ama, 41);
1080  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
1081  Ce = _mm_xor_si128(Ce, Ese);
1082  Ase = _mm_xor_si128(Ase, De);
1083  Bsu = ROL64in128(Ase, 2);
1084  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
1085  Ci = _mm_xor_si128(Ci, Esi);
1086  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
1087  Co = _mm_xor_si128(Co, Eso);
1088  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
1089  Cu = _mm_xor_si128(Cu, Esu);
1090  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
1091  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
1092  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
1093  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
1094  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
1095  Eba = _mm_xor_si128(Eba, Da);
1096  Bba = Eba;
1097  Ege = _mm_xor_si128(Ege, De);
1098  Bbe = ROL64in128(Ege, 44);
1099  Eki = _mm_xor_si128(Eki, Di);
1100  Bbi = ROL64in128(Eki, 43);
1101  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
1102  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[9]));
1103  Ca = Aba;
1104  Emo = _mm_xor_si128(Emo, Do);
1105  Bbo = ROL64in128(Emo, 21);
1106  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
1107  Ce = Abe;
1108  Esu = _mm_xor_si128(Esu, Du);
1109  Bbu = ROL64in128(Esu, 14);
1110  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
1111  Ci = Abi;
1112  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
1113  Co = Abo;
1114  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
1115  Cu = Abu;
1116  Ebo = _mm_xor_si128(Ebo, Do);
1117  Bga = ROL64in128(Ebo, 28);
1118  Egu = _mm_xor_si128(Egu, Du);
1119  Bge = ROL64in128(Egu, 20);
1120  Eka = _mm_xor_si128(Eka, Da);
1121  Bgi = ROL64in128(Eka, 3);
1122  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
1123  Ca = _mm_xor_si128(Ca, Aga);
1124  Eme = _mm_xor_si128(Eme, De);
1125  Bgo = ROL64in128(Eme, 45);
1126  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
1127  Ce = _mm_xor_si128(Ce, Age);
1128  Esi = _mm_xor_si128(Esi, Di);
1129  Bgu = ROL64in128(Esi, 61);
1130  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
1131  Ci = _mm_xor_si128(Ci, Agi);
1132  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
1133  Co = _mm_xor_si128(Co, Ago);
1134  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
1135  Cu = _mm_xor_si128(Cu, Agu);
1136  Ebe = _mm_xor_si128(Ebe, De);
1137  Bka = ROL64in128(Ebe, 1);
1138  Egi = _mm_xor_si128(Egi, Di);
1139  Bke = ROL64in128(Egi, 6);
1140  Eko = _mm_xor_si128(Eko, Do);
1141  Bki = ROL64in128(Eko, 25);
1142  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
1143  Ca = _mm_xor_si128(Ca, Aka);
1144  Emu = _mm_xor_si128(Emu, Du);
1145  Bko = ROL64in128_8(Emu);
1146  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
1147  Ce = _mm_xor_si128(Ce, Ake);
1148  Esa = _mm_xor_si128(Esa, Da);
1149  Bku = ROL64in128(Esa, 18);
1150  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
1151  Ci = _mm_xor_si128(Ci, Aki);
1152  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
1153  Co = _mm_xor_si128(Co, Ako);
1154  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
1155  Cu = _mm_xor_si128(Cu, Aku);
1156  Ebu = _mm_xor_si128(Ebu, Du);
1157  Bma = ROL64in128(Ebu, 27);
1158  Ega = _mm_xor_si128(Ega, Da);
1159  Bme = ROL64in128(Ega, 36);
1160  Eke = _mm_xor_si128(Eke, De);
1161  Bmi = ROL64in128(Eke, 10);
1162  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
1163  Ca = _mm_xor_si128(Ca, Ama);
1164  Emi = _mm_xor_si128(Emi, Di);
1165  Bmo = ROL64in128(Emi, 15);
1166  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
1167  Ce = _mm_xor_si128(Ce, Ame);
1168  Eso = _mm_xor_si128(Eso, Do);
1169  Bmu = ROL64in128_56(Eso);
1170  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
1171  Ci = _mm_xor_si128(Ci, Ami);
1172  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
1173  Co = _mm_xor_si128(Co, Amo);
1174  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
1175  Cu = _mm_xor_si128(Cu, Amu);
1176  Ebi = _mm_xor_si128(Ebi, Di);
1177  Bsa = ROL64in128(Ebi, 62);
1178  Ego = _mm_xor_si128(Ego, Do);
1179  Bse = ROL64in128(Ego, 55);
1180  Eku = _mm_xor_si128(Eku, Du);
1181  Bsi = ROL64in128(Eku, 39);
1182  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
1183  Ca = _mm_xor_si128(Ca, Asa);
1184  Ema = _mm_xor_si128(Ema, Da);
1185  Bso = ROL64in128(Ema, 41);
1186  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
1187  Ce = _mm_xor_si128(Ce, Ase);
1188  Ese = _mm_xor_si128(Ese, De);
1189  Bsu = ROL64in128(Ese, 2);
1190  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
1191  Ci = _mm_xor_si128(Ci, Asi);
1192  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
1193  Co = _mm_xor_si128(Co, Aso);
1194  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
1195  Cu = _mm_xor_si128(Cu, Asu);
1196  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
1197  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
1198  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
1199  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
1200  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
1201  Aba = _mm_xor_si128(Aba, Da);
1202  Bba = Aba;
1203  Age = _mm_xor_si128(Age, De);
1204  Bbe = ROL64in128(Age, 44);
1205  Aki = _mm_xor_si128(Aki, Di);
1206  Bbi = ROL64in128(Aki, 43);
1207  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
1208  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[10]));
1209  Ca = Eba;
1210  Amo = _mm_xor_si128(Amo, Do);
1211  Bbo = ROL64in128(Amo, 21);
1212  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
1213  Ce = Ebe;
1214  Asu = _mm_xor_si128(Asu, Du);
1215  Bbu = ROL64in128(Asu, 14);
1216  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
1217  Ci = Ebi;
1218  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
1219  Co = Ebo;
1220  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
1221  Cu = Ebu;
1222  Abo = _mm_xor_si128(Abo, Do);
1223  Bga = ROL64in128(Abo, 28);
1224  Agu = _mm_xor_si128(Agu, Du);
1225  Bge = ROL64in128(Agu, 20);
1226  Aka = _mm_xor_si128(Aka, Da);
1227  Bgi = ROL64in128(Aka, 3);
1228  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
1229  Ca = _mm_xor_si128(Ca, Ega);
1230  Ame = _mm_xor_si128(Ame, De);
1231  Bgo = ROL64in128(Ame, 45);
1232  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
1233  Ce = _mm_xor_si128(Ce, Ege);
1234  Asi = _mm_xor_si128(Asi, Di);
1235  Bgu = ROL64in128(Asi, 61);
1236  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
1237  Ci = _mm_xor_si128(Ci, Egi);
1238  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
1239  Co = _mm_xor_si128(Co, Ego);
1240  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
1241  Cu = _mm_xor_si128(Cu, Egu);
1242  Abe = _mm_xor_si128(Abe, De);
1243  Bka = ROL64in128(Abe, 1);
1244  Agi = _mm_xor_si128(Agi, Di);
1245  Bke = ROL64in128(Agi, 6);
1246  Ako = _mm_xor_si128(Ako, Do);
1247  Bki = ROL64in128(Ako, 25);
1248  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
1249  Ca = _mm_xor_si128(Ca, Eka);
1250  Amu = _mm_xor_si128(Amu, Du);
1251  Bko = ROL64in128_8(Amu);
1252  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
1253  Ce = _mm_xor_si128(Ce, Eke);
1254  Asa = _mm_xor_si128(Asa, Da);
1255  Bku = ROL64in128(Asa, 18);
1256  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
1257  Ci = _mm_xor_si128(Ci, Eki);
1258  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
1259  Co = _mm_xor_si128(Co, Eko);
1260  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
1261  Cu = _mm_xor_si128(Cu, Eku);
1262  Abu = _mm_xor_si128(Abu, Du);
1263  Bma = ROL64in128(Abu, 27);
1264  Aga = _mm_xor_si128(Aga, Da);
1265  Bme = ROL64in128(Aga, 36);
1266  Ake = _mm_xor_si128(Ake, De);
1267  Bmi = ROL64in128(Ake, 10);
1268  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
1269  Ca = _mm_xor_si128(Ca, Ema);
1270  Ami = _mm_xor_si128(Ami, Di);
1271  Bmo = ROL64in128(Ami, 15);
1272  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
1273  Ce = _mm_xor_si128(Ce, Eme);
1274  Aso = _mm_xor_si128(Aso, Do);
1275  Bmu = ROL64in128_56(Aso);
1276  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
1277  Ci = _mm_xor_si128(Ci, Emi);
1278  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
1279  Co = _mm_xor_si128(Co, Emo);
1280  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
1281  Cu = _mm_xor_si128(Cu, Emu);
1282  Abi = _mm_xor_si128(Abi, Di);
1283  Bsa = ROL64in128(Abi, 62);
1284  Ago = _mm_xor_si128(Ago, Do);
1285  Bse = ROL64in128(Ago, 55);
1286  Aku = _mm_xor_si128(Aku, Du);
1287  Bsi = ROL64in128(Aku, 39);
1288  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
1289  Ca = _mm_xor_si128(Ca, Esa);
1290  Ama = _mm_xor_si128(Ama, Da);
1291  Bso = ROL64in128(Ama, 41);
1292  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
1293  Ce = _mm_xor_si128(Ce, Ese);
1294  Ase = _mm_xor_si128(Ase, De);
1295  Bsu = ROL64in128(Ase, 2);
1296  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
1297  Ci = _mm_xor_si128(Ci, Esi);
1298  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
1299  Co = _mm_xor_si128(Co, Eso);
1300  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
1301  Cu = _mm_xor_si128(Cu, Esu);
1302  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
1303  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
1304  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
1305  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
1306  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
1307  Eba = _mm_xor_si128(Eba, Da);
1308  Bba = Eba;
1309  Ege = _mm_xor_si128(Ege, De);
1310  Bbe = ROL64in128(Ege, 44);
1311  Eki = _mm_xor_si128(Eki, Di);
1312  Bbi = ROL64in128(Eki, 43);
1313  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
1314  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[11]));
1315  Ca = Aba;
1316  Emo = _mm_xor_si128(Emo, Do);
1317  Bbo = ROL64in128(Emo, 21);
1318  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
1319  Ce = Abe;
1320  Esu = _mm_xor_si128(Esu, Du);
1321  Bbu = ROL64in128(Esu, 14);
1322  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
1323  Ci = Abi;
1324  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
1325  Co = Abo;
1326  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
1327  Cu = Abu;
1328  Ebo = _mm_xor_si128(Ebo, Do);
1329  Bga = ROL64in128(Ebo, 28);
1330  Egu = _mm_xor_si128(Egu, Du);
1331  Bge = ROL64in128(Egu, 20);
1332  Eka = _mm_xor_si128(Eka, Da);
1333  Bgi = ROL64in128(Eka, 3);
1334  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
1335  Ca = _mm_xor_si128(Ca, Aga);
1336  Eme = _mm_xor_si128(Eme, De);
1337  Bgo = ROL64in128(Eme, 45);
1338  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
1339  Ce = _mm_xor_si128(Ce, Age);
1340  Esi = _mm_xor_si128(Esi, Di);
1341  Bgu = ROL64in128(Esi, 61);
1342  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
1343  Ci = _mm_xor_si128(Ci, Agi);
1344  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
1345  Co = _mm_xor_si128(Co, Ago);
1346  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
1347  Cu = _mm_xor_si128(Cu, Agu);
1348  Ebe = _mm_xor_si128(Ebe, De);
1349  Bka = ROL64in128(Ebe, 1);
1350  Egi = _mm_xor_si128(Egi, Di);
1351  Bke = ROL64in128(Egi, 6);
1352  Eko = _mm_xor_si128(Eko, Do);
1353  Bki = ROL64in128(Eko, 25);
1354  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
1355  Ca = _mm_xor_si128(Ca, Aka);
1356  Emu = _mm_xor_si128(Emu, Du);
1357  Bko = ROL64in128_8(Emu);
1358  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
1359  Ce = _mm_xor_si128(Ce, Ake);
1360  Esa = _mm_xor_si128(Esa, Da);
1361  Bku = ROL64in128(Esa, 18);
1362  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
1363  Ci = _mm_xor_si128(Ci, Aki);
1364  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
1365  Co = _mm_xor_si128(Co, Ako);
1366  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
1367  Cu = _mm_xor_si128(Cu, Aku);
1368  Ebu = _mm_xor_si128(Ebu, Du);
1369  Bma = ROL64in128(Ebu, 27);
1370  Ega = _mm_xor_si128(Ega, Da);
1371  Bme = ROL64in128(Ega, 36);
1372  Eke = _mm_xor_si128(Eke, De);
1373  Bmi = ROL64in128(Eke, 10);
1374  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
1375  Ca = _mm_xor_si128(Ca, Ama);
1376  Emi = _mm_xor_si128(Emi, Di);
1377  Bmo = ROL64in128(Emi, 15);
1378  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
1379  Ce = _mm_xor_si128(Ce, Ame);
1380  Eso = _mm_xor_si128(Eso, Do);
1381  Bmu = ROL64in128_56(Eso);
1382  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
1383  Ci = _mm_xor_si128(Ci, Ami);
1384  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
1385  Co = _mm_xor_si128(Co, Amo);
1386  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
1387  Cu = _mm_xor_si128(Cu, Amu);
1388  Ebi = _mm_xor_si128(Ebi, Di);
1389  Bsa = ROL64in128(Ebi, 62);
1390  Ego = _mm_xor_si128(Ego, Do);
1391  Bse = ROL64in128(Ego, 55);
1392  Eku = _mm_xor_si128(Eku, Du);
1393  Bsi = ROL64in128(Eku, 39);
1394  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
1395  Ca = _mm_xor_si128(Ca, Asa);
1396  Ema = _mm_xor_si128(Ema, Da);
1397  Bso = ROL64in128(Ema, 41);
1398  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
1399  Ce = _mm_xor_si128(Ce, Ase);
1400  Ese = _mm_xor_si128(Ese, De);
1401  Bsu = ROL64in128(Ese, 2);
1402  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
1403  Ci = _mm_xor_si128(Ci, Asi);
1404  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
1405  Co = _mm_xor_si128(Co, Aso);
1406  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
1407  Cu = _mm_xor_si128(Cu, Asu);
1408  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
1409  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
1410  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
1411  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
1412  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
1413  Aba = _mm_xor_si128(Aba, Da);
1414  Bba = Aba;
1415  Age = _mm_xor_si128(Age, De);
1416  Bbe = ROL64in128(Age, 44);
1417  Aki = _mm_xor_si128(Aki, Di);
1418  Bbi = ROL64in128(Aki, 43);
1419  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
1420  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[12]));
1421  Ca = Eba;
1422  Amo = _mm_xor_si128(Amo, Do);
1423  Bbo = ROL64in128(Amo, 21);
1424  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
1425  Ce = Ebe;
1426  Asu = _mm_xor_si128(Asu, Du);
1427  Bbu = ROL64in128(Asu, 14);
1428  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
1429  Ci = Ebi;
1430  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
1431  Co = Ebo;
1432  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
1433  Cu = Ebu;
1434  Abo = _mm_xor_si128(Abo, Do);
1435  Bga = ROL64in128(Abo, 28);
1436  Agu = _mm_xor_si128(Agu, Du);
1437  Bge = ROL64in128(Agu, 20);
1438  Aka = _mm_xor_si128(Aka, Da);
1439  Bgi = ROL64in128(Aka, 3);
1440  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
1441  Ca = _mm_xor_si128(Ca, Ega);
1442  Ame = _mm_xor_si128(Ame, De);
1443  Bgo = ROL64in128(Ame, 45);
1444  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
1445  Ce = _mm_xor_si128(Ce, Ege);
1446  Asi = _mm_xor_si128(Asi, Di);
1447  Bgu = ROL64in128(Asi, 61);
1448  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
1449  Ci = _mm_xor_si128(Ci, Egi);
1450  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
1451  Co = _mm_xor_si128(Co, Ego);
1452  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
1453  Cu = _mm_xor_si128(Cu, Egu);
1454  Abe = _mm_xor_si128(Abe, De);
1455  Bka = ROL64in128(Abe, 1);
1456  Agi = _mm_xor_si128(Agi, Di);
1457  Bke = ROL64in128(Agi, 6);
1458  Ako = _mm_xor_si128(Ako, Do);
1459  Bki = ROL64in128(Ako, 25);
1460  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
1461  Ca = _mm_xor_si128(Ca, Eka);
1462  Amu = _mm_xor_si128(Amu, Du);
1463  Bko = ROL64in128_8(Amu);
1464  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
1465  Ce = _mm_xor_si128(Ce, Eke);
1466  Asa = _mm_xor_si128(Asa, Da);
1467  Bku = ROL64in128(Asa, 18);
1468  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
1469  Ci = _mm_xor_si128(Ci, Eki);
1470  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
1471  Co = _mm_xor_si128(Co, Eko);
1472  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
1473  Cu = _mm_xor_si128(Cu, Eku);
1474  Abu = _mm_xor_si128(Abu, Du);
1475  Bma = ROL64in128(Abu, 27);
1476  Aga = _mm_xor_si128(Aga, Da);
1477  Bme = ROL64in128(Aga, 36);
1478  Ake = _mm_xor_si128(Ake, De);
1479  Bmi = ROL64in128(Ake, 10);
1480  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
1481  Ca = _mm_xor_si128(Ca, Ema);
1482  Ami = _mm_xor_si128(Ami, Di);
1483  Bmo = ROL64in128(Ami, 15);
1484  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
1485  Ce = _mm_xor_si128(Ce, Eme);
1486  Aso = _mm_xor_si128(Aso, Do);
1487  Bmu = ROL64in128_56(Aso);
1488  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
1489  Ci = _mm_xor_si128(Ci, Emi);
1490  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
1491  Co = _mm_xor_si128(Co, Emo);
1492  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
1493  Cu = _mm_xor_si128(Cu, Emu);
1494  Abi = _mm_xor_si128(Abi, Di);
1495  Bsa = ROL64in128(Abi, 62);
1496  Ago = _mm_xor_si128(Ago, Do);
1497  Bse = ROL64in128(Ago, 55);
1498  Aku = _mm_xor_si128(Aku, Du);
1499  Bsi = ROL64in128(Aku, 39);
1500  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
1501  Ca = _mm_xor_si128(Ca, Esa);
1502  Ama = _mm_xor_si128(Ama, Da);
1503  Bso = ROL64in128(Ama, 41);
1504  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
1505  Ce = _mm_xor_si128(Ce, Ese);
1506  Ase = _mm_xor_si128(Ase, De);
1507  Bsu = ROL64in128(Ase, 2);
1508  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
1509  Ci = _mm_xor_si128(Ci, Esi);
1510  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
1511  Co = _mm_xor_si128(Co, Eso);
1512  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
1513  Cu = _mm_xor_si128(Cu, Esu);
1514  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
1515  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
1516  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
1517  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
1518  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
1519  Eba = _mm_xor_si128(Eba, Da);
1520  Bba = Eba;
1521  Ege = _mm_xor_si128(Ege, De);
1522  Bbe = ROL64in128(Ege, 44);
1523  Eki = _mm_xor_si128(Eki, Di);
1524  Bbi = ROL64in128(Eki, 43);
1525  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
1526  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[13]));
1527  Ca = Aba;
1528  Emo = _mm_xor_si128(Emo, Do);
1529  Bbo = ROL64in128(Emo, 21);
1530  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
1531  Ce = Abe;
1532  Esu = _mm_xor_si128(Esu, Du);
1533  Bbu = ROL64in128(Esu, 14);
1534  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
1535  Ci = Abi;
1536  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
1537  Co = Abo;
1538  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
1539  Cu = Abu;
1540  Ebo = _mm_xor_si128(Ebo, Do);
1541  Bga = ROL64in128(Ebo, 28);
1542  Egu = _mm_xor_si128(Egu, Du);
1543  Bge = ROL64in128(Egu, 20);
1544  Eka = _mm_xor_si128(Eka, Da);
1545  Bgi = ROL64in128(Eka, 3);
1546  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
1547  Ca = _mm_xor_si128(Ca, Aga);
1548  Eme = _mm_xor_si128(Eme, De);
1549  Bgo = ROL64in128(Eme, 45);
1550  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
1551  Ce = _mm_xor_si128(Ce, Age);
1552  Esi = _mm_xor_si128(Esi, Di);
1553  Bgu = ROL64in128(Esi, 61);
1554  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
1555  Ci = _mm_xor_si128(Ci, Agi);
1556  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
1557  Co = _mm_xor_si128(Co, Ago);
1558  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
1559  Cu = _mm_xor_si128(Cu, Agu);
1560  Ebe = _mm_xor_si128(Ebe, De);
1561  Bka = ROL64in128(Ebe, 1);
1562  Egi = _mm_xor_si128(Egi, Di);
1563  Bke = ROL64in128(Egi, 6);
1564  Eko = _mm_xor_si128(Eko, Do);
1565  Bki = ROL64in128(Eko, 25);
1566  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
1567  Ca = _mm_xor_si128(Ca, Aka);
1568  Emu = _mm_xor_si128(Emu, Du);
1569  Bko = ROL64in128_8(Emu);
1570  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
1571  Ce = _mm_xor_si128(Ce, Ake);
1572  Esa = _mm_xor_si128(Esa, Da);
1573  Bku = ROL64in128(Esa, 18);
1574  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
1575  Ci = _mm_xor_si128(Ci, Aki);
1576  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
1577  Co = _mm_xor_si128(Co, Ako);
1578  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
1579  Cu = _mm_xor_si128(Cu, Aku);
1580  Ebu = _mm_xor_si128(Ebu, Du);
1581  Bma = ROL64in128(Ebu, 27);
1582  Ega = _mm_xor_si128(Ega, Da);
1583  Bme = ROL64in128(Ega, 36);
1584  Eke = _mm_xor_si128(Eke, De);
1585  Bmi = ROL64in128(Eke, 10);
1586  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
1587  Ca = _mm_xor_si128(Ca, Ama);
1588  Emi = _mm_xor_si128(Emi, Di);
1589  Bmo = ROL64in128(Emi, 15);
1590  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
1591  Ce = _mm_xor_si128(Ce, Ame);
1592  Eso = _mm_xor_si128(Eso, Do);
1593  Bmu = ROL64in128_56(Eso);
1594  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
1595  Ci = _mm_xor_si128(Ci, Ami);
1596  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
1597  Co = _mm_xor_si128(Co, Amo);
1598  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
1599  Cu = _mm_xor_si128(Cu, Amu);
1600  Ebi = _mm_xor_si128(Ebi, Di);
1601  Bsa = ROL64in128(Ebi, 62);
1602  Ego = _mm_xor_si128(Ego, Do);
1603  Bse = ROL64in128(Ego, 55);
1604  Eku = _mm_xor_si128(Eku, Du);
1605  Bsi = ROL64in128(Eku, 39);
1606  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
1607  Ca = _mm_xor_si128(Ca, Asa);
1608  Ema = _mm_xor_si128(Ema, Da);
1609  Bso = ROL64in128(Ema, 41);
1610  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
1611  Ce = _mm_xor_si128(Ce, Ase);
1612  Ese = _mm_xor_si128(Ese, De);
1613  Bsu = ROL64in128(Ese, 2);
1614  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
1615  Ci = _mm_xor_si128(Ci, Asi);
1616  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
1617  Co = _mm_xor_si128(Co, Aso);
1618  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
1619  Cu = _mm_xor_si128(Cu, Asu);
1620  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
1621  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
1622  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
1623  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
1624  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
1625  Aba = _mm_xor_si128(Aba, Da);
1626  Bba = Aba;
1627  Age = _mm_xor_si128(Age, De);
1628  Bbe = ROL64in128(Age, 44);
1629  Aki = _mm_xor_si128(Aki, Di);
1630  Bbi = ROL64in128(Aki, 43);
1631  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
1632  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[14]));
1633  Ca = Eba;
1634  Amo = _mm_xor_si128(Amo, Do);
1635  Bbo = ROL64in128(Amo, 21);
1636  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
1637  Ce = Ebe;
1638  Asu = _mm_xor_si128(Asu, Du);
1639  Bbu = ROL64in128(Asu, 14);
1640  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
1641  Ci = Ebi;
1642  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
1643  Co = Ebo;
1644  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
1645  Cu = Ebu;
1646  Abo = _mm_xor_si128(Abo, Do);
1647  Bga = ROL64in128(Abo, 28);
1648  Agu = _mm_xor_si128(Agu, Du);
1649  Bge = ROL64in128(Agu, 20);
1650  Aka = _mm_xor_si128(Aka, Da);
1651  Bgi = ROL64in128(Aka, 3);
1652  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
1653  Ca = _mm_xor_si128(Ca, Ega);
1654  Ame = _mm_xor_si128(Ame, De);
1655  Bgo = ROL64in128(Ame, 45);
1656  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
1657  Ce = _mm_xor_si128(Ce, Ege);
1658  Asi = _mm_xor_si128(Asi, Di);
1659  Bgu = ROL64in128(Asi, 61);
1660  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
1661  Ci = _mm_xor_si128(Ci, Egi);
1662  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
1663  Co = _mm_xor_si128(Co, Ego);
1664  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
1665  Cu = _mm_xor_si128(Cu, Egu);
1666  Abe = _mm_xor_si128(Abe, De);
1667  Bka = ROL64in128(Abe, 1);
1668  Agi = _mm_xor_si128(Agi, Di);
1669  Bke = ROL64in128(Agi, 6);
1670  Ako = _mm_xor_si128(Ako, Do);
1671  Bki = ROL64in128(Ako, 25);
1672  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
1673  Ca = _mm_xor_si128(Ca, Eka);
1674  Amu = _mm_xor_si128(Amu, Du);
1675  Bko = ROL64in128_8(Amu);
1676  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
1677  Ce = _mm_xor_si128(Ce, Eke);
1678  Asa = _mm_xor_si128(Asa, Da);
1679  Bku = ROL64in128(Asa, 18);
1680  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
1681  Ci = _mm_xor_si128(Ci, Eki);
1682  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
1683  Co = _mm_xor_si128(Co, Eko);
1684  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
1685  Cu = _mm_xor_si128(Cu, Eku);
1686  Abu = _mm_xor_si128(Abu, Du);
1687  Bma = ROL64in128(Abu, 27);
1688  Aga = _mm_xor_si128(Aga, Da);
1689  Bme = ROL64in128(Aga, 36);
1690  Ake = _mm_xor_si128(Ake, De);
1691  Bmi = ROL64in128(Ake, 10);
1692  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
1693  Ca = _mm_xor_si128(Ca, Ema);
1694  Ami = _mm_xor_si128(Ami, Di);
1695  Bmo = ROL64in128(Ami, 15);
1696  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
1697  Ce = _mm_xor_si128(Ce, Eme);
1698  Aso = _mm_xor_si128(Aso, Do);
1699  Bmu = ROL64in128_56(Aso);
1700  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
1701  Ci = _mm_xor_si128(Ci, Emi);
1702  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
1703  Co = _mm_xor_si128(Co, Emo);
1704  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
1705  Cu = _mm_xor_si128(Cu, Emu);
1706  Abi = _mm_xor_si128(Abi, Di);
1707  Bsa = ROL64in128(Abi, 62);
1708  Ago = _mm_xor_si128(Ago, Do);
1709  Bse = ROL64in128(Ago, 55);
1710  Aku = _mm_xor_si128(Aku, Du);
1711  Bsi = ROL64in128(Aku, 39);
1712  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
1713  Ca = _mm_xor_si128(Ca, Esa);
1714  Ama = _mm_xor_si128(Ama, Da);
1715  Bso = ROL64in128(Ama, 41);
1716  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
1717  Ce = _mm_xor_si128(Ce, Ese);
1718  Ase = _mm_xor_si128(Ase, De);
1719  Bsu = ROL64in128(Ase, 2);
1720  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
1721  Ci = _mm_xor_si128(Ci, Esi);
1722  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
1723  Co = _mm_xor_si128(Co, Eso);
1724  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
1725  Cu = _mm_xor_si128(Cu, Esu);
1726  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
1727  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
1728  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
1729  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
1730  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
1731  Eba = _mm_xor_si128(Eba, Da);
1732  Bba = Eba;
1733  Ege = _mm_xor_si128(Ege, De);
1734  Bbe = ROL64in128(Ege, 44);
1735  Eki = _mm_xor_si128(Eki, Di);
1736  Bbi = ROL64in128(Eki, 43);
1737  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
1738  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[15]));
1739  Ca = Aba;
1740  Emo = _mm_xor_si128(Emo, Do);
1741  Bbo = ROL64in128(Emo, 21);
1742  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
1743  Ce = Abe;
1744  Esu = _mm_xor_si128(Esu, Du);
1745  Bbu = ROL64in128(Esu, 14);
1746  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
1747  Ci = Abi;
1748  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
1749  Co = Abo;
1750  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
1751  Cu = Abu;
1752  Ebo = _mm_xor_si128(Ebo, Do);
1753  Bga = ROL64in128(Ebo, 28);
1754  Egu = _mm_xor_si128(Egu, Du);
1755  Bge = ROL64in128(Egu, 20);
1756  Eka = _mm_xor_si128(Eka, Da);
1757  Bgi = ROL64in128(Eka, 3);
1758  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
1759  Ca = _mm_xor_si128(Ca, Aga);
1760  Eme = _mm_xor_si128(Eme, De);
1761  Bgo = ROL64in128(Eme, 45);
1762  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
1763  Ce = _mm_xor_si128(Ce, Age);
1764  Esi = _mm_xor_si128(Esi, Di);
1765  Bgu = ROL64in128(Esi, 61);
1766  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
1767  Ci = _mm_xor_si128(Ci, Agi);
1768  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
1769  Co = _mm_xor_si128(Co, Ago);
1770  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
1771  Cu = _mm_xor_si128(Cu, Agu);
1772  Ebe = _mm_xor_si128(Ebe, De);
1773  Bka = ROL64in128(Ebe, 1);
1774  Egi = _mm_xor_si128(Egi, Di);
1775  Bke = ROL64in128(Egi, 6);
1776  Eko = _mm_xor_si128(Eko, Do);
1777  Bki = ROL64in128(Eko, 25);
1778  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
1779  Ca = _mm_xor_si128(Ca, Aka);
1780  Emu = _mm_xor_si128(Emu, Du);
1781  Bko = ROL64in128_8(Emu);
1782  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
1783  Ce = _mm_xor_si128(Ce, Ake);
1784  Esa = _mm_xor_si128(Esa, Da);
1785  Bku = ROL64in128(Esa, 18);
1786  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
1787  Ci = _mm_xor_si128(Ci, Aki);
1788  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
1789  Co = _mm_xor_si128(Co, Ako);
1790  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
1791  Cu = _mm_xor_si128(Cu, Aku);
1792  Ebu = _mm_xor_si128(Ebu, Du);
1793  Bma = ROL64in128(Ebu, 27);
1794  Ega = _mm_xor_si128(Ega, Da);
1795  Bme = ROL64in128(Ega, 36);
1796  Eke = _mm_xor_si128(Eke, De);
1797  Bmi = ROL64in128(Eke, 10);
1798  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
1799  Ca = _mm_xor_si128(Ca, Ama);
1800  Emi = _mm_xor_si128(Emi, Di);
1801  Bmo = ROL64in128(Emi, 15);
1802  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
1803  Ce = _mm_xor_si128(Ce, Ame);
1804  Eso = _mm_xor_si128(Eso, Do);
1805  Bmu = ROL64in128_56(Eso);
1806  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
1807  Ci = _mm_xor_si128(Ci, Ami);
1808  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
1809  Co = _mm_xor_si128(Co, Amo);
1810  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
1811  Cu = _mm_xor_si128(Cu, Amu);
1812  Ebi = _mm_xor_si128(Ebi, Di);
1813  Bsa = ROL64in128(Ebi, 62);
1814  Ego = _mm_xor_si128(Ego, Do);
1815  Bse = ROL64in128(Ego, 55);
1816  Eku = _mm_xor_si128(Eku, Du);
1817  Bsi = ROL64in128(Eku, 39);
1818  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
1819  Ca = _mm_xor_si128(Ca, Asa);
1820  Ema = _mm_xor_si128(Ema, Da);
1821  Bso = ROL64in128(Ema, 41);
1822  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
1823  Ce = _mm_xor_si128(Ce, Ase);
1824  Ese = _mm_xor_si128(Ese, De);
1825  Bsu = ROL64in128(Ese, 2);
1826  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
1827  Ci = _mm_xor_si128(Ci, Asi);
1828  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
1829  Co = _mm_xor_si128(Co, Aso);
1830  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
1831  Cu = _mm_xor_si128(Cu, Asu);
1832  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
1833  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
1834  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
1835  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
1836  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
1837  Aba = _mm_xor_si128(Aba, Da);
1838  Bba = Aba;
1839  Age = _mm_xor_si128(Age, De);
1840  Bbe = ROL64in128(Age, 44);
1841  Aki = _mm_xor_si128(Aki, Di);
1842  Bbi = ROL64in128(Aki, 43);
1843  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
1844  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[16]));
1845  Ca = Eba;
1846  Amo = _mm_xor_si128(Amo, Do);
1847  Bbo = ROL64in128(Amo, 21);
1848  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
1849  Ce = Ebe;
1850  Asu = _mm_xor_si128(Asu, Du);
1851  Bbu = ROL64in128(Asu, 14);
1852  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
1853  Ci = Ebi;
1854  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
1855  Co = Ebo;
1856  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
1857  Cu = Ebu;
1858  Abo = _mm_xor_si128(Abo, Do);
1859  Bga = ROL64in128(Abo, 28);
1860  Agu = _mm_xor_si128(Agu, Du);
1861  Bge = ROL64in128(Agu, 20);
1862  Aka = _mm_xor_si128(Aka, Da);
1863  Bgi = ROL64in128(Aka, 3);
1864  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
1865  Ca = _mm_xor_si128(Ca, Ega);
1866  Ame = _mm_xor_si128(Ame, De);
1867  Bgo = ROL64in128(Ame, 45);
1868  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
1869  Ce = _mm_xor_si128(Ce, Ege);
1870  Asi = _mm_xor_si128(Asi, Di);
1871  Bgu = ROL64in128(Asi, 61);
1872  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
1873  Ci = _mm_xor_si128(Ci, Egi);
1874  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
1875  Co = _mm_xor_si128(Co, Ego);
1876  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
1877  Cu = _mm_xor_si128(Cu, Egu);
1878  Abe = _mm_xor_si128(Abe, De);
1879  Bka = ROL64in128(Abe, 1);
1880  Agi = _mm_xor_si128(Agi, Di);
1881  Bke = ROL64in128(Agi, 6);
1882  Ako = _mm_xor_si128(Ako, Do);
1883  Bki = ROL64in128(Ako, 25);
1884  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
1885  Ca = _mm_xor_si128(Ca, Eka);
1886  Amu = _mm_xor_si128(Amu, Du);
1887  Bko = ROL64in128_8(Amu);
1888  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
1889  Ce = _mm_xor_si128(Ce, Eke);
1890  Asa = _mm_xor_si128(Asa, Da);
1891  Bku = ROL64in128(Asa, 18);
1892  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
1893  Ci = _mm_xor_si128(Ci, Eki);
1894  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
1895  Co = _mm_xor_si128(Co, Eko);
1896  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
1897  Cu = _mm_xor_si128(Cu, Eku);
1898  Abu = _mm_xor_si128(Abu, Du);
1899  Bma = ROL64in128(Abu, 27);
1900  Aga = _mm_xor_si128(Aga, Da);
1901  Bme = ROL64in128(Aga, 36);
1902  Ake = _mm_xor_si128(Ake, De);
1903  Bmi = ROL64in128(Ake, 10);
1904  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
1905  Ca = _mm_xor_si128(Ca, Ema);
1906  Ami = _mm_xor_si128(Ami, Di);
1907  Bmo = ROL64in128(Ami, 15);
1908  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
1909  Ce = _mm_xor_si128(Ce, Eme);
1910  Aso = _mm_xor_si128(Aso, Do);
1911  Bmu = ROL64in128_56(Aso);
1912  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
1913  Ci = _mm_xor_si128(Ci, Emi);
1914  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
1915  Co = _mm_xor_si128(Co, Emo);
1916  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
1917  Cu = _mm_xor_si128(Cu, Emu);
1918  Abi = _mm_xor_si128(Abi, Di);
1919  Bsa = ROL64in128(Abi, 62);
1920  Ago = _mm_xor_si128(Ago, Do);
1921  Bse = ROL64in128(Ago, 55);
1922  Aku = _mm_xor_si128(Aku, Du);
1923  Bsi = ROL64in128(Aku, 39);
1924  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
1925  Ca = _mm_xor_si128(Ca, Esa);
1926  Ama = _mm_xor_si128(Ama, Da);
1927  Bso = ROL64in128(Ama, 41);
1928  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
1929  Ce = _mm_xor_si128(Ce, Ese);
1930  Ase = _mm_xor_si128(Ase, De);
1931  Bsu = ROL64in128(Ase, 2);
1932  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
1933  Ci = _mm_xor_si128(Ci, Esi);
1934  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
1935  Co = _mm_xor_si128(Co, Eso);
1936  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
1937  Cu = _mm_xor_si128(Cu, Esu);
1938  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
1939  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
1940  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
1941  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
1942  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
1943  Eba = _mm_xor_si128(Eba, Da);
1944  Bba = Eba;
1945  Ege = _mm_xor_si128(Ege, De);
1946  Bbe = ROL64in128(Ege, 44);
1947  Eki = _mm_xor_si128(Eki, Di);
1948  Bbi = ROL64in128(Eki, 43);
1949  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
1950  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[17]));
1951  Ca = Aba;
1952  Emo = _mm_xor_si128(Emo, Do);
1953  Bbo = ROL64in128(Emo, 21);
1954  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
1955  Ce = Abe;
1956  Esu = _mm_xor_si128(Esu, Du);
1957  Bbu = ROL64in128(Esu, 14);
1958  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
1959  Ci = Abi;
1960  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
1961  Co = Abo;
1962  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
1963  Cu = Abu;
1964  Ebo = _mm_xor_si128(Ebo, Do);
1965  Bga = ROL64in128(Ebo, 28);
1966  Egu = _mm_xor_si128(Egu, Du);
1967  Bge = ROL64in128(Egu, 20);
1968  Eka = _mm_xor_si128(Eka, Da);
1969  Bgi = ROL64in128(Eka, 3);
1970  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
1971  Ca = _mm_xor_si128(Ca, Aga);
1972  Eme = _mm_xor_si128(Eme, De);
1973  Bgo = ROL64in128(Eme, 45);
1974  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
1975  Ce = _mm_xor_si128(Ce, Age);
1976  Esi = _mm_xor_si128(Esi, Di);
1977  Bgu = ROL64in128(Esi, 61);
1978  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
1979  Ci = _mm_xor_si128(Ci, Agi);
1980  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
1981  Co = _mm_xor_si128(Co, Ago);
1982  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
1983  Cu = _mm_xor_si128(Cu, Agu);
1984  Ebe = _mm_xor_si128(Ebe, De);
1985  Bka = ROL64in128(Ebe, 1);
1986  Egi = _mm_xor_si128(Egi, Di);
1987  Bke = ROL64in128(Egi, 6);
1988  Eko = _mm_xor_si128(Eko, Do);
1989  Bki = ROL64in128(Eko, 25);
1990  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
1991  Ca = _mm_xor_si128(Ca, Aka);
1992  Emu = _mm_xor_si128(Emu, Du);
1993  Bko = ROL64in128_8(Emu);
1994  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
1995  Ce = _mm_xor_si128(Ce, Ake);
1996  Esa = _mm_xor_si128(Esa, Da);
1997  Bku = ROL64in128(Esa, 18);
1998  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
1999  Ci = _mm_xor_si128(Ci, Aki);
2000  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
2001  Co = _mm_xor_si128(Co, Ako);
2002  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
2003  Cu = _mm_xor_si128(Cu, Aku);
2004  Ebu = _mm_xor_si128(Ebu, Du);
2005  Bma = ROL64in128(Ebu, 27);
2006  Ega = _mm_xor_si128(Ega, Da);
2007  Bme = ROL64in128(Ega, 36);
2008  Eke = _mm_xor_si128(Eke, De);
2009  Bmi = ROL64in128(Eke, 10);
2010  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
2011  Ca = _mm_xor_si128(Ca, Ama);
2012  Emi = _mm_xor_si128(Emi, Di);
2013  Bmo = ROL64in128(Emi, 15);
2014  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
2015  Ce = _mm_xor_si128(Ce, Ame);
2016  Eso = _mm_xor_si128(Eso, Do);
2017  Bmu = ROL64in128_56(Eso);
2018  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
2019  Ci = _mm_xor_si128(Ci, Ami);
2020  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
2021  Co = _mm_xor_si128(Co, Amo);
2022  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
2023  Cu = _mm_xor_si128(Cu, Amu);
2024  Ebi = _mm_xor_si128(Ebi, Di);
2025  Bsa = ROL64in128(Ebi, 62);
2026  Ego = _mm_xor_si128(Ego, Do);
2027  Bse = ROL64in128(Ego, 55);
2028  Eku = _mm_xor_si128(Eku, Du);
2029  Bsi = ROL64in128(Eku, 39);
2030  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
2031  Ca = _mm_xor_si128(Ca, Asa);
2032  Ema = _mm_xor_si128(Ema, Da);
2033  Bso = ROL64in128(Ema, 41);
2034  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
2035  Ce = _mm_xor_si128(Ce, Ase);
2036  Ese = _mm_xor_si128(Ese, De);
2037  Bsu = ROL64in128(Ese, 2);
2038  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
2039  Ci = _mm_xor_si128(Ci, Asi);
2040  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
2041  Co = _mm_xor_si128(Co, Aso);
2042  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
2043  Cu = _mm_xor_si128(Cu, Asu);
2044  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
2045  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
2046  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
2047  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
2048  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
2049  Aba = _mm_xor_si128(Aba, Da);
2050  Bba = Aba;
2051  Age = _mm_xor_si128(Age, De);
2052  Bbe = ROL64in128(Age, 44);
2053  Aki = _mm_xor_si128(Aki, Di);
2054  Bbi = ROL64in128(Aki, 43);
2055  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
2056  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[18]));
2057  Ca = Eba;
2058  Amo = _mm_xor_si128(Amo, Do);
2059  Bbo = ROL64in128(Amo, 21);
2060  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
2061  Ce = Ebe;
2062  Asu = _mm_xor_si128(Asu, Du);
2063  Bbu = ROL64in128(Asu, 14);
2064  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
2065  Ci = Ebi;
2066  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
2067  Co = Ebo;
2068  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
2069  Cu = Ebu;
2070  Abo = _mm_xor_si128(Abo, Do);
2071  Bga = ROL64in128(Abo, 28);
2072  Agu = _mm_xor_si128(Agu, Du);
2073  Bge = ROL64in128(Agu, 20);
2074  Aka = _mm_xor_si128(Aka, Da);
2075  Bgi = ROL64in128(Aka, 3);
2076  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
2077  Ca = _mm_xor_si128(Ca, Ega);
2078  Ame = _mm_xor_si128(Ame, De);
2079  Bgo = ROL64in128(Ame, 45);
2080  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
2081  Ce = _mm_xor_si128(Ce, Ege);
2082  Asi = _mm_xor_si128(Asi, Di);
2083  Bgu = ROL64in128(Asi, 61);
2084  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
2085  Ci = _mm_xor_si128(Ci, Egi);
2086  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
2087  Co = _mm_xor_si128(Co, Ego);
2088  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
2089  Cu = _mm_xor_si128(Cu, Egu);
2090  Abe = _mm_xor_si128(Abe, De);
2091  Bka = ROL64in128(Abe, 1);
2092  Agi = _mm_xor_si128(Agi, Di);
2093  Bke = ROL64in128(Agi, 6);
2094  Ako = _mm_xor_si128(Ako, Do);
2095  Bki = ROL64in128(Ako, 25);
2096  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
2097  Ca = _mm_xor_si128(Ca, Eka);
2098  Amu = _mm_xor_si128(Amu, Du);
2099  Bko = ROL64in128_8(Amu);
2100  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
2101  Ce = _mm_xor_si128(Ce, Eke);
2102  Asa = _mm_xor_si128(Asa, Da);
2103  Bku = ROL64in128(Asa, 18);
2104  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
2105  Ci = _mm_xor_si128(Ci, Eki);
2106  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
2107  Co = _mm_xor_si128(Co, Eko);
2108  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
2109  Cu = _mm_xor_si128(Cu, Eku);
2110  Abu = _mm_xor_si128(Abu, Du);
2111  Bma = ROL64in128(Abu, 27);
2112  Aga = _mm_xor_si128(Aga, Da);
2113  Bme = ROL64in128(Aga, 36);
2114  Ake = _mm_xor_si128(Ake, De);
2115  Bmi = ROL64in128(Ake, 10);
2116  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
2117  Ca = _mm_xor_si128(Ca, Ema);
2118  Ami = _mm_xor_si128(Ami, Di);
2119  Bmo = ROL64in128(Ami, 15);
2120  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
2121  Ce = _mm_xor_si128(Ce, Eme);
2122  Aso = _mm_xor_si128(Aso, Do);
2123  Bmu = ROL64in128_56(Aso);
2124  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
2125  Ci = _mm_xor_si128(Ci, Emi);
2126  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
2127  Co = _mm_xor_si128(Co, Emo);
2128  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
2129  Cu = _mm_xor_si128(Cu, Emu);
2130  Abi = _mm_xor_si128(Abi, Di);
2131  Bsa = ROL64in128(Abi, 62);
2132  Ago = _mm_xor_si128(Ago, Do);
2133  Bse = ROL64in128(Ago, 55);
2134  Aku = _mm_xor_si128(Aku, Du);
2135  Bsi = ROL64in128(Aku, 39);
2136  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
2137  Ca = _mm_xor_si128(Ca, Esa);
2138  Ama = _mm_xor_si128(Ama, Da);
2139  Bso = ROL64in128(Ama, 41);
2140  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
2141  Ce = _mm_xor_si128(Ce, Ese);
2142  Ase = _mm_xor_si128(Ase, De);
2143  Bsu = ROL64in128(Ase, 2);
2144  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
2145  Ci = _mm_xor_si128(Ci, Esi);
2146  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
2147  Co = _mm_xor_si128(Co, Eso);
2148  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
2149  Cu = _mm_xor_si128(Cu, Esu);
2150  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
2151  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
2152  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
2153  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
2154  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
2155  Eba = _mm_xor_si128(Eba, Da);
2156  Bba = Eba;
2157  Ege = _mm_xor_si128(Ege, De);
2158  Bbe = ROL64in128(Ege, 44);
2159  Eki = _mm_xor_si128(Eki, Di);
2160  Bbi = ROL64in128(Eki, 43);
2161  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
2162  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[19]));
2163  Ca = Aba;
2164  Emo = _mm_xor_si128(Emo, Do);
2165  Bbo = ROL64in128(Emo, 21);
2166  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
2167  Ce = Abe;
2168  Esu = _mm_xor_si128(Esu, Du);
2169  Bbu = ROL64in128(Esu, 14);
2170  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
2171  Ci = Abi;
2172  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
2173  Co = Abo;
2174  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
2175  Cu = Abu;
2176  Ebo = _mm_xor_si128(Ebo, Do);
2177  Bga = ROL64in128(Ebo, 28);
2178  Egu = _mm_xor_si128(Egu, Du);
2179  Bge = ROL64in128(Egu, 20);
2180  Eka = _mm_xor_si128(Eka, Da);
2181  Bgi = ROL64in128(Eka, 3);
2182  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
2183  Ca = _mm_xor_si128(Ca, Aga);
2184  Eme = _mm_xor_si128(Eme, De);
2185  Bgo = ROL64in128(Eme, 45);
2186  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
2187  Ce = _mm_xor_si128(Ce, Age);
2188  Esi = _mm_xor_si128(Esi, Di);
2189  Bgu = ROL64in128(Esi, 61);
2190  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
2191  Ci = _mm_xor_si128(Ci, Agi);
2192  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
2193  Co = _mm_xor_si128(Co, Ago);
2194  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
2195  Cu = _mm_xor_si128(Cu, Agu);
2196  Ebe = _mm_xor_si128(Ebe, De);
2197  Bka = ROL64in128(Ebe, 1);
2198  Egi = _mm_xor_si128(Egi, Di);
2199  Bke = ROL64in128(Egi, 6);
2200  Eko = _mm_xor_si128(Eko, Do);
2201  Bki = ROL64in128(Eko, 25);
2202  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
2203  Ca = _mm_xor_si128(Ca, Aka);
2204  Emu = _mm_xor_si128(Emu, Du);
2205  Bko = ROL64in128_8(Emu);
2206  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
2207  Ce = _mm_xor_si128(Ce, Ake);
2208  Esa = _mm_xor_si128(Esa, Da);
2209  Bku = ROL64in128(Esa, 18);
2210  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
2211  Ci = _mm_xor_si128(Ci, Aki);
2212  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
2213  Co = _mm_xor_si128(Co, Ako);
2214  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
2215  Cu = _mm_xor_si128(Cu, Aku);
2216  Ebu = _mm_xor_si128(Ebu, Du);
2217  Bma = ROL64in128(Ebu, 27);
2218  Ega = _mm_xor_si128(Ega, Da);
2219  Bme = ROL64in128(Ega, 36);
2220  Eke = _mm_xor_si128(Eke, De);
2221  Bmi = ROL64in128(Eke, 10);
2222  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
2223  Ca = _mm_xor_si128(Ca, Ama);
2224  Emi = _mm_xor_si128(Emi, Di);
2225  Bmo = ROL64in128(Emi, 15);
2226  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
2227  Ce = _mm_xor_si128(Ce, Ame);
2228  Eso = _mm_xor_si128(Eso, Do);
2229  Bmu = ROL64in128_56(Eso);
2230  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
2231  Ci = _mm_xor_si128(Ci, Ami);
2232  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
2233  Co = _mm_xor_si128(Co, Amo);
2234  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
2235  Cu = _mm_xor_si128(Cu, Amu);
2236  Ebi = _mm_xor_si128(Ebi, Di);
2237  Bsa = ROL64in128(Ebi, 62);
2238  Ego = _mm_xor_si128(Ego, Do);
2239  Bse = ROL64in128(Ego, 55);
2240  Eku = _mm_xor_si128(Eku, Du);
2241  Bsi = ROL64in128(Eku, 39);
2242  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
2243  Ca = _mm_xor_si128(Ca, Asa);
2244  Ema = _mm_xor_si128(Ema, Da);
2245  Bso = ROL64in128(Ema, 41);
2246  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
2247  Ce = _mm_xor_si128(Ce, Ase);
2248  Ese = _mm_xor_si128(Ese, De);
2249  Bsu = ROL64in128(Ese, 2);
2250  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
2251  Ci = _mm_xor_si128(Ci, Asi);
2252  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
2253  Co = _mm_xor_si128(Co, Aso);
2254  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
2255  Cu = _mm_xor_si128(Cu, Asu);
2256  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
2257  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
2258  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
2259  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
2260  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
2261  Aba = _mm_xor_si128(Aba, Da);
2262  Bba = Aba;
2263  Age = _mm_xor_si128(Age, De);
2264  Bbe = ROL64in128(Age, 44);
2265  Aki = _mm_xor_si128(Aki, Di);
2266  Bbi = ROL64in128(Aki, 43);
2267  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
2268  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[20]));
2269  Ca = Eba;
2270  Amo = _mm_xor_si128(Amo, Do);
2271  Bbo = ROL64in128(Amo, 21);
2272  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
2273  Ce = Ebe;
2274  Asu = _mm_xor_si128(Asu, Du);
2275  Bbu = ROL64in128(Asu, 14);
2276  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
2277  Ci = Ebi;
2278  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
2279  Co = Ebo;
2280  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
2281  Cu = Ebu;
2282  Abo = _mm_xor_si128(Abo, Do);
2283  Bga = ROL64in128(Abo, 28);
2284  Agu = _mm_xor_si128(Agu, Du);
2285  Bge = ROL64in128(Agu, 20);
2286  Aka = _mm_xor_si128(Aka, Da);
2287  Bgi = ROL64in128(Aka, 3);
2288  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
2289  Ca = _mm_xor_si128(Ca, Ega);
2290  Ame = _mm_xor_si128(Ame, De);
2291  Bgo = ROL64in128(Ame, 45);
2292  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
2293  Ce = _mm_xor_si128(Ce, Ege);
2294  Asi = _mm_xor_si128(Asi, Di);
2295  Bgu = ROL64in128(Asi, 61);
2296  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
2297  Ci = _mm_xor_si128(Ci, Egi);
2298  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
2299  Co = _mm_xor_si128(Co, Ego);
2300  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
2301  Cu = _mm_xor_si128(Cu, Egu);
2302  Abe = _mm_xor_si128(Abe, De);
2303  Bka = ROL64in128(Abe, 1);
2304  Agi = _mm_xor_si128(Agi, Di);
2305  Bke = ROL64in128(Agi, 6);
2306  Ako = _mm_xor_si128(Ako, Do);
2307  Bki = ROL64in128(Ako, 25);
2308  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
2309  Ca = _mm_xor_si128(Ca, Eka);
2310  Amu = _mm_xor_si128(Amu, Du);
2311  Bko = ROL64in128_8(Amu);
2312  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
2313  Ce = _mm_xor_si128(Ce, Eke);
2314  Asa = _mm_xor_si128(Asa, Da);
2315  Bku = ROL64in128(Asa, 18);
2316  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
2317  Ci = _mm_xor_si128(Ci, Eki);
2318  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
2319  Co = _mm_xor_si128(Co, Eko);
2320  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
2321  Cu = _mm_xor_si128(Cu, Eku);
2322  Abu = _mm_xor_si128(Abu, Du);
2323  Bma = ROL64in128(Abu, 27);
2324  Aga = _mm_xor_si128(Aga, Da);
2325  Bme = ROL64in128(Aga, 36);
2326  Ake = _mm_xor_si128(Ake, De);
2327  Bmi = ROL64in128(Ake, 10);
2328  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
2329  Ca = _mm_xor_si128(Ca, Ema);
2330  Ami = _mm_xor_si128(Ami, Di);
2331  Bmo = ROL64in128(Ami, 15);
2332  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
2333  Ce = _mm_xor_si128(Ce, Eme);
2334  Aso = _mm_xor_si128(Aso, Do);
2335  Bmu = ROL64in128_56(Aso);
2336  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
2337  Ci = _mm_xor_si128(Ci, Emi);
2338  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
2339  Co = _mm_xor_si128(Co, Emo);
2340  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
2341  Cu = _mm_xor_si128(Cu, Emu);
2342  Abi = _mm_xor_si128(Abi, Di);
2343  Bsa = ROL64in128(Abi, 62);
2344  Ago = _mm_xor_si128(Ago, Do);
2345  Bse = ROL64in128(Ago, 55);
2346  Aku = _mm_xor_si128(Aku, Du);
2347  Bsi = ROL64in128(Aku, 39);
2348  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
2349  Ca = _mm_xor_si128(Ca, Esa);
2350  Ama = _mm_xor_si128(Ama, Da);
2351  Bso = ROL64in128(Ama, 41);
2352  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
2353  Ce = _mm_xor_si128(Ce, Ese);
2354  Ase = _mm_xor_si128(Ase, De);
2355  Bsu = ROL64in128(Ase, 2);
2356  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
2357  Ci = _mm_xor_si128(Ci, Esi);
2358  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
2359  Co = _mm_xor_si128(Co, Eso);
2360  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
2361  Cu = _mm_xor_si128(Cu, Esu);
2362  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
2363  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
2364  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
2365  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
2366  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
2367  Eba = _mm_xor_si128(Eba, Da);
2368  Bba = Eba;
2369  Ege = _mm_xor_si128(Ege, De);
2370  Bbe = ROL64in128(Ege, 44);
2371  Eki = _mm_xor_si128(Eki, Di);
2372  Bbi = ROL64in128(Eki, 43);
2373  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
2374  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[21]));
2375  Ca = Aba;
2376  Emo = _mm_xor_si128(Emo, Do);
2377  Bbo = ROL64in128(Emo, 21);
2378  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
2379  Ce = Abe;
2380  Esu = _mm_xor_si128(Esu, Du);
2381  Bbu = ROL64in128(Esu, 14);
2382  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
2383  Ci = Abi;
2384  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
2385  Co = Abo;
2386  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
2387  Cu = Abu;
2388  Ebo = _mm_xor_si128(Ebo, Do);
2389  Bga = ROL64in128(Ebo, 28);
2390  Egu = _mm_xor_si128(Egu, Du);
2391  Bge = ROL64in128(Egu, 20);
2392  Eka = _mm_xor_si128(Eka, Da);
2393  Bgi = ROL64in128(Eka, 3);
2394  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
2395  Ca = _mm_xor_si128(Ca, Aga);
2396  Eme = _mm_xor_si128(Eme, De);
2397  Bgo = ROL64in128(Eme, 45);
2398  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
2399  Ce = _mm_xor_si128(Ce, Age);
2400  Esi = _mm_xor_si128(Esi, Di);
2401  Bgu = ROL64in128(Esi, 61);
2402  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
2403  Ci = _mm_xor_si128(Ci, Agi);
2404  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
2405  Co = _mm_xor_si128(Co, Ago);
2406  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
2407  Cu = _mm_xor_si128(Cu, Agu);
2408  Ebe = _mm_xor_si128(Ebe, De);
2409  Bka = ROL64in128(Ebe, 1);
2410  Egi = _mm_xor_si128(Egi, Di);
2411  Bke = ROL64in128(Egi, 6);
2412  Eko = _mm_xor_si128(Eko, Do);
2413  Bki = ROL64in128(Eko, 25);
2414  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
2415  Ca = _mm_xor_si128(Ca, Aka);
2416  Emu = _mm_xor_si128(Emu, Du);
2417  Bko = ROL64in128_8(Emu);
2418  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
2419  Ce = _mm_xor_si128(Ce, Ake);
2420  Esa = _mm_xor_si128(Esa, Da);
2421  Bku = ROL64in128(Esa, 18);
2422  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
2423  Ci = _mm_xor_si128(Ci, Aki);
2424  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
2425  Co = _mm_xor_si128(Co, Ako);
2426  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
2427  Cu = _mm_xor_si128(Cu, Aku);
2428  Ebu = _mm_xor_si128(Ebu, Du);
2429  Bma = ROL64in128(Ebu, 27);
2430  Ega = _mm_xor_si128(Ega, Da);
2431  Bme = ROL64in128(Ega, 36);
2432  Eke = _mm_xor_si128(Eke, De);
2433  Bmi = ROL64in128(Eke, 10);
2434  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
2435  Ca = _mm_xor_si128(Ca, Ama);
2436  Emi = _mm_xor_si128(Emi, Di);
2437  Bmo = ROL64in128(Emi, 15);
2438  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
2439  Ce = _mm_xor_si128(Ce, Ame);
2440  Eso = _mm_xor_si128(Eso, Do);
2441  Bmu = ROL64in128_56(Eso);
2442  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
2443  Ci = _mm_xor_si128(Ci, Ami);
2444  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
2445  Co = _mm_xor_si128(Co, Amo);
2446  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
2447  Cu = _mm_xor_si128(Cu, Amu);
2448  Ebi = _mm_xor_si128(Ebi, Di);
2449  Bsa = ROL64in128(Ebi, 62);
2450  Ego = _mm_xor_si128(Ego, Do);
2451  Bse = ROL64in128(Ego, 55);
2452  Eku = _mm_xor_si128(Eku, Du);
2453  Bsi = ROL64in128(Eku, 39);
2454  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
2455  Ca = _mm_xor_si128(Ca, Asa);
2456  Ema = _mm_xor_si128(Ema, Da);
2457  Bso = ROL64in128(Ema, 41);
2458  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
2459  Ce = _mm_xor_si128(Ce, Ase);
2460  Ese = _mm_xor_si128(Ese, De);
2461  Bsu = ROL64in128(Ese, 2);
2462  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
2463  Ci = _mm_xor_si128(Ci, Asi);
2464  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
2465  Co = _mm_xor_si128(Co, Aso);
2466  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
2467  Cu = _mm_xor_si128(Cu, Asu);
2468  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
2469  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
2470  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
2471  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
2472  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
2473  Aba = _mm_xor_si128(Aba, Da);
2474  Bba = Aba;
2475  Age = _mm_xor_si128(Age, De);
2476  Bbe = ROL64in128(Age, 44);
2477  Aki = _mm_xor_si128(Aki, Di);
2478  Bbi = ROL64in128(Aki, 43);
2479  Eba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
2480  Eba = _mm_xor_si128(Eba, SPLAT64(KeccakF1600Constants[22]));
2481  Ca = Eba;
2482  Amo = _mm_xor_si128(Amo, Do);
2483  Bbo = ROL64in128(Amo, 21);
2484  Ebe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
2485  Ce = Ebe;
2486  Asu = _mm_xor_si128(Asu, Du);
2487  Bbu = ROL64in128(Asu, 14);
2488  Ebi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
2489  Ci = Ebi;
2490  Ebo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
2491  Co = Ebo;
2492  Ebu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
2493  Cu = Ebu;
2494  Abo = _mm_xor_si128(Abo, Do);
2495  Bga = ROL64in128(Abo, 28);
2496  Agu = _mm_xor_si128(Agu, Du);
2497  Bge = ROL64in128(Agu, 20);
2498  Aka = _mm_xor_si128(Aka, Da);
2499  Bgi = ROL64in128(Aka, 3);
2500  Ega = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
2501  Ca = _mm_xor_si128(Ca, Ega);
2502  Ame = _mm_xor_si128(Ame, De);
2503  Bgo = ROL64in128(Ame, 45);
2504  Ege = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
2505  Ce = _mm_xor_si128(Ce, Ege);
2506  Asi = _mm_xor_si128(Asi, Di);
2507  Bgu = ROL64in128(Asi, 61);
2508  Egi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
2509  Ci = _mm_xor_si128(Ci, Egi);
2510  Ego = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
2511  Co = _mm_xor_si128(Co, Ego);
2512  Egu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
2513  Cu = _mm_xor_si128(Cu, Egu);
2514  Abe = _mm_xor_si128(Abe, De);
2515  Bka = ROL64in128(Abe, 1);
2516  Agi = _mm_xor_si128(Agi, Di);
2517  Bke = ROL64in128(Agi, 6);
2518  Ako = _mm_xor_si128(Ako, Do);
2519  Bki = ROL64in128(Ako, 25);
2520  Eka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
2521  Ca = _mm_xor_si128(Ca, Eka);
2522  Amu = _mm_xor_si128(Amu, Du);
2523  Bko = ROL64in128_8(Amu);
2524  Eke = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
2525  Ce = _mm_xor_si128(Ce, Eke);
2526  Asa = _mm_xor_si128(Asa, Da);
2527  Bku = ROL64in128(Asa, 18);
2528  Eki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
2529  Ci = _mm_xor_si128(Ci, Eki);
2530  Eko = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
2531  Co = _mm_xor_si128(Co, Eko);
2532  Eku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
2533  Cu = _mm_xor_si128(Cu, Eku);
2534  Abu = _mm_xor_si128(Abu, Du);
2535  Bma = ROL64in128(Abu, 27);
2536  Aga = _mm_xor_si128(Aga, Da);
2537  Bme = ROL64in128(Aga, 36);
2538  Ake = _mm_xor_si128(Ake, De);
2539  Bmi = ROL64in128(Ake, 10);
2540  Ema = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
2541  Ca = _mm_xor_si128(Ca, Ema);
2542  Ami = _mm_xor_si128(Ami, Di);
2543  Bmo = ROL64in128(Ami, 15);
2544  Eme = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
2545  Ce = _mm_xor_si128(Ce, Eme);
2546  Aso = _mm_xor_si128(Aso, Do);
2547  Bmu = ROL64in128_56(Aso);
2548  Emi = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
2549  Ci = _mm_xor_si128(Ci, Emi);
2550  Emo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
2551  Co = _mm_xor_si128(Co, Emo);
2552  Emu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
2553  Cu = _mm_xor_si128(Cu, Emu);
2554  Abi = _mm_xor_si128(Abi, Di);
2555  Bsa = ROL64in128(Abi, 62);
2556  Ago = _mm_xor_si128(Ago, Do);
2557  Bse = ROL64in128(Ago, 55);
2558  Aku = _mm_xor_si128(Aku, Du);
2559  Bsi = ROL64in128(Aku, 39);
2560  Esa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
2561  Ca = _mm_xor_si128(Ca, Esa);
2562  Ama = _mm_xor_si128(Ama, Da);
2563  Bso = ROL64in128(Ama, 41);
2564  Ese = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
2565  Ce = _mm_xor_si128(Ce, Ese);
2566  Ase = _mm_xor_si128(Ase, De);
2567  Bsu = ROL64in128(Ase, 2);
2568  Esi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
2569  Ci = _mm_xor_si128(Ci, Esi);
2570  Eso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
2571  Co = _mm_xor_si128(Co, Eso);
2572  Esu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
2573  Cu = _mm_xor_si128(Cu, Esu);
2574  Da = _mm_xor_si128(Cu, ROL64in128(Ce, 1));
2575  De = _mm_xor_si128(Ca, ROL64in128(Ci, 1));
2576  Di = _mm_xor_si128(Ce, ROL64in128(Co, 1));
2577  Do = _mm_xor_si128(Ci, ROL64in128(Cu, 1));
2578  Du = _mm_xor_si128(Co, ROL64in128(Ca, 1));
2579  Eba = _mm_xor_si128(Eba, Da);
2580  Bba = Eba;
2581  Ege = _mm_xor_si128(Ege, De);
2582  Bbe = ROL64in128(Ege, 44);
2583  Eki = _mm_xor_si128(Eki, Di);
2584  Bbi = ROL64in128(Eki, 43);
2585  Aba = _mm_xor_si128(Bba, _mm_andnot_si128(Bbe, Bbi));
2586  Aba = _mm_xor_si128(Aba, SPLAT64(KeccakF1600Constants[23]));
2587  Emo = _mm_xor_si128(Emo, Do);
2588  Bbo = ROL64in128(Emo, 21);
2589  Abe = _mm_xor_si128(Bbe, _mm_andnot_si128(Bbi, Bbo));
2590  Esu = _mm_xor_si128(Esu, Du);
2591  Bbu = ROL64in128(Esu, 14);
2592  Abi = _mm_xor_si128(Bbi, _mm_andnot_si128(Bbo, Bbu));
2593  Abo = _mm_xor_si128(Bbo, _mm_andnot_si128(Bbu, Bba));
2594  Abu = _mm_xor_si128(Bbu, _mm_andnot_si128(Bba, Bbe));
2595  Ebo = _mm_xor_si128(Ebo, Do);
2596  Bga = ROL64in128(Ebo, 28);
2597  Egu = _mm_xor_si128(Egu, Du);
2598  Bge = ROL64in128(Egu, 20);
2599  Eka = _mm_xor_si128(Eka, Da);
2600  Bgi = ROL64in128(Eka, 3);
2601  Aga = _mm_xor_si128(Bga, _mm_andnot_si128(Bge, Bgi));
2602  Eme = _mm_xor_si128(Eme, De);
2603  Bgo = ROL64in128(Eme, 45);
2604  Age = _mm_xor_si128(Bge, _mm_andnot_si128(Bgi, Bgo));
2605  Esi = _mm_xor_si128(Esi, Di);
2606  Bgu = ROL64in128(Esi, 61);
2607  Agi = _mm_xor_si128(Bgi, _mm_andnot_si128(Bgo, Bgu));
2608  Ago = _mm_xor_si128(Bgo, _mm_andnot_si128(Bgu, Bga));
2609  Agu = _mm_xor_si128(Bgu, _mm_andnot_si128(Bga, Bge));
2610  Ebe = _mm_xor_si128(Ebe, De);
2611  Bka = ROL64in128(Ebe, 1);
2612  Egi = _mm_xor_si128(Egi, Di);
2613  Bke = ROL64in128(Egi, 6);
2614  Eko = _mm_xor_si128(Eko, Do);
2615  Bki = ROL64in128(Eko, 25);
2616  Aka = _mm_xor_si128(Bka, _mm_andnot_si128(Bke, Bki));
2617  Emu = _mm_xor_si128(Emu, Du);
2618  Bko = ROL64in128_8(Emu);
2619  Ake = _mm_xor_si128(Bke, _mm_andnot_si128(Bki, Bko));
2620  Esa = _mm_xor_si128(Esa, Da);
2621  Bku = ROL64in128(Esa, 18);
2622  Aki = _mm_xor_si128(Bki, _mm_andnot_si128(Bko, Bku));
2623  Ako = _mm_xor_si128(Bko, _mm_andnot_si128(Bku, Bka));
2624  Aku = _mm_xor_si128(Bku, _mm_andnot_si128(Bka, Bke));
2625  Ebu = _mm_xor_si128(Ebu, Du);
2626  Bma = ROL64in128(Ebu, 27);
2627  Ega = _mm_xor_si128(Ega, Da);
2628  Bme = ROL64in128(Ega, 36);
2629  Eke = _mm_xor_si128(Eke, De);
2630  Bmi = ROL64in128(Eke, 10);
2631  Ama = _mm_xor_si128(Bma, _mm_andnot_si128(Bme, Bmi));
2632  Emi = _mm_xor_si128(Emi, Di);
2633  Bmo = ROL64in128(Emi, 15);
2634  Ame = _mm_xor_si128(Bme, _mm_andnot_si128(Bmi, Bmo));
2635  Eso = _mm_xor_si128(Eso, Do);
2636  Bmu = ROL64in128_56(Eso);
2637  Ami = _mm_xor_si128(Bmi, _mm_andnot_si128(Bmo, Bmu));
2638  Amo = _mm_xor_si128(Bmo, _mm_andnot_si128(Bmu, Bma));
2639  Amu = _mm_xor_si128(Bmu, _mm_andnot_si128(Bma, Bme));
2640  Ebi = _mm_xor_si128(Ebi, Di);
2641  Bsa = ROL64in128(Ebi, 62);
2642  Ego = _mm_xor_si128(Ego, Do);
2643  Bse = ROL64in128(Ego, 55);
2644  Eku = _mm_xor_si128(Eku, Du);
2645  Bsi = ROL64in128(Eku, 39);
2646  Asa = _mm_xor_si128(Bsa, _mm_andnot_si128(Bse, Bsi));
2647  Ema = _mm_xor_si128(Ema, Da);
2648  Bso = ROL64in128(Ema, 41);
2649  Ase = _mm_xor_si128(Bse, _mm_andnot_si128(Bsi, Bso));
2650  Ese = _mm_xor_si128(Ese, De);
2651  Bsu = ROL64in128(Ese, 2);
2652  Asi = _mm_xor_si128(Bsi, _mm_andnot_si128(Bso, Bsu));
2653  Aso = _mm_xor_si128(Bso, _mm_andnot_si128(Bsu, Bsa));
2654  Asu = _mm_xor_si128(Bsu, _mm_andnot_si128(Bsa, Bse));
2655 
2656  _mm_storeu_si128(M128_CAST(lanes+ 0), Aba);
2657  _mm_storeu_si128(M128_CAST(lanes+ 1), Abe);
2658  _mm_storeu_si128(M128_CAST(lanes+ 2), Abi);
2659  _mm_storeu_si128(M128_CAST(lanes+ 3), Abo);
2660  _mm_storeu_si128(M128_CAST(lanes+ 4), Abu);
2661  _mm_storeu_si128(M128_CAST(lanes+ 5), Aga);
2662  _mm_storeu_si128(M128_CAST(lanes+ 6), Age);
2663  _mm_storeu_si128(M128_CAST(lanes+ 7), Agi);
2664  _mm_storeu_si128(M128_CAST(lanes+ 8), Ago);
2665  _mm_storeu_si128(M128_CAST(lanes+ 9), Agu);
2666  _mm_storeu_si128(M128_CAST(lanes+10), Aka);
2667  _mm_storeu_si128(M128_CAST(lanes+11), Ake);
2668  _mm_storeu_si128(M128_CAST(lanes+12), Aki);
2669  _mm_storeu_si128(M128_CAST(lanes+13), Ako);
2670  _mm_storeu_si128(M128_CAST(lanes+14), Aku);
2671  _mm_storeu_si128(M128_CAST(lanes+15), Ama);
2672  _mm_storeu_si128(M128_CAST(lanes+16), Ame);
2673  _mm_storeu_si128(M128_CAST(lanes+17), Ami);
2674  _mm_storeu_si128(M128_CAST(lanes+18), Amo);
2675  _mm_storeu_si128(M128_CAST(lanes+19), Amu);
2676  _mm_storeu_si128(M128_CAST(lanes+20), Asa);
2677  _mm_storeu_si128(M128_CAST(lanes+21), Ase);
2678  _mm_storeu_si128(M128_CAST(lanes+22), Asi);
2679  _mm_storeu_si128(M128_CAST(lanes+23), Aso);
2680  _mm_storeu_si128(M128_CAST(lanes+24), Asu);
2681 }
2682 
2683 #endif
2684 
2685 NAMESPACE_END
W64LIT
#define W64LIT(x)
Declare an unsigned word64.
Definition: config_int.h:119
M128_CAST
#define M128_CAST(x)
Clang workaround.
Definition: adv_simd.h:609
word64
unsigned long long word64
64-bit unsigned datatype
Definition: config_int.h:91
pch.h
Precompiled header file.
misc.h
Utility functions for the Crypto++ library.
keccak.h
Classes for Keccak message digests.
CryptoPP
Crypto++ library namespace.
config.h
Library configuration file.
CONST_M128_CAST
#define CONST_M128_CAST(x)
Clang workaround.
Definition: adv_simd.h:614