0000: 2f 2a 0a 54 68 65 20 4b 65 63 63 61 6b 20 73 70 /*.The Keccak sp
0010: 6f 6e 67 65 20 66 75 6e 63 74 69 6f 6e 2c 20 64 onge function, d
0020: 65 73 69 67 6e 65 64 20 62 79 20 47 75 69 64 6f esigned by Guido
0030: 20 42 65 72 74 6f 6e 69 2c 20 4a 6f 61 6e 20 44 Bertoni, Joan D
0040: 61 65 6d 65 6e 2c 0a 4d 69 63 68 61 c3 ab 6c 20 aemen,.Michaël
0050: 50 65 65 74 65 72 73 20 61 6e 64 20 47 69 6c 6c Peeters and Gill
0060: 65 73 20 56 61 6e 20 41 73 73 63 68 65 2e 20 46 es Van Assche. F
0070: 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 or more informat
0080: 69 6f 6e 2c 20 66 65 65 64 62 61 63 6b 20 6f 72 ion, feedback or
0090: 0a 71 75 65 73 74 69 6f 6e 73 2c 20 70 6c 65 61 .questions, plea
00a0: 73 65 20 72 65 66 65 72 20 74 6f 20 6f 75 72 20 se refer to our
00b0: 77 65 62 73 69 74 65 3a 20 68 74 74 70 3a 2f 2f website: http://
00c0: 6b 65 63 63 61 6b 2e 6e 6f 65 6b 65 6f 6e 2e 6f keccak.noekeon.o
00d0: 72 67 2f 0a 0a 49 6d 70 6c 65 6d 65 6e 74 61 74 rg/..Implementat
00e0: 69 6f 6e 20 62 79 20 74 68 65 20 64 65 73 69 67 ion by the desig
00f0: 6e 65 72 73 2c 0a 68 65 72 65 62 79 20 64 65 6e ners,.hereby den
0100: 6f 74 65 64 20 61 73 20 22 74 68 65 20 69 6d 70 oted as "the imp
0110: 6c 65 6d 65 6e 74 65 72 22 2e 0a 0a 54 6f 20 74 lementer"...To t
0120: 68 65 20 65 78 74 65 6e 74 20 70 6f 73 73 69 62 he extent possib
0130: 6c 65 20 75 6e 64 65 72 20 6c 61 77 2c 20 74 68 le under law, th
0140: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 72 20 68 61 e implementer ha
0150: 73 20 77 61 69 76 65 64 20 61 6c 6c 20 63 6f 70 s waived all cop
0160: 79 72 69 67 68 74 0a 61 6e 64 20 72 65 6c 61 74 yright.and relat
0170: 65 64 20 6f 72 20 6e 65 69 67 68 62 6f 72 69 6e ed or neighborin
0180: 67 20 72 69 67 68 74 73 20 74 6f 20 74 68 65 20 g rights to the
0190: 73 6f 75 72 63 65 20 63 6f 64 65 20 69 6e 20 74 source code in t
01a0: 68 69 73 20 66 69 6c 65 2e 0a 68 74 74 70 3a 2f his file..http:/
01b0: 2f 63 72 65 61 74 69 76 65 63 6f 6d 6d 6f 6e 73 /creativecommons
01c0: 2e 6f 72 67 2f 70 75 62 6c 69 63 64 6f 6d 61 69 .org/publicdomai
01d0: 6e 2f 7a 65 72 6f 2f 31 2e 30 2f 0a 2a 2f 0a 0a n/zero/1.0/.*/..
01e0: 23 64 65 66 69 6e 65 20 64 65 63 6c 61 72 65 41 #define declareA
01f0: 42 43 44 45 20 5c 0a 20 20 20 20 56 36 34 36 34 BCDE \. V6464
0200: 20 41 62 61 67 65 2c 20 41 62 65 67 69 2c 20 41 Abage, Abegi, A
0210: 62 69 67 6f 2c 20 41 62 6f 67 75 2c 20 41 62 75 bigo, Abogu, Abu
0220: 67 61 3b 20 5c 0a 20 20 20 20 56 36 34 36 34 20 ga; \. V6464
0230: 41 6b 61 6d 65 2c 20 41 6b 65 6d 69 2c 20 41 6b Akame, Akemi, Ak
0240: 69 6d 6f 2c 20 41 6b 6f 6d 75 2c 20 41 6b 75 6d imo, Akomu, Akum
0250: 61 3b 20 5c 0a 20 20 20 20 56 36 34 36 34 20 41 a; \. V6464 A
0260: 62 61 65 2c 20 41 62 69 6f 2c 20 41 67 61 65 2c bae, Abio, Agae,
0270: 20 41 67 69 6f 2c 20 41 6b 61 65 2c 20 41 6b 69 Agio, Akae, Aki
0280: 6f 2c 20 41 6d 61 65 2c 20 41 6d 69 6f 2c 20 41 o, Amae, Amio, A
0290: 73 61 65 2c 20 41 73 69 6f 3b 20 5c 0a 20 20 20 sae, Asio; \.
02a0: 20 56 36 34 20 41 62 61 2c 20 41 62 65 2c 20 41 V64 Aba, Abe, A
02b0: 62 69 2c 20 41 62 6f 2c 20 41 62 75 3b 20 5c 0a bi, Abo, Abu; \.
02c0: 20 20 20 20 56 36 34 20 41 67 61 2c 20 41 67 65 V64 Aga, Age
02d0: 2c 20 41 67 69 2c 20 41 67 6f 2c 20 41 67 75 3b , Agi, Ago, Agu;
02e0: 20 5c 0a 20 20 20 20 56 36 34 20 41 6b 61 2c 20 \. V64 Aka,
02f0: 41 6b 65 2c 20 41 6b 69 2c 20 41 6b 6f 2c 20 41 Ake, Aki, Ako, A
0300: 6b 75 3b 20 5c 0a 20 20 20 20 56 36 34 20 41 6d ku; \. V64 Am
0310: 61 2c 20 41 6d 65 2c 20 41 6d 69 2c 20 41 6d 6f a, Ame, Ami, Amo
0320: 2c 20 41 6d 75 3b 20 5c 0a 20 20 20 20 56 36 34 , Amu; \. V64
0330: 20 41 73 61 2c 20 41 73 65 2c 20 41 73 69 2c 20 Asa, Ase, Asi,
0340: 41 73 6f 2c 20 41 73 75 3b 20 5c 0a 20 20 20 20 Aso, Asu; \.
0350: 56 31 32 38 20 42 62 61 67 65 2c 20 42 62 65 67 V128 Bbage, Bbeg
0360: 69 2c 20 42 62 69 67 6f 2c 20 42 62 6f 67 75 2c i, Bbigo, Bbogu,
0370: 20 42 62 75 67 61 3b 20 5c 0a 20 20 20 20 56 31 Bbuga; \. V1
0380: 32 38 20 42 6b 61 6d 65 2c 20 42 6b 65 6d 69 2c 28 Bkame, Bkemi,
0390: 20 42 6b 69 6d 6f 2c 20 42 6b 6f 6d 75 2c 20 42 Bkimo, Bkomu, B
03a0: 6b 75 6d 61 3b 20 5c 0a 20 20 20 20 56 36 34 20 kuma; \. V64
03b0: 42 62 61 2c 20 42 62 65 2c 20 42 62 69 2c 20 42 Bba, Bbe, Bbi, B
03c0: 62 6f 2c 20 42 62 75 3b 20 5c 0a 20 20 20 20 56 bo, Bbu; \. V
03d0: 36 34 20 42 67 61 2c 20 42 67 65 2c 20 42 67 69 64 Bga, Bge, Bgi
03e0: 2c 20 42 67 6f 2c 20 42 67 75 3b 20 5c 0a 20 20 , Bgo, Bgu; \.
03f0: 20 20 56 36 34 20 42 6b 61 2c 20 42 6b 65 2c 20 V64 Bka, Bke,
0400: 42 6b 69 2c 20 42 6b 6f 2c 20 42 6b 75 3b 20 5c Bki, Bko, Bku; \
0410: 0a 20 20 20 20 56 36 34 20 42 6d 61 2c 20 42 6d . V64 Bma, Bm
0420: 65 2c 20 42 6d 69 2c 20 42 6d 6f 2c 20 42 6d 75 e, Bmi, Bmo, Bmu
0430: 3b 20 5c 0a 20 20 20 20 56 36 34 20 42 73 61 2c ; \. V64 Bsa,
0440: 20 42 73 65 2c 20 42 73 69 2c 20 42 73 6f 2c 20 Bse, Bsi, Bso,
0450: 42 73 75 3b 20 5c 0a 20 20 20 20 56 31 32 38 20 Bsu; \. V128
0460: 43 61 65 2c 20 43 65 69 2c 20 43 69 6f 2c 20 43 Cae, Cei, Cio, C
0470: 6f 75 2c 20 43 75 61 2c 20 44 65 69 2c 20 44 6f ou, Cua, Dei, Do
0480: 75 3b 20 5c 0a 20 20 20 20 56 36 34 20 43 61 2c u; \. V64 Ca,
0490: 20 43 65 2c 20 43 69 2c 20 43 6f 2c 20 43 75 3b Ce, Ci, Co, Cu;
04a0: 20 5c 0a 20 20 20 20 56 36 34 20 44 61 2c 20 44 \. V64 Da, D
04b0: 65 2c 20 44 69 2c 20 44 6f 2c 20 44 75 3b 20 5c e, Di, Do, Du; \
04c0: 0a 20 20 20 20 56 36 34 36 34 20 45 62 61 67 65 . V6464 Ebage
04d0: 2c 20 45 62 65 67 69 2c 20 45 62 69 67 6f 2c 20 , Ebegi, Ebigo,
04e0: 45 62 6f 67 75 2c 20 45 62 75 67 61 3b 20 5c 0a Ebogu, Ebuga; \.
04f0: 20 20 20 20 56 36 34 36 34 20 45 6b 61 6d 65 2c V6464 Ekame,
0500: 20 45 6b 65 6d 69 2c 20 45 6b 69 6d 6f 2c 20 45 Ekemi, Ekimo, E
0510: 6b 6f 6d 75 2c 20 45 6b 75 6d 61 3b 20 5c 0a 20 komu, Ekuma; \.
0520: 20 20 20 56 36 34 20 45 62 61 2c 20 45 62 65 2c V64 Eba, Ebe,
0530: 20 45 62 69 2c 20 45 62 6f 2c 20 45 62 75 3b 20 Ebi, Ebo, Ebu;
0540: 5c 0a 20 20 20 20 56 36 34 20 45 67 61 2c 20 45 \. V64 Ega, E
0550: 67 65 2c 20 45 67 69 2c 20 45 67 6f 2c 20 45 67 ge, Egi, Ego, Eg
0560: 75 3b 20 5c 0a 20 20 20 20 56 36 34 20 45 6b 61 u; \. V64 Eka
0570: 2c 20 45 6b 65 2c 20 45 6b 69 2c 20 45 6b 6f 2c , Eke, Eki, Eko,
0580: 20 45 6b 75 3b 20 5c 0a 20 20 20 20 56 36 34 20 Eku; \. V64
0590: 45 6d 61 2c 20 45 6d 65 2c 20 45 6d 69 2c 20 45 Ema, Eme, Emi, E
05a0: 6d 6f 2c 20 45 6d 75 3b 20 5c 0a 20 20 20 20 56 mo, Emu; \. V
05b0: 36 34 20 45 73 61 2c 20 45 73 65 2c 20 45 73 69 64 Esa, Ese, Esi
05c0: 2c 20 45 73 6f 2c 20 45 73 75 3b 20 5c 0a 20 20 , Eso, Esu; \.
05d0: 20 20 56 31 32 38 20 5a 65 72 6f 3b 0a 0a 23 64 V128 Zero;..#d
05e0: 65 66 69 6e 65 20 70 72 65 70 61 72 65 54 68 65 efine prepareThe
05f0: 74 61 0a 0a 23 64 65 66 69 6e 65 20 63 6f 6d 70 ta..#define comp
0600: 75 74 65 44 20 5c 0a 20 20 20 20 43 75 61 20 3d uteD \. Cua =
0610: 20 47 45 54 36 34 4c 4f 4c 4f 28 43 75 2c 20 43 GET64LOLO(Cu, C
0620: 61 65 29 3b 20 5c 0a 20 20 20 20 44 65 69 20 3d ae); \. Dei =
0630: 20 58 4f 52 31 32 38 28 43 61 65 2c 20 52 4f 4c XOR128(Cae, ROL
0640: 36 34 69 6e 31 32 38 28 43 69 6f 2c 20 31 29 29 64in128(Cio, 1))
0650: 3b 20 5c 0a 20 20 20 20 44 6f 75 20 3d 20 58 4f ; \. Dou = XO
0660: 52 31 32 38 28 43 69 6f 2c 20 52 4f 4c 36 34 69 R128(Cio, ROL64i
0670: 6e 31 32 38 28 43 75 61 2c 20 31 29 29 3b 20 5c n128(Cua, 1)); \
0680: 0a 20 20 20 20 44 61 20 3d 20 58 4f 52 36 34 28 . Da = XOR64(
0690: 43 75 2c 20 52 4f 4c 36 34 69 6e 31 32 38 28 43 Cu, ROL64in128(C
06a0: 4f 50 59 36 34 48 49 32 4c 4f 28 43 61 65 29 2c OPY64HI2LO(Cae),
06b0: 20 31 29 29 3b 20 5c 0a 20 20 20 20 44 65 20 3d 1)); \. De =
06c0: 20 44 65 69 3b 20 5c 0a 20 20 20 20 44 69 20 3d Dei; \. Di =
06d0: 20 43 4f 50 59 36 34 48 49 32 4c 4f 28 44 65 69 COPY64HI2LO(Dei
06e0: 29 3b 20 5c 0a 20 20 20 20 44 6f 20 3d 20 44 6f ); \. Do = Do
06f0: 75 3b 20 5c 0a 20 20 20 20 44 75 20 3d 20 43 4f u; \. Du = CO
0700: 50 59 36 34 48 49 32 4c 4f 28 44 6f 75 29 3b 0a PY64HI2LO(Dou);.
0710: 0a 2f 2f 20 2d 2d 2d 20 54 68 65 74 61 20 52 68 .// --- Theta Rh
0720: 6f 20 50 69 20 43 68 69 20 49 6f 74 61 20 50 72 o Pi Chi Iota Pr
0730: 65 70 61 72 65 2d 74 68 65 74 61 0a 2f 2f 20 2d epare-theta.// -
0740: 2d 2d 20 36 34 2d 62 69 74 20 6c 61 6e 65 73 20 -- 64-bit lanes
0750: 6d 61 70 70 65 64 20 74 6f 20 36 34 2d 62 69 74 mapped to 64-bit
0760: 20 61 6e 64 20 31 32 38 2d 62 69 74 20 77 6f 72 and 128-bit wor
0770: 64 73 0a 23 64 65 66 69 6e 65 20 74 68 65 74 61 ds.#define theta
0780: 52 68 6f 50 69 43 68 69 49 6f 74 61 50 72 65 70 RhoPiChiIotaPrep
0790: 61 72 65 54 68 65 74 61 28 69 2c 20 41 2c 20 45 areTheta(i, A, E
07a0: 29 20 5c 0a 20 20 20 20 63 6f 6d 70 75 74 65 44 ) \. computeD
07b0: 20 5c 0a 20 20 20 20 5c 0a 20 20 20 20 41 23 23 \. \. A##
07c0: 62 61 20 3d 20 4c 4f 41 44 36 34 28 41 23 23 62 ba = LOAD64(A##b
07d0: 61 67 65 2e 76 36 34 5b 30 5d 29 3b 20 5c 0a 20 age.v64[0]); \.
07e0: 20 20 20 58 4f 52 65 71 36 34 28 41 23 23 62 61 XOReq64(A##ba
07f0: 2c 20 44 61 29 3b 20 5c 0a 20 20 20 20 42 62 61 , Da); \. Bba
0800: 20 3d 20 41 23 23 62 61 3b 20 5c 0a 20 20 20 20 = A##ba; \.
0810: 58 4f 52 65 71 36 34 28 41 23 23 67 75 2c 20 44 XOReq64(A##gu, D
0820: 75 29 3b 20 5c 0a 20 20 20 20 42 67 65 20 3d 20 u); \. Bge =
0830: 52 4f 4c 36 34 28 41 23 23 67 75 2c 20 32 30 29 ROL64(A##gu, 20)
0840: 3b 20 5c 0a 20 20 20 20 42 62 61 67 65 20 3d 20 ; \. Bbage =
0850: 47 45 54 36 34 4c 4f 4c 4f 28 42 62 61 2c 20 42 GET64LOLO(Bba, B
0860: 67 65 29 3b 20 5c 0a 20 20 20 20 41 23 23 67 65 ge); \. A##ge
0870: 20 3d 20 4c 4f 41 44 36 34 28 41 23 23 62 61 67 = LOAD64(A##bag
0880: 65 2e 76 36 34 5b 31 5d 29 3b 20 5c 0a 20 20 20 e.v64[1]); \.
0890: 20 58 4f 52 65 71 36 34 28 41 23 23 67 65 2c 20 XOReq64(A##ge,
08a0: 44 65 29 3b 20 5c 0a 20 20 20 20 42 62 65 20 3d De); \. Bbe =
08b0: 20 52 4f 4c 36 34 28 41 23 23 67 65 2c 20 34 34 ROL64(A##ge, 44
08c0: 29 3b 20 5c 0a 20 20 20 20 41 23 23 6b 61 20 3d ); \. A##ka =
08d0: 20 4c 4f 41 44 36 34 28 41 23 23 6b 61 6d 65 2e LOAD64(A##kame.
08e0: 76 36 34 5b 30 5d 29 3b 20 5c 0a 20 20 20 20 58 v64[0]); \. X
08f0: 4f 52 65 71 36 34 28 41 23 23 6b 61 2c 20 44 61 OReq64(A##ka, Da
0900: 29 3b 20 5c 0a 20 20 20 20 42 67 69 20 3d 20 52 ); \. Bgi = R
0910: 4f 4c 36 34 28 41 23 23 6b 61 2c 20 33 29 3b 20 OL64(A##ka, 3);
0920: 5c 0a 20 20 20 20 42 62 65 67 69 20 3d 20 47 45 \. Bbegi = GE
0930: 54 36 34 4c 4f 4c 4f 28 42 62 65 2c 20 42 67 69 T64LOLO(Bbe, Bgi
0940: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 ); \. XOReq64
0950: 28 41 23 23 6b 69 2c 20 44 69 29 3b 20 5c 0a 20 (A##ki, Di); \.
0960: 20 20 20 42 62 69 20 3d 20 52 4f 4c 36 34 28 41 Bbi = ROL64(A
0970: 23 23 6b 69 2c 20 34 33 29 3b 20 5c 0a 20 20 20 ##ki, 43); \.
0980: 20 41 23 23 6d 65 20 3d 20 4c 4f 41 44 36 34 28 A##me = LOAD64(
0990: 41 23 23 6b 61 6d 65 2e 76 36 34 5b 31 5d 29 3b A##kame.v64[1]);
09a0: 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 41 \. XOReq64(A
09b0: 23 23 6d 65 2c 20 44 65 29 3b 20 5c 0a 20 20 20 ##me, De); \.
09c0: 20 42 67 6f 20 3d 20 52 4f 4c 36 34 28 41 23 23 Bgo = ROL64(A##
09d0: 6d 65 2c 20 34 35 29 3b 20 5c 0a 20 20 20 20 42 me, 45); \. B
09e0: 62 69 67 6f 20 3d 20 47 45 54 36 34 4c 4f 4c 4f bigo = GET64LOLO
09f0: 28 42 62 69 2c 20 42 67 6f 29 3b 20 5c 0a 20 20 (Bbi, Bgo); \.
0a00: 20 20 45 23 23 62 61 67 65 2e 76 31 32 38 20 3d E##bage.v128 =
0a10: 20 58 4f 52 31 32 38 28 42 62 61 67 65 2c 20 41 XOR128(Bbage, A
0a20: 4e 44 6e 75 31 32 38 28 42 62 65 67 69 2c 20 42 NDnu128(Bbegi, B
0a30: 62 69 67 6f 29 29 3b 20 5c 0a 20 20 20 20 58 4f bigo)); \. XO
0a40: 52 65 71 31 32 38 28 45 23 23 62 61 67 65 2e 76 Req128(E##bage.v
0a50: 31 32 38 2c 20 43 4f 4e 53 54 36 34 28 4b 65 63 128, CONST64(Kec
0a60: 63 61 6b 46 31 36 30 30 52 6f 75 6e 64 43 6f 6e cakF1600RoundCon
0a70: 73 74 61 6e 74 73 5b 69 5d 29 29 3b 20 5c 0a 20 stants[i])); \.
0a80: 20 20 20 43 61 65 20 3d 20 45 23 23 62 61 67 65 Cae = E##bage
0a90: 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 4f 52 .v128; \. XOR
0aa0: 65 71 36 34 28 41 23 23 6d 6f 2c 20 44 6f 29 3b eq64(A##mo, Do);
0ab0: 20 5c 0a 20 20 20 20 42 62 6f 20 3d 20 52 4f 4c \. Bbo = ROL
0ac0: 36 34 28 41 23 23 6d 6f 2c 20 32 31 29 3b 20 5c 64(A##mo, 21); \
0ad0: 0a 20 20 20 20 58 4f 52 65 71 36 34 28 41 23 23 . XOReq64(A##
0ae0: 73 69 2c 20 44 69 29 3b 20 5c 0a 20 20 20 20 42 si, Di); \. B
0af0: 67 75 20 3d 20 52 4f 4c 36 34 28 41 23 23 73 69 gu = ROL64(A##si
0b00: 2c 20 36 31 29 3b 20 5c 0a 20 20 20 20 42 62 6f , 61); \. Bbo
0b10: 67 75 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 42 gu = GET64LOLO(B
0b20: 62 6f 2c 20 42 67 75 29 3b 20 5c 0a 20 20 20 20 bo, Bgu); \.
0b30: 45 23 23 62 65 67 69 2e 76 31 32 38 20 3d 20 58 E##begi.v128 = X
0b40: 4f 52 31 32 38 28 42 62 65 67 69 2c 20 41 4e 44 OR128(Bbegi, AND
0b50: 6e 75 31 32 38 28 42 62 69 67 6f 2c 20 42 62 6f nu128(Bbigo, Bbo
0b60: 67 75 29 29 3b 20 5c 0a 20 20 20 20 43 65 69 20 gu)); \. Cei
0b70: 3d 20 45 23 23 62 65 67 69 2e 76 31 32 38 3b 20 = E##begi.v128;
0b80: 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 41 23 \. XOReq64(A#
0b90: 23 73 75 2c 20 44 75 29 3b 20 5c 0a 20 20 20 20 #su, Du); \.
0ba0: 42 62 75 20 3d 20 52 4f 4c 36 34 28 41 23 23 73 Bbu = ROL64(A##s
0bb0: 75 2c 20 31 34 29 3b 20 5c 0a 20 20 20 20 58 4f u, 14); \. XO
0bc0: 52 65 71 36 34 28 41 23 23 62 6f 2c 20 44 6f 29 Req64(A##bo, Do)
0bd0: 3b 20 5c 0a 20 20 20 20 42 67 61 20 3d 20 52 4f ; \. Bga = RO
0be0: 4c 36 34 28 41 23 23 62 6f 2c 20 32 38 29 3b 20 L64(A##bo, 28);
0bf0: 5c 0a 20 20 20 20 42 62 75 67 61 20 3d 20 47 45 \. Bbuga = GE
0c00: 54 36 34 4c 4f 4c 4f 28 42 62 75 2c 20 42 67 61 T64LOLO(Bbu, Bga
0c10: 29 3b 20 5c 0a 20 20 20 20 45 23 23 62 69 67 6f ); \. E##bigo
0c20: 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 42 .v128 = XOR128(B
0c30: 62 69 67 6f 2c 20 41 4e 44 6e 75 31 32 38 28 42 bigo, ANDnu128(B
0c40: 62 6f 67 75 2c 20 42 62 75 67 61 29 29 3b 20 5c bogu, Bbuga)); \
0c50: 0a 20 20 20 20 45 23 23 62 69 20 3d 20 45 23 23 . E##bi = E##
0c60: 62 69 67 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 bigo.v128; \.
0c70: 20 45 23 23 67 6f 20 3d 20 47 45 54 36 34 48 49 E##go = GET64HI
0c80: 48 49 28 45 23 23 62 69 67 6f 2e 76 31 32 38 2c HI(E##bigo.v128,
0c90: 20 45 23 23 62 69 67 6f 2e 76 31 32 38 29 3b 20 E##bigo.v128);
0ca0: 5c 0a 20 20 20 20 43 69 6f 20 3d 20 45 23 23 62 \. Cio = E##b
0cb0: 69 67 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 igo.v128; \.
0cc0: 45 23 23 62 6f 67 75 2e 76 31 32 38 20 3d 20 58 E##bogu.v128 = X
0cd0: 4f 52 31 32 38 28 42 62 6f 67 75 2c 20 41 4e 44 OR128(Bbogu, AND
0ce0: 6e 75 31 32 38 28 42 62 75 67 61 2c 20 42 62 61 nu128(Bbuga, Bba
0cf0: 67 65 29 29 3b 20 5c 0a 20 20 20 20 45 23 23 62 ge)); \. E##b
0d00: 6f 20 3d 20 45 23 23 62 6f 67 75 2e 76 31 32 38 o = E##bogu.v128
0d10: 3b 20 5c 0a 20 20 20 20 45 23 23 67 75 20 3d 20 ; \. E##gu =
0d20: 47 45 54 36 34 48 49 48 49 28 45 23 23 62 6f 67 GET64HIHI(E##bog
0d30: 75 2e 76 31 32 38 2c 20 45 23 23 62 6f 67 75 2e u.v128, E##bogu.
0d40: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 43 6f 75 v128); \. Cou
0d50: 20 3d 20 45 23 23 62 6f 67 75 2e 76 31 32 38 3b = E##bogu.v128;
0d60: 20 5c 0a 20 20 20 20 45 23 23 62 75 67 61 2e 76 \. E##buga.v
0d70: 31 32 38 20 3d 20 58 4f 52 31 32 38 28 42 62 75 128 = XOR128(Bbu
0d80: 67 61 2c 20 41 4e 44 6e 75 31 32 38 28 42 62 61 ga, ANDnu128(Bba
0d90: 67 65 2c 20 42 62 65 67 69 29 29 3b 20 5c 0a 20 ge, Bbegi)); \.
0da0: 20 20 20 45 23 23 62 75 20 3d 20 45 23 23 62 75 E##bu = E##bu
0db0: 67 61 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 45 ga.v128; \. E
0dc0: 23 23 67 61 20 3d 20 47 45 54 36 34 48 49 48 49 ##ga = GET64HIHI
0dd0: 28 45 23 23 62 75 67 61 2e 76 31 32 38 2c 20 45 (E##buga.v128, E
0de0: 23 23 62 75 67 61 2e 76 31 32 38 29 3b 20 5c 0a ##buga.v128); \.
0df0: 20 20 20 20 43 75 61 20 3d 20 45 23 23 62 75 67 Cua = E##bug
0e00: 61 2e 76 31 32 38 3b 20 5c 0a 5c 0a 20 20 20 20 a.v128; \.\.
0e10: 41 23 23 62 65 20 3d 20 4c 4f 41 44 36 34 28 41 A##be = LOAD64(A
0e20: 23 23 62 65 67 69 2e 76 36 34 5b 30 5d 29 3b 20 ##begi.v64[0]);
0e30: 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 41 23 \. XOReq64(A#
0e40: 23 62 65 2c 20 44 65 29 3b 20 5c 0a 20 20 20 20 #be, De); \.
0e50: 42 6b 61 20 3d 20 52 4f 4c 36 34 28 41 23 23 62 Bka = ROL64(A##b
0e60: 65 2c 20 31 29 3b 20 5c 0a 20 20 20 20 58 4f 52 e, 1); \. XOR
0e70: 65 71 36 34 28 41 23 23 67 61 2c 20 44 61 29 3b eq64(A##ga, Da);
0e80: 20 5c 0a 20 20 20 20 42 6d 65 20 3d 20 52 4f 4c \. Bme = ROL
0e90: 36 34 28 41 23 23 67 61 2c 20 33 36 29 3b 20 5c 64(A##ga, 36); \
0ea0: 0a 20 20 20 20 42 6b 61 6d 65 20 3d 20 47 45 54 . Bkame = GET
0eb0: 36 34 4c 4f 4c 4f 28 42 6b 61 2c 20 42 6d 65 29 64LOLO(Bka, Bme)
0ec0: 3b 20 5c 0a 20 20 20 20 41 23 23 67 69 20 3d 20 ; \. A##gi =
0ed0: 4c 4f 41 44 36 34 28 41 23 23 62 65 67 69 2e 76 LOAD64(A##begi.v
0ee0: 36 34 5b 31 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 64[1]); \. XO
0ef0: 52 65 71 36 34 28 41 23 23 67 69 2c 20 44 69 29 Req64(A##gi, Di)
0f00: 3b 20 5c 0a 20 20 20 20 42 6b 65 20 3d 20 52 4f ; \. Bke = RO
0f10: 4c 36 34 28 41 23 23 67 69 2c 20 36 29 3b 20 5c L64(A##gi, 6); \
0f20: 0a 20 20 20 20 41 23 23 6b 65 20 3d 20 4c 4f 41 . A##ke = LOA
0f30: 44 36 34 28 41 23 23 6b 65 6d 69 2e 76 36 34 5b D64(A##kemi.v64[
0f40: 30 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 0]); \. XOReq
0f50: 36 34 28 41 23 23 6b 65 2c 20 44 65 29 3b 20 5c 64(A##ke, De); \
0f60: 0a 20 20 20 20 42 6d 69 20 3d 20 52 4f 4c 36 34 . Bmi = ROL64
0f70: 28 41 23 23 6b 65 2c 20 31 30 29 3b 20 5c 0a 20 (A##ke, 10); \.
0f80: 20 20 20 42 6b 65 6d 69 20 3d 20 47 45 54 36 34 Bkemi = GET64
0f90: 4c 4f 4c 4f 28 42 6b 65 2c 20 42 6d 69 29 3b 20 LOLO(Bke, Bmi);
0fa0: 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 41 23 \. XOReq64(A#
0fb0: 23 6b 6f 2c 20 44 6f 29 3b 20 5c 0a 20 20 20 20 #ko, Do); \.
0fc0: 42 6b 69 20 3d 20 52 4f 4c 36 34 28 41 23 23 6b Bki = ROL64(A##k
0fd0: 6f 2c 20 32 35 29 3b 20 5c 0a 20 20 20 20 41 23 o, 25); \. A#
0fe0: 23 6d 69 20 3d 20 4c 4f 41 44 36 34 28 41 23 23 #mi = LOAD64(A##
0ff0: 6b 65 6d 69 2e 76 36 34 5b 31 5d 29 3b 20 5c 0a kemi.v64[1]); \.
1000: 20 20 20 20 58 4f 52 65 71 36 34 28 41 23 23 6d XOReq64(A##m
1010: 69 2c 20 44 69 29 3b 20 5c 0a 20 20 20 20 42 6d i, Di); \. Bm
1020: 6f 20 3d 20 52 4f 4c 36 34 28 41 23 23 6d 69 2c o = ROL64(A##mi,
1030: 20 31 35 29 3b 20 5c 0a 20 20 20 20 42 6b 69 6d 15); \. Bkim
1040: 6f 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 42 6b o = GET64LOLO(Bk
1050: 69 2c 20 42 6d 6f 29 3b 20 5c 0a 20 20 20 20 45 i, Bmo); \. E
1060: 23 23 6b 61 6d 65 2e 76 31 32 38 20 3d 20 58 4f ##kame.v128 = XO
1070: 52 31 32 38 28 42 6b 61 6d 65 2c 20 41 4e 44 6e R128(Bkame, ANDn
1080: 75 31 32 38 28 42 6b 65 6d 69 2c 20 42 6b 69 6d u128(Bkemi, Bkim
1090: 6f 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 o)); \. XOReq
10a0: 31 32 38 28 43 61 65 2c 20 45 23 23 6b 61 6d 65 128(Cae, E##kame
10b0: 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 42 6b .v128); \. Bk
10c0: 6f 6d 75 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 omu = GET64LOLO(
10d0: 58 4f 52 36 34 28 41 23 23 6d 75 2c 20 44 75 29 XOR64(A##mu, Du)
10e0: 2c 20 58 4f 52 36 34 28 41 23 23 73 6f 2c 20 44 , XOR64(A##so, D
10f0: 6f 29 29 3b 20 5c 0a 20 20 20 20 42 6b 6f 6d 75 o)); \. Bkomu
1100: 20 3d 20 53 48 55 46 46 4c 45 42 59 54 45 53 31 = SHUFFLEBYTES1
1110: 32 38 28 42 6b 6f 6d 75 2c 20 43 4f 4e 53 54 31 28(Bkomu, CONST1
1120: 32 38 28 72 68 6f 38 5f 35 36 29 29 3b 20 5c 0a 28(rho8_56)); \.
1130: 20 20 20 20 45 23 23 6b 65 6d 69 2e 76 31 32 38 E##kemi.v128
1140: 20 3d 20 58 4f 52 31 32 38 28 42 6b 65 6d 69 2c = XOR128(Bkemi,
1150: 20 41 4e 44 6e 75 31 32 38 28 42 6b 69 6d 6f 2c ANDnu128(Bkimo,
1160: 20 42 6b 6f 6d 75 29 29 3b 20 5c 0a 20 20 20 20 Bkomu)); \.
1170: 58 4f 52 65 71 31 32 38 28 43 65 69 2c 20 45 23 XOReq128(Cei, E#
1180: 23 6b 65 6d 69 2e 76 31 32 38 29 3b 20 5c 0a 20 #kemi.v128); \.
1190: 20 20 20 58 4f 52 65 71 36 34 28 41 23 23 73 61 XOReq64(A##sa
11a0: 2c 20 44 61 29 3b 20 5c 0a 20 20 20 20 42 6b 75 , Da); \. Bku
11b0: 20 3d 20 52 4f 4c 36 34 28 41 23 23 73 61 2c 20 = ROL64(A##sa,
11c0: 31 38 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 18); \. XOReq
11d0: 36 34 28 41 23 23 62 75 2c 20 44 75 29 3b 20 5c 64(A##bu, Du); \
11e0: 0a 20 20 20 20 42 6d 61 20 3d 20 52 4f 4c 36 34 . Bma = ROL64
11f0: 28 41 23 23 62 75 2c 20 32 37 29 3b 20 5c 0a 20 (A##bu, 27); \.
1200: 20 20 20 42 6b 75 6d 61 20 3d 20 47 45 54 36 34 Bkuma = GET64
1210: 4c 4f 4c 4f 28 42 6b 75 2c 20 42 6d 61 29 3b 20 LOLO(Bku, Bma);
1220: 5c 0a 20 20 20 20 45 23 23 6b 69 6d 6f 2e 76 31 \. E##kimo.v1
1230: 32 38 20 3d 20 58 4f 52 31 32 38 28 42 6b 69 6d 28 = XOR128(Bkim
1240: 6f 2c 20 41 4e 44 6e 75 31 32 38 28 42 6b 6f 6d o, ANDnu128(Bkom
1250: 75 2c 20 42 6b 75 6d 61 29 29 3b 20 5c 0a 20 20 u, Bkuma)); \.
1260: 20 20 45 23 23 6b 69 20 3d 20 45 23 23 6b 69 6d E##ki = E##kim
1270: 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 45 23 o.v128; \. E#
1280: 23 6d 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28 #mo = GET64HIHI(
1290: 45 23 23 6b 69 6d 6f 2e 76 31 32 38 2c 20 45 23 E##kimo.v128, E#
12a0: 23 6b 69 6d 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 #kimo.v128); \.
12b0: 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c XOReq128(Cio,
12c0: 20 45 23 23 6b 69 6d 6f 2e 76 31 32 38 29 3b 20 E##kimo.v128);
12d0: 5c 0a 20 20 20 20 45 23 23 6b 6f 6d 75 2e 76 31 \. E##komu.v1
12e0: 32 38 20 3d 20 58 4f 52 31 32 38 28 42 6b 6f 6d 28 = XOR128(Bkom
12f0: 75 2c 20 41 4e 44 6e 75 31 32 38 28 42 6b 75 6d u, ANDnu128(Bkum
1300: 61 2c 20 42 6b 61 6d 65 29 29 3b 20 5c 0a 20 20 a, Bkame)); \.
1310: 20 20 45 23 23 6b 6f 20 3d 20 45 23 23 6b 6f 6d E##ko = E##kom
1320: 75 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 45 23 u.v128; \. E#
1330: 23 6d 75 20 3d 20 47 45 54 36 34 48 49 48 49 28 #mu = GET64HIHI(
1340: 45 23 23 6b 6f 6d 75 2e 76 31 32 38 2c 20 45 23 E##komu.v128, E#
1350: 23 6b 6f 6d 75 2e 76 31 32 38 29 3b 20 5c 0a 20 #komu.v128); \.
1360: 20 20 20 58 4f 52 65 71 31 32 38 28 43 6f 75 2c XOReq128(Cou,
1370: 20 45 23 23 6b 6f 6d 75 2e 76 31 32 38 29 3b 20 E##komu.v128);
1380: 5c 0a 20 20 20 20 45 23 23 6b 75 6d 61 2e 76 31 \. E##kuma.v1
1390: 32 38 20 3d 20 58 4f 52 31 32 38 28 42 6b 75 6d 28 = XOR128(Bkum
13a0: 61 2c 20 41 4e 44 6e 75 31 32 38 28 42 6b 61 6d a, ANDnu128(Bkam
13b0: 65 2c 20 42 6b 65 6d 69 29 29 3b 20 5c 0a 20 20 e, Bkemi)); \.
13c0: 20 20 45 23 23 6b 75 20 3d 20 45 23 23 6b 75 6d E##ku = E##kum
13d0: 61 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 45 23 a.v128; \. E#
13e0: 23 6d 61 20 3d 20 47 45 54 36 34 48 49 48 49 28 #ma = GET64HIHI(
13f0: 45 23 23 6b 75 6d 61 2e 76 31 32 38 2c 20 45 23 E##kuma.v128, E#
1400: 23 6b 75 6d 61 2e 76 31 32 38 29 3b 20 5c 0a 20 #kuma.v128); \.
1410: 20 20 20 58 4f 52 65 71 31 32 38 28 43 75 61 2c XOReq128(Cua,
1420: 20 45 23 23 6b 75 6d 61 2e 76 31 32 38 29 3b 20 E##kuma.v128);
1430: 5c 0a 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 \.\. XOReq64(
1440: 41 23 23 62 69 2c 20 44 69 29 3b 20 5c 0a 20 20 A##bi, Di); \.
1450: 20 20 42 73 61 20 3d 20 52 4f 4c 36 34 28 41 23 Bsa = ROL64(A#
1460: 23 62 69 2c 20 36 32 29 3b 20 5c 0a 20 20 20 20 #bi, 62); \.
1470: 58 4f 52 65 71 36 34 28 41 23 23 67 6f 2c 20 44 XOReq64(A##go, D
1480: 6f 29 3b 20 5c 0a 20 20 20 20 42 73 65 20 3d 20 o); \. Bse =
1490: 52 4f 4c 36 34 28 41 23 23 67 6f 2c 20 35 35 29 ROL64(A##go, 55)
14a0: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 ; \. XOReq64(
14b0: 41 23 23 6b 75 2c 20 44 75 29 3b 20 5c 0a 20 20 A##ku, Du); \.
14c0: 20 20 42 73 69 20 3d 20 52 4f 4c 36 34 28 41 23 Bsi = ROL64(A#
14d0: 23 6b 75 2c 20 33 39 29 3b 20 5c 0a 20 20 20 20 #ku, 39); \.
14e0: 45 23 23 73 61 20 3d 20 58 4f 52 36 34 28 42 73 E##sa = XOR64(Bs
14f0: 61 2c 20 41 4e 44 6e 75 36 34 28 42 73 65 2c 20 a, ANDnu64(Bse,
1500: 42 73 69 29 29 3b 20 5c 0a 20 20 20 20 43 61 20 Bsi)); \. Ca
1510: 3d 20 45 23 23 73 61 3b 20 5c 0a 20 20 20 20 58 = E##sa; \. X
1520: 4f 52 65 71 36 34 28 41 23 23 6d 61 2c 20 44 61 OReq64(A##ma, Da
1530: 29 3b 20 5c 0a 20 20 20 20 42 73 6f 20 3d 20 52 ); \. Bso = R
1540: 4f 4c 36 34 28 41 23 23 6d 61 2c 20 34 31 29 3b OL64(A##ma, 41);
1550: 20 5c 0a 20 20 20 20 45 23 23 73 65 20 3d 20 58 \. E##se = X
1560: 4f 52 36 34 28 42 73 65 2c 20 41 4e 44 6e 75 36 OR64(Bse, ANDnu6
1570: 34 28 42 73 69 2c 20 42 73 6f 29 29 3b 20 5c 0a 4(Bsi, Bso)); \.
1580: 20 20 20 20 43 65 20 3d 20 45 23 23 73 65 3b 20 Ce = E##se;
1590: 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 \. XOReq128(C
15a0: 61 65 2c 20 47 45 54 36 34 4c 4f 4c 4f 28 43 61 ae, GET64LOLO(Ca
15b0: 2c 20 43 65 29 29 3b 20 5c 0a 20 20 20 20 58 4f , Ce)); \. XO
15c0: 52 65 71 36 34 28 41 23 23 73 65 2c 20 44 65 29 Req64(A##se, De)
15d0: 3b 20 5c 0a 20 20 20 20 42 73 75 20 3d 20 52 4f ; \. Bsu = RO
15e0: 4c 36 34 28 41 23 23 73 65 2c 20 32 29 3b 20 5c L64(A##se, 2); \
15f0: 0a 20 20 20 20 45 23 23 73 69 20 3d 20 58 4f 52 . E##si = XOR
1600: 36 34 28 42 73 69 2c 20 41 4e 44 6e 75 36 34 28 64(Bsi, ANDnu64(
1610: 42 73 6f 2c 20 42 73 75 29 29 3b 20 5c 0a 20 20 Bso, Bsu)); \.
1620: 20 20 43 69 20 3d 20 45 23 23 73 69 3b 20 5c 0a Ci = E##si; \.
1630: 20 20 20 20 45 23 23 73 6f 20 3d 20 58 4f 52 36 E##so = XOR6
1640: 34 28 42 73 6f 2c 20 41 4e 44 6e 75 36 34 28 42 4(Bso, ANDnu64(B
1650: 73 75 2c 20 42 73 61 29 29 3b 20 5c 0a 20 20 20 su, Bsa)); \.
1660: 20 43 6f 20 3d 20 45 23 23 73 6f 3b 20 5c 0a 20 Co = E##so; \.
1670: 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c XOReq128(Cio,
1680: 20 47 45 54 36 34 4c 4f 4c 4f 28 43 69 2c 20 43 GET64LOLO(Ci, C
1690: 6f 29 29 3b 20 5c 0a 20 20 20 20 45 23 23 73 75 o)); \. E##su
16a0: 20 3d 20 58 4f 52 36 34 28 42 73 75 2c 20 41 4e = XOR64(Bsu, AN
16b0: 44 6e 75 36 34 28 42 73 61 2c 20 42 73 65 29 29 Dnu64(Bsa, Bse))
16c0: 3b 20 5c 0a 20 20 20 20 43 75 20 3d 20 45 23 23 ; \. Cu = E##
16d0: 73 75 3b 20 5c 0a 5c 0a 20 20 20 20 5a 65 72 6f su; \.\. Zero
16e0: 20 3d 20 5a 45 52 4f 31 32 38 28 29 3b 20 5c 0a = ZERO128(); \.
16f0: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 XOReq128(Cae
1700: 2c 20 47 45 54 36 34 48 49 48 49 28 43 75 61 2c , GET64HIHI(Cua,
1710: 20 5a 65 72 6f 29 29 3b 20 5c 0a 20 20 20 20 58 Zero)); \. X
1720: 4f 52 65 71 31 32 38 28 43 61 65 2c 20 47 45 54 OReq128(Cae, GET
1730: 36 34 4c 4f 4c 4f 28 5a 65 72 6f 2c 20 43 65 69 64LOLO(Zero, Cei
1740: 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 )); \. XOReq1
1750: 32 38 28 43 69 6f 2c 20 47 45 54 36 34 48 49 48 28(Cio, GET64HIH
1760: 49 28 43 65 69 2c 20 5a 65 72 6f 29 29 3b 20 5c I(Cei, Zero)); \
1770: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 . XOReq128(Ci
1780: 6f 2c 20 47 45 54 36 34 4c 4f 4c 4f 28 5a 65 72 o, GET64LOLO(Zer
1790: 6f 2c 20 43 6f 75 29 29 3b 20 5c 0a 20 20 20 20 o, Cou)); \.
17a0: 58 4f 52 65 71 31 32 38 28 43 75 61 2c 20 47 45 XOReq128(Cua, GE
17b0: 54 36 34 48 49 48 49 28 43 6f 75 2c 20 5a 65 72 T64HIHI(Cou, Zer
17c0: 6f 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 o)); \. XOReq
17d0: 36 34 28 43 75 2c 20 43 75 61 29 3b 20 5c 0a 0a 64(Cu, Cua); \..
17e0: 2f 2f 20 2d 2d 2d 20 54 68 65 74 61 20 52 68 6f // --- Theta Rho
17f0: 20 50 69 20 43 68 69 20 49 6f 74 61 0a 2f 2f 20 Pi Chi Iota.//
1800: 2d 2d 2d 20 36 34 2d 62 69 74 20 6c 61 6e 65 73 --- 64-bit lanes
1810: 20 6d 61 70 70 65 64 20 74 6f 20 36 34 2d 62 69 mapped to 64-bi
1820: 74 20 61 6e 64 20 31 32 38 2d 62 69 74 20 77 6f t and 128-bit wo
1830: 72 64 73 0a 23 64 65 66 69 6e 65 20 74 68 65 74 rds.#define thet
1840: 61 52 68 6f 50 69 43 68 69 49 6f 74 61 28 69 2c aRhoPiChiIota(i,
1850: 20 41 2c 20 45 29 20 74 68 65 74 61 52 68 6f 50 A, E) thetaRhoP
1860: 69 43 68 69 49 6f 74 61 50 72 65 70 61 72 65 54 iChiIotaPrepareT
1870: 68 65 74 61 28 69 2c 20 41 2c 20 45 29 0a 0a 63 heta(i, A, E)..c
1880: 6f 6e 73 74 20 55 49 4e 54 36 34 20 4b 65 63 63 onst UINT64 Kecc
1890: 61 6b 46 31 36 30 30 52 6f 75 6e 64 43 6f 6e 73 akF1600RoundCons
18a0: 74 61 6e 74 73 5b 32 34 5d 20 3d 20 7b 0a 20 20 tants[24] = {.
18b0: 20 20 30 78 30 30 30 30 30 30 30 30 30 30 30 30 0x000000000000
18c0: 30 30 30 31 55 4c 4c 2c 0a 20 20 20 20 30 78 30 0001ULL,. 0x0
18d0: 30 30 30 30 30 30 30 30 30 30 30 38 30 38 32 55 000000000008082U
18e0: 4c 4c 2c 0a 20 20 20 20 30 78 38 30 30 30 30 30 LL,. 0x800000
18f0: 30 30 30 30 30 30 38 30 38 61 55 4c 4c 2c 0a 20 000000808aULL,.
1900: 20 20 20 30 78 38 30 30 30 30 30 30 30 38 30 30 0x80000000800
1910: 30 38 30 30 30 55 4c 4c 2c 0a 20 20 20 20 30 78 08000ULL,. 0x
1920: 30 30 30 30 30 30 30 30 30 30 30 30 38 30 38 62 000000000000808b
1930: 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30 30 30 ULL,. 0x00000
1940: 30 30 30 38 30 30 30 30 30 30 31 55 4c 4c 2c 0a 00080000001ULL,.
1950: 20 20 20 20 30 78 38 30 30 30 30 30 30 30 38 30 0x8000000080
1960: 30 30 38 30 38 31 55 4c 4c 2c 0a 20 20 20 20 30 008081ULL,. 0
1970: 78 38 30 30 30 30 30 30 30 30 30 30 30 38 30 30 x800000000000800
1980: 39 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30 30 9ULL,. 0x0000
1990: 30 30 30 30 30 30 30 30 30 30 38 61 55 4c 4c 2c 00000000008aULL,
19a0: 0a 20 20 20 20 30 78 30 30 30 30 30 30 30 30 30 . 0x000000000
19b0: 30 30 30 30 30 38 38 55 4c 4c 2c 0a 20 20 20 20 0000088ULL,.
19c0: 30 78 30 30 30 30 30 30 30 30 38 30 30 30 38 30 0x00000000800080
19d0: 30 39 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30 09ULL,. 0x000
19e0: 30 30 30 30 30 38 30 30 30 30 30 30 61 55 4c 4c 000008000000aULL
19f0: 2c 0a 20 20 20 20 30 78 30 30 30 30 30 30 30 30 ,. 0x00000000
1a00: 38 30 30 30 38 30 38 62 55 4c 4c 2c 0a 20 20 20 8000808bULL,.
1a10: 20 30 78 38 30 30 30 30 30 30 30 30 30 30 30 30 0x8000000000000
1a20: 30 38 62 55 4c 4c 2c 0a 20 20 20 20 30 78 38 30 08bULL,. 0x80
1a30: 30 30 30 30 30 30 30 30 30 30 38 30 38 39 55 4c 00000000008089UL
1a40: 4c 2c 0a 20 20 20 20 30 78 38 30 30 30 30 30 30 L,. 0x8000000
1a50: 30 30 30 30 30 38 30 30 33 55 4c 4c 2c 0a 20 20 000008003ULL,.
1a60: 20 20 30 78 38 30 30 30 30 30 30 30 30 30 30 30 0x800000000000
1a70: 38 30 30 32 55 4c 4c 2c 0a 20 20 20 20 30 78 38 8002ULL,. 0x8
1a80: 30 30 30 30 30 30 30 30 30 30 30 30 30 38 30 55 000000000000080U
1a90: 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30 30 30 30 LL,. 0x000000
1aa0: 30 30 30 30 30 30 38 30 30 61 55 4c 4c 2c 0a 20 000000800aULL,.
1ab0: 20 20 20 30 78 38 30 30 30 30 30 30 30 38 30 30 0x80000000800
1ac0: 30 30 30 30 61 55 4c 4c 2c 0a 20 20 20 20 30 78 0000aULL,. 0x
1ad0: 38 30 30 30 30 30 30 30 38 30 30 30 38 30 38 31 8000000080008081
1ae0: 55 4c 4c 2c 0a 20 20 20 20 30 78 38 30 30 30 30 ULL,. 0x80000
1af0: 30 30 30 30 30 30 30 38 30 38 30 55 4c 4c 2c 0a 00000008080ULL,.
1b00: 20 20 20 20 30 78 30 30 30 30 30 30 30 30 38 30 0x0000000080
1b10: 30 30 30 30 30 31 55 4c 4c 2c 0a 20 20 20 20 30 000001ULL,. 0
1b20: 78 38 30 30 30 30 30 30 30 38 30 30 30 38 30 30 x800000008000800
1b30: 38 55 4c 4c 20 7d 3b 0a 0a 23 64 65 66 69 6e 65 8ULL };..#define
1b40: 20 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 41 6e copyFromStateAn
1b50: 64 58 6f 72 35 37 36 62 69 74 73 28 58 2c 20 73 dXor576bits(X, s
1b60: 74 61 74 65 2c 20 69 6e 70 75 74 29 20 5c 0a 20 tate, input) \.
1b70: 20 20 20 58 23 23 62 61 65 2e 76 31 32 38 20 3d X##bae.v128 =
1b80: 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 XOR128(LOAD128(
1b90: 73 74 61 74 65 5b 20 30 5d 29 2c 20 4c 4f 41 44 state[ 0]), LOAD
1ba0: 31 32 38 75 28 69 6e 70 75 74 5b 20 30 5d 29 29 128u(input[ 0]))
1bb0: 3b 20 5c 0a 20 20 20 20 58 23 23 62 61 20 3d 20 ; \. X##ba =
1bc0: 58 23 23 62 61 65 2e 76 31 32 38 3b 20 5c 0a 20 X##bae.v128; \.
1bd0: 20 20 20 58 23 23 62 65 20 3d 20 47 45 54 36 34 X##be = GET64
1be0: 48 49 48 49 28 58 23 23 62 61 65 2e 76 31 32 38 HIHI(X##bae.v128
1bf0: 2c 20 58 23 23 62 61 65 2e 76 31 32 38 29 3b 20 , X##bae.v128);
1c00: 5c 0a 20 20 20 20 43 61 65 20 3d 20 58 23 23 62 \. Cae = X##b
1c10: 61 65 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 ae.v128; \. X
1c20: 23 23 62 69 6f 2e 76 31 32 38 20 3d 20 58 4f 52 ##bio.v128 = XOR
1c30: 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 128(LOAD128(stat
1c40: 65 5b 20 32 5d 29 2c 20 4c 4f 41 44 31 32 38 75 e[ 2]), LOAD128u
1c50: 28 69 6e 70 75 74 5b 20 32 5d 29 29 3b 20 5c 0a (input[ 2])); \.
1c60: 20 20 20 20 58 23 23 62 69 20 3d 20 58 23 23 62 X##bi = X##b
1c70: 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 io.v128; \. X
1c80: 23 23 62 6f 20 3d 20 47 45 54 36 34 48 49 48 49 ##bo = GET64HIHI
1c90: 28 58 23 23 62 69 6f 2e 76 31 32 38 2c 20 58 23 (X##bio.v128, X#
1ca0: 23 62 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 #bio.v128); \.
1cb0: 20 20 43 69 6f 20 3d 20 58 23 23 62 69 6f 2e 76 Cio = X##bio.v
1cc0: 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 128; \. X##bu
1cd0: 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 = XOR64(LOAD64(
1ce0: 73 74 61 74 65 5b 20 34 5d 29 2c 20 4c 4f 41 44 state[ 4]), LOAD
1cf0: 36 34 28 69 6e 70 75 74 5b 20 34 5d 29 29 3b 20 64(input[ 4]));
1d00: 5c 0a 20 20 20 20 43 75 20 3d 20 58 23 23 62 75 \. Cu = X##bu
1d10: 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 65 2e 76 ; \. X##gae.v
1d20: 31 32 38 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 128 = XOR128(LOA
1d30: 44 31 32 38 75 28 73 74 61 74 65 5b 20 35 5d 29 D128u(state[ 5])
1d40: 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 75 74 , LOAD128u(input
1d50: 5b 20 35 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 [ 5])); \. X#
1d60: 23 67 61 20 3d 20 58 23 23 67 61 65 2e 76 31 32 #ga = X##gae.v12
1d70: 38 3b 20 5c 0a 20 20 20 20 58 23 23 67 65 20 3d 8; \. X##ge =
1d80: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67 61 GET64HIHI(X##ga
1d90: 65 2e 76 31 32 38 2c 20 58 23 23 67 61 65 2e 76 e.v128, X##gae.v
1da0: 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 128); \. X##b
1db0: 61 67 65 2e 76 31 32 38 20 3d 20 47 45 54 36 34 age.v128 = GET64
1dc0: 4c 4f 4c 4f 28 58 23 23 62 61 2c 20 58 23 23 67 LOLO(X##ba, X##g
1dd0: 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 e); \. XOReq1
1de0: 32 38 28 43 61 65 2c 20 58 23 23 67 61 65 2e 76 28(Cae, X##gae.v
1df0: 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 128); \. X##g
1e00: 69 6f 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 38 io.v128 = XOR128
1e10: 28 4c 4f 41 44 31 32 38 75 28 73 74 61 74 65 5b (LOAD128u(state[
1e20: 20 37 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 7]), LOAD128u(i
1e30: 6e 70 75 74 5b 20 37 5d 29 29 3b 20 5c 0a 20 20 nput[ 7])); \.
1e40: 20 20 58 23 23 67 69 20 3d 20 58 23 23 67 69 6f X##gi = X##gio
1e50: 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 .v128; \. X##
1e60: 62 65 67 69 2e 76 31 32 38 20 3d 20 47 45 54 36 begi.v128 = GET6
1e70: 34 4c 4f 4c 4f 28 58 23 23 62 65 2c 20 58 23 23 4LOLO(X##be, X##
1e80: 67 69 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 6f gi); \. X##go
1e90: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 = GET64HIHI(X##
1ea0: 67 69 6f 2e 76 31 32 38 2c 20 58 23 23 67 69 6f gio.v128, X##gio
1eb0: 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f .v128); \. XO
1ec0: 52 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 67 Req128(Cio, X##g
1ed0: 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 io.v128); \.
1ee0: 58 23 23 67 75 20 3d 20 4c 4f 41 44 36 34 28 73 X##gu = LOAD64(s
1ef0: 74 61 74 65 5b 20 39 5d 29 3b 20 5c 0a 20 20 20 tate[ 9]); \.
1f00: 20 58 4f 52 65 71 36 34 28 43 75 2c 20 58 23 23 XOReq64(Cu, X##
1f10: 67 75 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 gu); \. X##ka
1f20: 65 2e 76 31 32 38 20 3d 20 4c 4f 41 44 31 32 38 e.v128 = LOAD128
1f30: 28 73 74 61 74 65 5b 31 30 5d 29 3b 20 5c 0a 20 (state[10]); \.
1f40: 20 20 20 58 23 23 6b 61 20 3d 20 58 23 23 6b 61 X##ka = X##ka
1f50: 65 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 e.v128; \. X#
1f60: 23 6b 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 #ke = GET64HIHI(
1f70: 58 23 23 6b 61 65 2e 76 31 32 38 2c 20 58 23 23 X##kae.v128, X##
1f80: 6b 61 65 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 kae.v128); \.
1f90: 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58 XOReq128(Cae, X
1fa0: 23 23 6b 61 65 2e 76 31 32 38 29 3b 20 5c 0a 20 ##kae.v128); \.
1fb0: 20 20 20 58 23 23 6b 69 6f 2e 76 31 32 38 20 3d X##kio.v128 =
1fc0: 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 LOAD128(state[1
1fd0: 32 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 2]); \. X##ki
1fe0: 20 3d 20 58 23 23 6b 69 6f 2e 76 31 32 38 3b 20 = X##kio.v128;
1ff0: 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d 20 47 45 \. X##ko = GE
2000: 54 36 34 48 49 48 49 28 58 23 23 6b 69 6f 2e 76 T64HIHI(X##kio.v
2010: 31 32 38 2c 20 58 23 23 6b 69 6f 2e 76 31 32 38 128, X##kio.v128
2020: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 ); \. XOReq12
2030: 38 28 43 69 6f 2c 20 58 23 23 6b 69 6f 2e 76 31 8(Cio, X##kio.v1
2040: 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 28); \. X##ku
2050: 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b = LOAD64(state[
2060: 31 34 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 14]); \. XORe
2070: 71 36 34 28 43 75 2c 20 58 23 23 6b 75 29 3b 20 q64(Cu, X##ku);
2080: 5c 0a 20 20 20 20 58 23 23 6d 61 65 2e 76 31 32 \. X##mae.v12
2090: 38 20 3d 20 4c 4f 41 44 31 32 38 75 28 73 74 61 8 = LOAD128u(sta
20a0: 74 65 5b 31 35 5d 29 3b 20 5c 0a 20 20 20 20 58 te[15]); \. X
20b0: 23 23 6d 61 20 3d 20 58 23 23 6d 61 65 2e 76 31 ##ma = X##mae.v1
20c0: 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 6d 65 20 28; \. X##me
20d0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6d = GET64HIHI(X##m
20e0: 61 65 2e 76 31 32 38 2c 20 58 23 23 6d 61 65 2e ae.v128, X##mae.
20f0: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 v128); \. X##
2100: 6b 61 6d 65 2e 76 31 32 38 20 3d 20 47 45 54 36 kame.v128 = GET6
2110: 34 4c 4f 4c 4f 28 58 23 23 6b 61 2c 20 58 23 23 4LOLO(X##ka, X##
2120: 6d 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 me); \. XOReq
2130: 31 32 38 28 43 61 65 2c 20 58 23 23 6d 61 65 2e 128(Cae, X##mae.
2140: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 v128); \. X##
2150: 6d 69 6f 2e 76 31 32 38 20 3d 20 4c 4f 41 44 31 mio.v128 = LOAD1
2160: 32 38 75 28 73 74 61 74 65 5b 31 37 5d 29 3b 20 28u(state[17]);
2170: 5c 0a 20 20 20 20 58 23 23 6d 69 20 3d 20 58 23 \. X##mi = X#
2180: 23 6d 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 #mio.v128; \.
2190: 20 58 23 23 6b 65 6d 69 2e 76 31 32 38 20 3d 20 X##kemi.v128 =
21a0: 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 65 2c GET64LOLO(X##ke,
21b0: 20 58 23 23 6d 69 29 3b 20 5c 0a 20 20 20 20 58 X##mi); \. X
21c0: 23 23 6d 6f 20 3d 20 47 45 54 36 34 48 49 48 49 ##mo = GET64HIHI
21d0: 28 58 23 23 6d 69 6f 2e 76 31 32 38 2c 20 58 23 (X##mio.v128, X#
21e0: 23 6d 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 #mio.v128); \.
21f0: 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 XOReq128(Cio,
2200: 58 23 23 6d 69 6f 2e 76 31 32 38 29 3b 20 5c 0a X##mio.v128); \.
2210: 20 20 20 20 58 23 23 6d 75 20 3d 20 4c 4f 41 44 X##mu = LOAD
2220: 36 34 28 73 74 61 74 65 5b 31 39 5d 29 3b 20 5c 64(state[19]); \
2230: 0a 20 20 20 20 58 4f 52 65 71 36 34 28 43 75 2c . XOReq64(Cu,
2240: 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58 X##mu); \. X
2250: 23 23 73 61 65 2e 76 31 32 38 20 3d 20 4c 4f 41 ##sae.v128 = LOA
2260: 44 31 32 38 28 73 74 61 74 65 5b 32 30 5d 29 3b D128(state[20]);
2270: 20 5c 0a 20 20 20 20 58 23 23 73 61 20 3d 20 58 \. X##sa = X
2280: 23 23 73 61 65 2e 76 31 32 38 3b 20 5c 0a 20 20 ##sae.v128; \.
2290: 20 20 58 23 23 73 65 20 3d 20 47 45 54 36 34 48 X##se = GET64H
22a0: 49 48 49 28 58 23 23 73 61 65 2e 76 31 32 38 2c IHI(X##sae.v128,
22b0: 20 58 23 23 73 61 65 2e 76 31 32 38 29 3b 20 5c X##sae.v128); \
22c0: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 . XOReq128(Ca
22d0: 65 2c 20 58 23 23 73 61 65 2e 76 31 32 38 29 3b e, X##sae.v128);
22e0: 20 5c 0a 20 20 20 20 58 23 23 73 69 6f 2e 76 31 \. X##sio.v1
22f0: 32 38 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 28 = LOAD128(sta
2300: 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 20 20 58 te[22]); \. X
2310: 23 23 73 69 20 3d 20 58 23 23 73 69 6f 2e 76 31 ##si = X##sio.v1
2320: 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 73 6f 20 28; \. X##so
2330: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 73 = GET64HIHI(X##s
2340: 69 6f 2e 76 31 32 38 2c 20 58 23 23 73 69 6f 2e io.v128, X##sio.
2350: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f 52 v128); \. XOR
2360: 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 73 69 eq128(Cio, X##si
2370: 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 o.v128); \. X
2380: 23 23 73 75 20 3d 20 4c 4f 41 44 36 34 28 73 74 ##su = LOAD64(st
2390: 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 20 20 ate[24]); \.
23a0: 58 4f 52 65 71 36 34 28 43 75 2c 20 58 23 23 73 XOReq64(Cu, X##s
23b0: 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20 63 u); \..#define c
23c0: 6f 70 79 46 72 6f 6d 53 74 61 74 65 41 6e 64 58 opyFromStateAndX
23d0: 6f 72 38 33 32 62 69 74 73 28 58 2c 20 73 74 61 or832bits(X, sta
23e0: 74 65 2c 20 69 6e 70 75 74 29 20 5c 0a 20 20 20 te, input) \.
23f0: 20 58 23 23 62 61 65 2e 76 31 32 38 20 3d 20 58 X##bae.v128 = X
2400: 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 OR128(LOAD128(st
2410: 61 74 65 5b 20 30 5d 29 2c 20 4c 4f 41 44 31 32 ate[ 0]), LOAD12
2420: 38 75 28 69 6e 70 75 74 5b 20 30 5d 29 29 3b 20 8u(input[ 0]));
2430: 5c 0a 20 20 20 20 58 23 23 62 61 20 3d 20 58 23 \. X##ba = X#
2440: 23 62 61 65 2e 76 31 32 38 3b 20 5c 0a 20 20 20 #bae.v128; \.
2450: 20 58 23 23 62 65 20 3d 20 47 45 54 36 34 48 49 X##be = GET64HI
2460: 48 49 28 58 23 23 62 61 65 2e 76 31 32 38 2c 20 HI(X##bae.v128,
2470: 58 23 23 62 61 65 2e 76 31 32 38 29 3b 20 5c 0a X##bae.v128); \.
2480: 20 20 20 20 43 61 65 20 3d 20 58 23 23 62 61 65 Cae = X##bae
2490: 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 .v128; \. X##
24a0: 62 69 6f 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 bio.v128 = XOR12
24b0: 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 8(LOAD128(state[
24c0: 20 32 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 2]), LOAD128u(i
24d0: 6e 70 75 74 5b 20 32 5d 29 29 3b 20 5c 0a 20 20 nput[ 2])); \.
24e0: 20 20 58 23 23 62 69 20 3d 20 58 23 23 62 69 6f X##bi = X##bio
24f0: 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 .v128; \. X##
2500: 62 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 bo = GET64HIHI(X
2510: 23 23 62 69 6f 2e 76 31 32 38 2c 20 58 23 23 62 ##bio.v128, X##b
2520: 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 io.v128); \.
2530: 43 69 6f 20 3d 20 58 23 23 62 69 6f 2e 76 31 32 Cio = X##bio.v12
2540: 38 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 20 3d 8; \. X##bu =
2550: 20 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 XOR64(LOAD64(st
2560: 61 74 65 5b 20 34 5d 29 2c 20 4c 4f 41 44 36 34 ate[ 4]), LOAD64
2570: 28 69 6e 70 75 74 5b 20 34 5d 29 29 3b 20 5c 0a (input[ 4])); \.
2580: 20 20 20 20 43 75 20 3d 20 58 23 23 62 75 3b 20 Cu = X##bu;
2590: 5c 0a 20 20 20 20 58 23 23 67 61 65 2e 76 31 32 \. X##gae.v12
25a0: 38 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 8 = XOR128(LOAD1
25b0: 32 38 75 28 73 74 61 74 65 5b 20 35 5d 29 2c 20 28u(state[ 5]),
25c0: 4c 4f 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 LOAD128u(input[
25d0: 35 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 5])); \. X##g
25e0: 61 20 3d 20 58 23 23 67 61 65 2e 76 31 32 38 3b a = X##gae.v128;
25f0: 20 5c 0a 20 20 20 20 58 23 23 67 65 20 3d 20 47 \. X##ge = G
2600: 45 54 36 34 48 49 48 49 28 58 23 23 67 61 65 2e ET64HIHI(X##gae.
2610: 76 31 32 38 2c 20 58 23 23 67 61 65 2e 76 31 32 v128, X##gae.v12
2620: 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 61 67 8); \. X##bag
2630: 65 2e 76 31 32 38 20 3d 20 47 45 54 36 34 4c 4f e.v128 = GET64LO
2640: 4c 4f 28 58 23 23 62 61 2c 20 58 23 23 67 65 29 LO(X##ba, X##ge)
2650: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 ; \. XOReq128
2660: 28 43 61 65 2c 20 58 23 23 67 61 65 2e 76 31 32 (Cae, X##gae.v12
2670: 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 6f 8); \. X##gio
2680: 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 4c .v128 = XOR128(L
2690: 4f 41 44 31 32 38 75 28 73 74 61 74 65 5b 20 37 OAD128u(state[ 7
26a0: 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 ]), LOAD128u(inp
26b0: 75 74 5b 20 37 5d 29 29 3b 20 5c 0a 20 20 20 20 ut[ 7])); \.
26c0: 58 23 23 67 69 20 3d 20 58 23 23 67 69 6f 2e 76 X##gi = X##gio.v
26d0: 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 128; \. X##be
26e0: 67 69 2e 76 31 32 38 20 3d 20 47 45 54 36 34 4c gi.v128 = GET64L
26f0: 4f 4c 4f 28 58 23 23 62 65 2c 20 58 23 23 67 69 OLO(X##be, X##gi
2700: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 6f 20 3d ); \. X##go =
2710: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67 69 GET64HIHI(X##gi
2720: 6f 2e 76 31 32 38 2c 20 58 23 23 67 69 6f 2e 76 o.v128, X##gio.v
2730: 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 128); \. XORe
2740: 71 31 32 38 28 43 69 6f 2c 20 58 23 23 67 69 6f q128(Cio, X##gio
2750: 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 .v128); \. X#
2760: 23 67 75 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 #gu = XOR64(LOAD
2770: 36 34 28 73 74 61 74 65 5b 20 39 5d 29 2c 20 4c 64(state[ 9]), L
2780: 4f 41 44 36 34 28 69 6e 70 75 74 5b 20 39 5d 29 OAD64(input[ 9])
2790: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 ); \. XOReq64
27a0: 28 43 75 2c 20 58 23 23 67 75 29 3b 20 5c 0a 20 (Cu, X##gu); \.
27b0: 20 20 20 58 23 23 6b 61 65 2e 76 31 32 38 20 3d X##kae.v128 =
27c0: 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 XOR128(LOAD128(
27d0: 73 74 61 74 65 5b 31 30 5d 29 2c 20 4c 4f 41 44 state[10]), LOAD
27e0: 31 32 38 75 28 69 6e 70 75 74 5b 31 30 5d 29 29 128u(input[10]))
27f0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 20 3d 20 ; \. X##ka =
2800: 58 23 23 6b 61 65 2e 76 31 32 38 3b 20 5c 0a 20 X##kae.v128; \.
2810: 20 20 20 58 23 23 6b 65 20 3d 20 47 45 54 36 34 X##ke = GET64
2820: 48 49 48 49 28 58 23 23 6b 61 65 2e 76 31 32 38 HIHI(X##kae.v128
2830: 2c 20 58 23 23 6b 61 65 2e 76 31 32 38 29 3b 20 , X##kae.v128);
2840: 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 \. XOReq128(C
2850: 61 65 2c 20 58 23 23 6b 61 65 2e 76 31 32 38 29 ae, X##kae.v128)
2860: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 6f 2e 76 ; \. X##kio.v
2870: 31 32 38 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 128 = XOR128(LOA
2880: 44 31 32 38 28 73 74 61 74 65 5b 31 32 5d 29 2c D128(state[12]),
2890: 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b 31 32 LOAD64(input[12
28a0: 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 ])); \. X##ki
28b0: 20 3d 20 58 23 23 6b 69 6f 2e 76 31 32 38 3b 20 = X##kio.v128;
28c0: 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d 20 47 45 \. X##ko = GE
28d0: 54 36 34 48 49 48 49 28 58 23 23 6b 69 6f 2e 76 T64HIHI(X##kio.v
28e0: 31 32 38 2c 20 58 23 23 6b 69 6f 2e 76 31 32 38 128, X##kio.v128
28f0: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 ); \. XOReq12
2900: 38 28 43 69 6f 2c 20 58 23 23 6b 69 6f 2e 76 31 8(Cio, X##kio.v1
2910: 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 28); \. X##ku
2920: 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b = LOAD64(state[
2930: 31 34 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 14]); \. XORe
2940: 71 36 34 28 43 75 2c 20 58 23 23 6b 75 29 3b 20 q64(Cu, X##ku);
2950: 5c 0a 20 20 20 20 58 23 23 6d 61 65 2e 76 31 32 \. X##mae.v12
2960: 38 20 3d 20 4c 4f 41 44 31 32 38 75 28 73 74 61 8 = LOAD128u(sta
2970: 74 65 5b 31 35 5d 29 3b 20 5c 0a 20 20 20 20 58 te[15]); \. X
2980: 23 23 6d 61 20 3d 20 58 23 23 6d 61 65 2e 76 31 ##ma = X##mae.v1
2990: 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 6d 65 20 28; \. X##me
29a0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6d = GET64HIHI(X##m
29b0: 61 65 2e 76 31 32 38 2c 20 58 23 23 6d 61 65 2e ae.v128, X##mae.
29c0: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 v128); \. X##
29d0: 6b 61 6d 65 2e 76 31 32 38 20 3d 20 47 45 54 36 kame.v128 = GET6
29e0: 34 4c 4f 4c 4f 28 58 23 23 6b 61 2c 20 58 23 23 4LOLO(X##ka, X##
29f0: 6d 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 me); \. XOReq
2a00: 31 32 38 28 43 61 65 2c 20 58 23 23 6d 61 65 2e 128(Cae, X##mae.
2a10: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 v128); \. X##
2a20: 6d 69 6f 2e 76 31 32 38 20 3d 20 4c 4f 41 44 31 mio.v128 = LOAD1
2a30: 32 38 75 28 73 74 61 74 65 5b 31 37 5d 29 3b 20 28u(state[17]);
2a40: 5c 0a 20 20 20 20 58 23 23 6d 69 20 3d 20 58 23 \. X##mi = X#
2a50: 23 6d 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 #mio.v128; \.
2a60: 20 58 23 23 6b 65 6d 69 2e 76 31 32 38 20 3d 20 X##kemi.v128 =
2a70: 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 65 2c GET64LOLO(X##ke,
2a80: 20 58 23 23 6d 69 29 3b 20 5c 0a 20 20 20 20 58 X##mi); \. X
2a90: 23 23 6d 6f 20 3d 20 47 45 54 36 34 48 49 48 49 ##mo = GET64HIHI
2aa0: 28 58 23 23 6d 69 6f 2e 76 31 32 38 2c 20 58 23 (X##mio.v128, X#
2ab0: 23 6d 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 #mio.v128); \.
2ac0: 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 XOReq128(Cio,
2ad0: 58 23 23 6d 69 6f 2e 76 31 32 38 29 3b 20 5c 0a X##mio.v128); \.
2ae0: 20 20 20 20 58 23 23 6d 75 20 3d 20 4c 4f 41 44 X##mu = LOAD
2af0: 36 34 28 73 74 61 74 65 5b 31 39 5d 29 3b 20 5c 64(state[19]); \
2b00: 0a 20 20 20 20 58 4f 52 65 71 36 34 28 43 75 2c . XOReq64(Cu,
2b10: 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58 X##mu); \. X
2b20: 23 23 73 61 65 2e 76 31 32 38 20 3d 20 4c 4f 41 ##sae.v128 = LOA
2b30: 44 31 32 38 28 73 74 61 74 65 5b 32 30 5d 29 3b D128(state[20]);
2b40: 20 5c 0a 20 20 20 20 58 23 23 73 61 20 3d 20 58 \. X##sa = X
2b50: 23 23 73 61 65 2e 76 31 32 38 3b 20 5c 0a 20 20 ##sae.v128; \.
2b60: 20 20 58 23 23 73 65 20 3d 20 47 45 54 36 34 48 X##se = GET64H
2b70: 49 48 49 28 58 23 23 73 61 65 2e 76 31 32 38 2c IHI(X##sae.v128,
2b80: 20 58 23 23 73 61 65 2e 76 31 32 38 29 3b 20 5c X##sae.v128); \
2b90: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 . XOReq128(Ca
2ba0: 65 2c 20 58 23 23 73 61 65 2e 76 31 32 38 29 3b e, X##sae.v128);
2bb0: 20 5c 0a 20 20 20 20 58 23 23 73 69 6f 2e 76 31 \. X##sio.v1
2bc0: 32 38 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 28 = LOAD128(sta
2bd0: 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 20 20 58 te[22]); \. X
2be0: 23 23 73 69 20 3d 20 58 23 23 73 69 6f 2e 76 31 ##si = X##sio.v1
2bf0: 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 73 6f 20 28; \. X##so
2c00: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 73 = GET64HIHI(X##s
2c10: 69 6f 2e 76 31 32 38 2c 20 58 23 23 73 69 6f 2e io.v128, X##sio.
2c20: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f 52 v128); \. XOR
2c30: 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 73 69 eq128(Cio, X##si
2c40: 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 o.v128); \. X
2c50: 23 23 73 75 20 3d 20 4c 4f 41 44 36 34 28 73 74 ##su = LOAD64(st
2c60: 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 20 20 ate[24]); \.
2c70: 58 4f 52 65 71 36 34 28 43 75 2c 20 58 23 23 73 XOReq64(Cu, X##s
2c80: 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20 63 u); \..#define c
2c90: 6f 70 79 46 72 6f 6d 53 74 61 74 65 41 6e 64 58 opyFromStateAndX
2ca0: 6f 72 31 30 32 34 62 69 74 73 28 58 2c 20 73 74 or1024bits(X, st
2cb0: 61 74 65 2c 20 69 6e 70 75 74 29 20 5c 0a 20 20 ate, input) \.
2cc0: 20 20 58 23 23 62 61 65 2e 76 31 32 38 20 3d 20 X##bae.v128 =
2cd0: 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 XOR128(LOAD128(s
2ce0: 74 61 74 65 5b 20 30 5d 29 2c 20 4c 4f 41 44 31 tate[ 0]), LOAD1
2cf0: 32 38 75 28 69 6e 70 75 74 5b 20 30 5d 29 29 3b 28u(input[ 0]));
2d00: 20 5c 0a 20 20 20 20 58 23 23 62 61 20 3d 20 58 \. X##ba = X
2d10: 23 23 62 61 65 2e 76 31 32 38 3b 20 5c 0a 20 20 ##bae.v128; \.
2d20: 20 20 58 23 23 62 65 20 3d 20 47 45 54 36 34 48 X##be = GET64H
2d30: 49 48 49 28 58 23 23 62 61 65 2e 76 31 32 38 2c IHI(X##bae.v128,
2d40: 20 58 23 23 62 61 65 2e 76 31 32 38 29 3b 20 5c X##bae.v128); \
2d50: 0a 20 20 20 20 43 61 65 20 3d 20 58 23 23 62 61 . Cae = X##ba
2d60: 65 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 e.v128; \. X#
2d70: 23 62 69 6f 2e 76 31 32 38 20 3d 20 58 4f 52 31 #bio.v128 = XOR1
2d80: 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 28(LOAD128(state
2d90: 5b 20 32 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 [ 2]), LOAD128u(
2da0: 69 6e 70 75 74 5b 20 32 5d 29 29 3b 20 5c 0a 20 input[ 2])); \.
2db0: 20 20 20 58 23 23 62 69 20 3d 20 58 23 23 62 69 X##bi = X##bi
2dc0: 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 o.v128; \. X#
2dd0: 23 62 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28 #bo = GET64HIHI(
2de0: 58 23 23 62 69 6f 2e 76 31 32 38 2c 20 58 23 23 X##bio.v128, X##
2df0: 62 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 bio.v128); \.
2e00: 20 43 69 6f 20 3d 20 58 23 23 62 69 6f 2e 76 31 Cio = X##bio.v1
2e10: 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 20 28; \. X##bu
2e20: 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 = XOR64(LOAD64(s
2e30: 74 61 74 65 5b 20 34 5d 29 2c 20 4c 4f 41 44 36 tate[ 4]), LOAD6
2e40: 34 28 69 6e 70 75 74 5b 20 34 5d 29 29 3b 20 5c 4(input[ 4])); \
2e50: 0a 20 20 20 20 43 75 20 3d 20 58 23 23 62 75 3b . Cu = X##bu;
2e60: 20 5c 0a 20 20 20 20 58 23 23 67 61 65 2e 76 31 \. X##gae.v1
2e70: 32 38 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 28 = XOR128(LOAD
2e80: 31 32 38 75 28 73 74 61 74 65 5b 20 35 5d 29 2c 128u(state[ 5]),
2e90: 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 75 74 5b LOAD128u(input[
2ea0: 20 35 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 5])); \. X##
2eb0: 67 61 20 3d 20 58 23 23 67 61 65 2e 76 31 32 38 ga = X##gae.v128
2ec0: 3b 20 5c 0a 20 20 20 20 58 23 23 67 65 20 3d 20 ; \. X##ge =
2ed0: 47 45 54 36 34 48 49 48 49 28 58 23 23 67 61 65 GET64HIHI(X##gae
2ee0: 2e 76 31 32 38 2c 20 58 23 23 67 61 65 2e 76 31 .v128, X##gae.v1
2ef0: 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 61 28); \. X##ba
2f00: 67 65 2e 76 31 32 38 20 3d 20 47 45 54 36 34 4c ge.v128 = GET64L
2f10: 4f 4c 4f 28 58 23 23 62 61 2c 20 58 23 23 67 65 OLO(X##ba, X##ge
2f20: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 ); \. XOReq12
2f30: 38 28 43 61 65 2c 20 58 23 23 67 61 65 2e 76 31 8(Cae, X##gae.v1
2f40: 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 28); \. X##gi
2f50: 6f 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 o.v128 = XOR128(
2f60: 4c 4f 41 44 31 32 38 75 28 73 74 61 74 65 5b 20 LOAD128u(state[
2f70: 37 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 7]), LOAD128u(in
2f80: 70 75 74 5b 20 37 5d 29 29 3b 20 5c 0a 20 20 20 put[ 7])); \.
2f90: 20 58 23 23 67 69 20 3d 20 58 23 23 67 69 6f 2e X##gi = X##gio.
2fa0: 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 62 v128; \. X##b
2fb0: 65 67 69 2e 76 31 32 38 20 3d 20 47 45 54 36 34 egi.v128 = GET64
2fc0: 4c 4f 4c 4f 28 58 23 23 62 65 2c 20 58 23 23 67 LOLO(X##be, X##g
2fd0: 69 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 6f 20 i); \. X##go
2fe0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67 = GET64HIHI(X##g
2ff0: 69 6f 2e 76 31 32 38 2c 20 58 23 23 67 69 6f 2e io.v128, X##gio.
3000: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f 52 v128); \. XOR
3010: 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 67 69 eq128(Cio, X##gi
3020: 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 o.v128); \. X
3030: 23 23 67 75 20 3d 20 58 4f 52 36 34 28 4c 4f 41 ##gu = XOR64(LOA
3040: 44 36 34 28 73 74 61 74 65 5b 20 39 5d 29 2c 20 D64(state[ 9]),
3050: 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b 20 39 5d LOAD64(input[ 9]
3060: 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 )); \. XOReq6
3070: 34 28 43 75 2c 20 58 23 23 67 75 29 3b 20 5c 0a 4(Cu, X##gu); \.
3080: 20 20 20 20 58 23 23 6b 61 65 2e 76 31 32 38 20 X##kae.v128
3090: 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 = XOR128(LOAD128
30a0: 28 73 74 61 74 65 5b 31 30 5d 29 2c 20 4c 4f 41 (state[10]), LOA
30b0: 44 31 32 38 75 28 69 6e 70 75 74 5b 31 30 5d 29 D128u(input[10])
30c0: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 20 3d ); \. X##ka =
30d0: 20 58 23 23 6b 61 65 2e 76 31 32 38 3b 20 5c 0a X##kae.v128; \.
30e0: 20 20 20 20 58 23 23 6b 65 20 3d 20 47 45 54 36 X##ke = GET6
30f0: 34 48 49 48 49 28 58 23 23 6b 61 65 2e 76 31 32 4HIHI(X##kae.v12
3100: 38 2c 20 58 23 23 6b 61 65 2e 76 31 32 38 29 3b 8, X##kae.v128);
3110: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 \. XOReq128(
3120: 43 61 65 2c 20 58 23 23 6b 61 65 2e 76 31 32 38 Cae, X##kae.v128
3130: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 6f 2e ); \. X##kio.
3140: 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 4c 4f v128 = XOR128(LO
3150: 41 44 31 32 38 28 73 74 61 74 65 5b 31 32 5d 29 AD128(state[12])
3160: 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 75 74 , LOAD128u(input
3170: 5b 31 32 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 [12])); \. X#
3180: 23 6b 69 20 3d 20 58 23 23 6b 69 6f 2e 76 31 32 #ki = X##kio.v12
3190: 38 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d 8; \. X##ko =
31a0: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6b 69 GET64HIHI(X##ki
31b0: 6f 2e 76 31 32 38 2c 20 58 23 23 6b 69 6f 2e 76 o.v128, X##kio.v
31c0: 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 128); \. XORe
31d0: 71 31 32 38 28 43 69 6f 2c 20 58 23 23 6b 69 6f q128(Cio, X##kio
31e0: 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 .v128); \. X#
31f0: 23 6b 75 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 #ku = XOR64(LOAD
3200: 36 34 28 73 74 61 74 65 5b 31 34 5d 29 2c 20 4c 64(state[14]), L
3210: 4f 41 44 36 34 28 69 6e 70 75 74 5b 31 34 5d 29 OAD64(input[14])
3220: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 ); \. XOReq64
3230: 28 43 75 2c 20 58 23 23 6b 75 29 3b 20 5c 0a 20 (Cu, X##ku); \.
3240: 20 20 20 58 23 23 6d 61 65 2e 76 31 32 38 20 3d X##mae.v128 =
3250: 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 75 XOR128(LOAD128u
3260: 28 73 74 61 74 65 5b 31 35 5d 29 2c 20 4c 4f 41 (state[15]), LOA
3270: 44 36 34 28 69 6e 70 75 74 5b 31 35 5d 29 29 3b D64(input[15]));
3280: 20 5c 0a 20 20 20 20 58 23 23 6d 61 20 3d 20 58 \. X##ma = X
3290: 23 23 6d 61 65 2e 76 31 32 38 3b 20 5c 0a 20 20 ##mae.v128; \.
32a0: 20 20 58 23 23 6d 65 20 3d 20 47 45 54 36 34 48 X##me = GET64H
32b0: 49 48 49 28 58 23 23 6d 61 65 2e 76 31 32 38 2c IHI(X##mae.v128,
32c0: 20 58 23 23 6d 61 65 2e 76 31 32 38 29 3b 20 5c X##mae.v128); \
32d0: 0a 20 20 20 20 58 23 23 6b 61 6d 65 2e 76 31 32 . X##kame.v12
32e0: 38 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 8 = GET64LOLO(X#
32f0: 23 6b 61 2c 20 58 23 23 6d 65 29 3b 20 5c 0a 20 #ka, X##me); \.
3300: 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c XOReq128(Cae,
3310: 20 58 23 23 6d 61 65 2e 76 31 32 38 29 3b 20 5c X##mae.v128); \
3320: 0a 20 20 20 20 58 23 23 6d 69 6f 2e 76 31 32 38 . X##mio.v128
3330: 20 3d 20 4c 4f 41 44 31 32 38 75 28 73 74 61 74 = LOAD128u(stat
3340: 65 5b 31 37 5d 29 3b 20 5c 0a 20 20 20 20 58 23 e[17]); \. X#
3350: 23 6d 69 20 3d 20 58 23 23 6d 69 6f 2e 76 31 32 #mi = X##mio.v12
3360: 38 3b 20 5c 0a 20 20 20 20 58 23 23 6b 65 6d 69 8; \. X##kemi
3370: 2e 76 31 32 38 20 3d 20 47 45 54 36 34 4c 4f 4c .v128 = GET64LOL
3380: 4f 28 58 23 23 6b 65 2c 20 58 23 23 6d 69 29 3b O(X##ke, X##mi);
3390: 20 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 47 \. X##mo = G
33a0: 45 54 36 34 48 49 48 49 28 58 23 23 6d 69 6f 2e ET64HIHI(X##mio.
33b0: 76 31 32 38 2c 20 58 23 23 6d 69 6f 2e 76 31 32 v128, X##mio.v12
33c0: 38 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 8); \. XOReq1
33d0: 32 38 28 43 69 6f 2c 20 58 23 23 6d 69 6f 2e 76 28(Cio, X##mio.v
33e0: 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 128); \. X##m
33f0: 75 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 u = LOAD64(state
3400: 5b 31 39 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 [19]); \. XOR
3410: 65 71 36 34 28 43 75 2c 20 58 23 23 6d 75 29 3b eq64(Cu, X##mu);
3420: 20 5c 0a 20 20 20 20 58 23 23 73 61 65 2e 76 31 \. X##sae.v1
3430: 32 38 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 28 = LOAD128(sta
3440: 74 65 5b 32 30 5d 29 3b 20 5c 0a 20 20 20 20 58 te[20]); \. X
3450: 23 23 73 61 20 3d 20 58 23 23 73 61 65 2e 76 31 ##sa = X##sae.v1
3460: 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 73 65 20 28; \. X##se
3470: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 73 = GET64HIHI(X##s
3480: 61 65 2e 76 31 32 38 2c 20 58 23 23 73 61 65 2e ae.v128, X##sae.
3490: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f 52 v128); \. XOR
34a0: 65 71 31 32 38 28 43 61 65 2c 20 58 23 23 73 61 eq128(Cae, X##sa
34b0: 65 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 e.v128); \. X
34c0: 23 23 73 69 6f 2e 76 31 32 38 20 3d 20 4c 4f 41 ##sio.v128 = LOA
34d0: 44 31 32 38 28 73 74 61 74 65 5b 32 32 5d 29 3b D128(state[22]);
34e0: 20 5c 0a 20 20 20 20 58 23 23 73 69 20 3d 20 58 \. X##si = X
34f0: 23 23 73 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 ##sio.v128; \.
3500: 20 20 58 23 23 73 6f 20 3d 20 47 45 54 36 34 48 X##so = GET64H
3510: 49 48 49 28 58 23 23 73 69 6f 2e 76 31 32 38 2c IHI(X##sio.v128,
3520: 20 58 23 23 73 69 6f 2e 76 31 32 38 29 3b 20 5c X##sio.v128); \
3530: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 . XOReq128(Ci
3540: 6f 2c 20 58 23 23 73 69 6f 2e 76 31 32 38 29 3b o, X##sio.v128);
3550: 20 5c 0a 20 20 20 20 58 23 23 73 75 20 3d 20 4c \. X##su = L
3560: 4f 41 44 36 34 28 73 74 61 74 65 5b 32 34 5d 29 OAD64(state[24])
3570: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 ; \. XOReq64(
3580: 43 75 2c 20 58 23 23 73 75 29 3b 20 5c 0a 0a 23 Cu, X##su); \..#
3590: 64 65 66 69 6e 65 20 63 6f 70 79 46 72 6f 6d 53 define copyFromS
35a0: 74 61 74 65 41 6e 64 58 6f 72 31 30 38 38 62 69 tateAndXor1088bi
35b0: 74 73 28 58 2c 20 73 74 61 74 65 2c 20 69 6e 70 ts(X, state, inp
35c0: 75 74 29 20 5c 0a 20 20 20 20 58 23 23 62 61 65 ut) \. X##bae
35d0: 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 4c .v128 = XOR128(L
35e0: 4f 41 44 31 32 38 28 73 74 61 74 65 5b 20 30 5d OAD128(state[ 0]
35f0: 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 75 ), LOAD128u(inpu
3600: 74 5b 20 30 5d 29 29 3b 20 5c 0a 20 20 20 20 58 t[ 0])); \. X
3610: 23 23 62 61 20 3d 20 58 23 23 62 61 65 2e 76 31 ##ba = X##bae.v1
3620: 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 20 28; \. X##be
3630: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 62 = GET64HIHI(X##b
3640: 61 65 2e 76 31 32 38 2c 20 58 23 23 62 61 65 2e ae.v128, X##bae.
3650: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 43 61 65 v128); \. Cae
3660: 20 3d 20 58 23 23 62 61 65 2e 76 31 32 38 3b 20 = X##bae.v128;
3670: 5c 0a 20 20 20 20 58 23 23 62 69 6f 2e 76 31 32 \. X##bio.v12
3680: 38 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 8 = XOR128(LOAD1
3690: 32 38 28 73 74 61 74 65 5b 20 32 5d 29 2c 20 4c 28(state[ 2]), L
36a0: 4f 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 32 OAD128u(input[ 2
36b0: 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 ])); \. X##bi
36c0: 20 3d 20 58 23 23 62 69 6f 2e 76 31 32 38 3b 20 = X##bio.v128;
36d0: 5c 0a 20 20 20 20 58 23 23 62 6f 20 3d 20 47 45 \. X##bo = GE
36e0: 54 36 34 48 49 48 49 28 58 23 23 62 69 6f 2e 76 T64HIHI(X##bio.v
36f0: 31 32 38 2c 20 58 23 23 62 69 6f 2e 76 31 32 38 128, X##bio.v128
3700: 29 3b 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20 58 ); \. Cio = X
3710: 23 23 62 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 ##bio.v128; \.
3720: 20 20 58 23 23 62 75 20 3d 20 58 4f 52 36 34 28 X##bu = XOR64(
3730: 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 20 34 5d LOAD64(state[ 4]
3740: 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b ), LOAD64(input[
3750: 20 34 5d 29 29 3b 20 5c 0a 20 20 20 20 43 75 20 4])); \. Cu
3760: 3d 20 58 23 23 62 75 3b 20 5c 0a 20 20 20 20 58 = X##bu; \. X
3770: 23 23 67 61 65 2e 76 31 32 38 20 3d 20 58 4f 52 ##gae.v128 = XOR
3780: 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74 61 128(LOAD128u(sta
3790: 74 65 5b 20 35 5d 29 2c 20 4c 4f 41 44 31 32 38 te[ 5]), LOAD128
37a0: 75 28 69 6e 70 75 74 5b 20 35 5d 29 29 3b 20 5c u(input[ 5])); \
37b0: 0a 20 20 20 20 58 23 23 67 61 20 3d 20 58 23 23 . X##ga = X##
37c0: 67 61 65 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 gae.v128; \.
37d0: 58 23 23 67 65 20 3d 20 47 45 54 36 34 48 49 48 X##ge = GET64HIH
37e0: 49 28 58 23 23 67 61 65 2e 76 31 32 38 2c 20 58 I(X##gae.v128, X
37f0: 23 23 67 61 65 2e 76 31 32 38 29 3b 20 5c 0a 20 ##gae.v128); \.
3800: 20 20 20 58 23 23 62 61 67 65 2e 76 31 32 38 20 X##bage.v128
3810: 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 62 = GET64LOLO(X##b
3820: 61 2c 20 58 23 23 67 65 29 3b 20 5c 0a 20 20 20 a, X##ge); \.
3830: 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58 XOReq128(Cae, X
3840: 23 23 67 61 65 2e 76 31 32 38 29 3b 20 5c 0a 20 ##gae.v128); \.
3850: 20 20 20 58 23 23 67 69 6f 2e 76 31 32 38 20 3d X##gio.v128 =
3860: 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 75 XOR128(LOAD128u
3870: 28 73 74 61 74 65 5b 20 37 5d 29 2c 20 4c 4f 41 (state[ 7]), LOA
3880: 44 31 32 38 75 28 69 6e 70 75 74 5b 20 37 5d 29 D128u(input[ 7])
3890: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 20 3d ); \. X##gi =
38a0: 20 58 23 23 67 69 6f 2e 76 31 32 38 3b 20 5c 0a X##gio.v128; \.
38b0: 20 20 20 20 58 23 23 62 65 67 69 2e 76 31 32 38 X##begi.v128
38c0: 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 = GET64LOLO(X##
38d0: 62 65 2c 20 58 23 23 67 69 29 3b 20 5c 0a 20 20 be, X##gi); \.
38e0: 20 20 58 23 23 67 6f 20 3d 20 47 45 54 36 34 48 X##go = GET64H
38f0: 49 48 49 28 58 23 23 67 69 6f 2e 76 31 32 38 2c IHI(X##gio.v128,
3900: 20 58 23 23 67 69 6f 2e 76 31 32 38 29 3b 20 5c X##gio.v128); \
3910: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 . XOReq128(Ci
3920: 6f 2c 20 58 23 23 67 69 6f 2e 76 31 32 38 29 3b o, X##gio.v128);
3930: 20 5c 0a 20 20 20 20 58 23 23 67 75 20 3d 20 58 \. X##gu = X
3940: 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 74 OR64(LOAD64(stat
3950: 65 5b 20 39 5d 29 2c 20 4c 4f 41 44 36 34 28 69 e[ 9]), LOAD64(i
3960: 6e 70 75 74 5b 20 39 5d 29 29 3b 20 5c 0a 20 20 nput[ 9])); \.
3970: 20 20 58 4f 52 65 71 36 34 28 43 75 2c 20 58 23 XOReq64(Cu, X#
3980: 23 67 75 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b #gu); \. X##k
3990: 61 65 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 38 ae.v128 = XOR128
39a0: 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 (LOAD128(state[1
39b0: 30 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 0]), LOAD128u(in
39c0: 70 75 74 5b 31 30 5d 29 29 3b 20 5c 0a 20 20 20 put[10])); \.
39d0: 20 58 23 23 6b 61 20 3d 20 58 23 23 6b 61 65 2e X##ka = X##kae.
39e0: 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 6b v128; \. X##k
39f0: 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 e = GET64HIHI(X#
3a00: 23 6b 61 65 2e 76 31 32 38 2c 20 58 23 23 6b 61 #kae.v128, X##ka
3a10: 65 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 e.v128); \. X
3a20: 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58 23 23 OReq128(Cae, X##
3a30: 6b 61 65 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 kae.v128); \.
3a40: 20 58 23 23 6b 69 6f 2e 76 31 32 38 20 3d 20 58 X##kio.v128 = X
3a50: 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 OR128(LOAD128(st
3a60: 61 74 65 5b 31 32 5d 29 2c 20 4c 4f 41 44 31 32 ate[12]), LOAD12
3a70: 38 75 28 69 6e 70 75 74 5b 31 32 5d 29 29 3b 20 8u(input[12]));
3a80: 5c 0a 20 20 20 20 58 23 23 6b 69 20 3d 20 58 23 \. X##ki = X#
3a90: 23 6b 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 #kio.v128; \.
3aa0: 20 58 23 23 6b 6f 20 3d 20 47 45 54 36 34 48 49 X##ko = GET64HI
3ab0: 48 49 28 58 23 23 6b 69 6f 2e 76 31 32 38 2c 20 HI(X##kio.v128,
3ac0: 58 23 23 6b 69 6f 2e 76 31 32 38 29 3b 20 5c 0a X##kio.v128); \.
3ad0: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f XOReq128(Cio
3ae0: 2c 20 58 23 23 6b 69 6f 2e 76 31 32 38 29 3b 20 , X##kio.v128);
3af0: 5c 0a 20 20 20 20 58 23 23 6b 75 20 3d 20 58 4f \. X##ku = XO
3b00: 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 74 65 R64(LOAD64(state
3b10: 5b 31 34 5d 29 2c 20 4c 4f 41 44 36 34 28 69 6e [14]), LOAD64(in
3b20: 70 75 74 5b 31 34 5d 29 29 3b 20 5c 0a 20 20 20 put[14])); \.
3b30: 20 58 4f 52 65 71 36 34 28 43 75 2c 20 58 23 23 XOReq64(Cu, X##
3b40: 6b 75 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 61 ku); \. X##ma
3b50: 65 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 e.v128 = XOR128(
3b60: 4c 4f 41 44 31 32 38 75 28 73 74 61 74 65 5b 31 LOAD128u(state[1
3b70: 35 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 5]), LOAD128u(in
3b80: 70 75 74 5b 31 35 5d 29 29 3b 20 5c 0a 20 20 20 put[15])); \.
3b90: 20 58 23 23 6d 61 20 3d 20 58 23 23 6d 61 65 2e X##ma = X##mae.
3ba0: 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 6d v128; \. X##m
3bb0: 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 e = GET64HIHI(X#
3bc0: 23 6d 61 65 2e 76 31 32 38 2c 20 58 23 23 6d 61 #mae.v128, X##ma
3bd0: 65 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 e.v128); \. X
3be0: 23 23 6b 61 6d 65 2e 76 31 32 38 20 3d 20 47 45 ##kame.v128 = GE
3bf0: 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 61 2c 20 58 T64LOLO(X##ka, X
3c00: 23 23 6d 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 ##me); \. XOR
3c10: 65 71 31 32 38 28 43 61 65 2c 20 58 23 23 6d 61 eq128(Cae, X##ma
3c20: 65 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 e.v128); \. X
3c30: 23 23 6d 69 6f 2e 76 31 32 38 20 3d 20 4c 4f 41 ##mio.v128 = LOA
3c40: 44 31 32 38 75 28 73 74 61 74 65 5b 31 37 5d 29 D128u(state[17])
3c50: 3b 20 5c 0a 20 20 20 20 58 23 23 6d 69 20 3d 20 ; \. X##mi =
3c60: 58 23 23 6d 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 X##mio.v128; \.
3c70: 20 20 20 58 23 23 6b 65 6d 69 2e 76 31 32 38 20 X##kemi.v128
3c80: 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b = GET64LOLO(X##k
3c90: 65 2c 20 58 23 23 6d 69 29 3b 20 5c 0a 20 20 20 e, X##mi); \.
3ca0: 20 58 23 23 6d 6f 20 3d 20 47 45 54 36 34 48 49 X##mo = GET64HI
3cb0: 48 49 28 58 23 23 6d 69 6f 2e 76 31 32 38 2c 20 HI(X##mio.v128,
3cc0: 58 23 23 6d 69 6f 2e 76 31 32 38 29 3b 20 5c 0a X##mio.v128); \.
3cd0: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f XOReq128(Cio
3ce0: 2c 20 58 23 23 6d 69 6f 2e 76 31 32 38 29 3b 20 , X##mio.v128);
3cf0: 5c 0a 20 20 20 20 58 23 23 6d 75 20 3d 20 4c 4f \. X##mu = LO
3d00: 41 44 36 34 28 73 74 61 74 65 5b 31 39 5d 29 3b AD64(state[19]);
3d10: 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 43 \. XOReq64(C
3d20: 75 2c 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 u, X##mu); \.
3d30: 20 58 23 23 73 61 65 2e 76 31 32 38 20 3d 20 4c X##sae.v128 = L
3d40: 4f 41 44 31 32 38 28 73 74 61 74 65 5b 32 30 5d OAD128(state[20]
3d50: 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 61 20 3d ); \. X##sa =
3d60: 20 58 23 23 73 61 65 2e 76 31 32 38 3b 20 5c 0a X##sae.v128; \.
3d70: 20 20 20 20 58 23 23 73 65 20 3d 20 47 45 54 36 X##se = GET6
3d80: 34 48 49 48 49 28 58 23 23 73 61 65 2e 76 31 32 4HIHI(X##sae.v12
3d90: 38 2c 20 58 23 23 73 61 65 2e 76 31 32 38 29 3b 8, X##sae.v128);
3da0: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 \. XOReq128(
3db0: 43 61 65 2c 20 58 23 23 73 61 65 2e 76 31 32 38 Cae, X##sae.v128
3dc0: 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 69 6f 2e ); \. X##sio.
3dd0: 76 31 32 38 20 3d 20 4c 4f 41 44 31 32 38 28 73 v128 = LOAD128(s
3de0: 74 61 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 20 tate[22]); \.
3df0: 20 58 23 23 73 69 20 3d 20 58 23 23 73 69 6f 2e X##si = X##sio.
3e00: 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 73 v128; \. X##s
3e10: 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 o = GET64HIHI(X#
3e20: 23 73 69 6f 2e 76 31 32 38 2c 20 58 23 23 73 69 #sio.v128, X##si
3e30: 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 o.v128); \. X
3e40: 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 OReq128(Cio, X##
3e50: 73 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 sio.v128); \.
3e60: 20 58 23 23 73 75 20 3d 20 4c 4f 41 44 36 34 28 X##su = LOAD64(
3e70: 73 74 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 state[24]); \.
3e80: 20 20 58 4f 52 65 71 36 34 28 43 75 2c 20 58 23 XOReq64(Cu, X#
3e90: 23 73 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 #su); \..#define
3ea0: 20 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 41 6e copyFromStateAn
3eb0: 64 58 6f 72 31 31 35 32 62 69 74 73 28 58 2c 20 dXor1152bits(X,
3ec0: 73 74 61 74 65 2c 20 69 6e 70 75 74 29 20 5c 0a state, input) \.
3ed0: 20 20 20 20 58 23 23 62 61 65 2e 76 31 32 38 20 X##bae.v128
3ee0: 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 = XOR128(LOAD128
3ef0: 28 73 74 61 74 65 5b 20 30 5d 29 2c 20 4c 4f 41 (state[ 0]), LOA
3f00: 44 31 32 38 75 28 69 6e 70 75 74 5b 20 30 5d 29 D128u(input[ 0])
3f10: 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 61 20 3d ); \. X##ba =
3f20: 20 58 23 23 62 61 65 2e 76 31 32 38 3b 20 5c 0a X##bae.v128; \.
3f30: 20 20 20 20 58 23 23 62 65 20 3d 20 47 45 54 36 X##be = GET6
3f40: 34 48 49 48 49 28 58 23 23 62 61 65 2e 76 31 32 4HIHI(X##bae.v12
3f50: 38 2c 20 58 23 23 62 61 65 2e 76 31 32 38 29 3b 8, X##bae.v128);
3f60: 20 5c 0a 20 20 20 20 43 61 65 20 3d 20 58 23 23 \. Cae = X##
3f70: 62 61 65 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 bae.v128; \.
3f80: 58 23 23 62 69 6f 2e 76 31 32 38 20 3d 20 58 4f X##bio.v128 = XO
3f90: 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 R128(LOAD128(sta
3fa0: 74 65 5b 20 32 5d 29 2c 20 4c 4f 41 44 31 32 38 te[ 2]), LOAD128
3fb0: 75 28 69 6e 70 75 74 5b 20 32 5d 29 29 3b 20 5c u(input[ 2])); \
3fc0: 0a 20 20 20 20 58 23 23 62 69 20 3d 20 58 23 23 . X##bi = X##
3fd0: 62 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 bio.v128; \.
3fe0: 58 23 23 62 6f 20 3d 20 47 45 54 36 34 48 49 48 X##bo = GET64HIH
3ff0: 49 28 58 23 23 62 69 6f 2e 76 31 32 38 2c 20 58 I(X##bio.v128, X
4000: 23 23 62 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 ##bio.v128); \.
4010: 20 20 20 43 69 6f 20 3d 20 58 23 23 62 69 6f 2e Cio = X##bio.
4020: 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 62 v128; \. X##b
4030: 75 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36 34 u = XOR64(LOAD64
4040: 28 73 74 61 74 65 5b 20 34 5d 29 2c 20 4c 4f 41 (state[ 4]), LOA
4050: 44 36 34 28 69 6e 70 75 74 5b 20 34 5d 29 29 3b D64(input[ 4]));
4060: 20 5c 0a 20 20 20 20 43 75 20 3d 20 58 23 23 62 \. Cu = X##b
4070: 75 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 65 2e u; \. X##gae.
4080: 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 4c 4f v128 = XOR128(LO
4090: 41 44 31 32 38 75 28 73 74 61 74 65 5b 20 35 5d AD128u(state[ 5]
40a0: 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 75 ), LOAD128u(inpu
40b0: 74 5b 20 35 5d 29 29 3b 20 5c 0a 20 20 20 20 58 t[ 5])); \. X
40c0: 23 23 67 61 20 3d 20 58 23 23 67 61 65 2e 76 31 ##ga = X##gae.v1
40d0: 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 67 65 20 28; \. X##ge
40e0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67 = GET64HIHI(X##g
40f0: 61 65 2e 76 31 32 38 2c 20 58 23 23 67 61 65 2e ae.v128, X##gae.
4100: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 v128); \. X##
4110: 62 61 67 65 2e 76 31 32 38 20 3d 20 47 45 54 36 bage.v128 = GET6
4120: 34 4c 4f 4c 4f 28 58 23 23 62 61 2c 20 58 23 23 4LOLO(X##ba, X##
4130: 67 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 ge); \. XOReq
4140: 31 32 38 28 43 61 65 2c 20 58 23 23 67 61 65 2e 128(Cae, X##gae.
4150: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 v128); \. X##
4160: 67 69 6f 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 gio.v128 = XOR12
4170: 38 28 4c 4f 41 44 31 32 38 75 28 73 74 61 74 65 8(LOAD128u(state
4180: 5b 20 37 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 [ 7]), LOAD128u(
4190: 69 6e 70 75 74 5b 20 37 5d 29 29 3b 20 5c 0a 20 input[ 7])); \.
41a0: 20 20 20 58 23 23 67 69 20 3d 20 58 23 23 67 69 X##gi = X##gi
41b0: 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 o.v128; \. X#
41c0: 23 62 65 67 69 2e 76 31 32 38 20 3d 20 47 45 54 #begi.v128 = GET
41d0: 36 34 4c 4f 4c 4f 28 58 23 23 62 65 2c 20 58 23 64LOLO(X##be, X#
41e0: 23 67 69 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 #gi); \. X##g
41f0: 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 o = GET64HIHI(X#
4200: 23 67 69 6f 2e 76 31 32 38 2c 20 58 23 23 67 69 #gio.v128, X##gi
4210: 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 o.v128); \. X
4220: 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 OReq128(Cio, X##
4230: 67 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 gio.v128); \.
4240: 20 58 23 23 67 75 20 3d 20 58 4f 52 36 34 28 4c X##gu = XOR64(L
4250: 4f 41 44 36 34 28 73 74 61 74 65 5b 20 39 5d 29 OAD64(state[ 9])
4260: 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b 20 , LOAD64(input[
4270: 39 5d 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 9])); \. XORe
4280: 71 36 34 28 43 75 2c 20 58 23 23 67 75 29 3b 20 q64(Cu, X##gu);
4290: 5c 0a 20 20 20 20 58 23 23 6b 61 65 2e 76 31 32 \. X##kae.v12
42a0: 38 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 8 = XOR128(LOAD1
42b0: 32 38 28 73 74 61 74 65 5b 31 30 5d 29 2c 20 4c 28(state[10]), L
42c0: 4f 41 44 31 32 38 75 28 69 6e 70 75 74 5b 31 30 OAD128u(input[10
42d0: 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 ])); \. X##ka
42e0: 20 3d 20 58 23 23 6b 61 65 2e 76 31 32 38 3b 20 = X##kae.v128;
42f0: 5c 0a 20 20 20 20 58 23 23 6b 65 20 3d 20 47 45 \. X##ke = GE
4300: 54 36 34 48 49 48 49 28 58 23 23 6b 61 65 2e 76 T64HIHI(X##kae.v
4310: 31 32 38 2c 20 58 23 23 6b 61 65 2e 76 31 32 38 128, X##kae.v128
4320: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 ); \. XOReq12
4330: 38 28 43 61 65 2c 20 58 23 23 6b 61 65 2e 76 31 8(Cae, X##kae.v1
4340: 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 28); \. X##ki
4350: 6f 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 o.v128 = XOR128(
4360: 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 32 LOAD128(state[12
4370: 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 ]), LOAD128u(inp
4380: 75 74 5b 31 32 5d 29 29 3b 20 5c 0a 20 20 20 20 ut[12])); \.
4390: 58 23 23 6b 69 20 3d 20 58 23 23 6b 69 6f 2e 76 X##ki = X##kio.v
43a0: 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 128; \. X##ko
43b0: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 = GET64HIHI(X##
43c0: 6b 69 6f 2e 76 31 32 38 2c 20 58 23 23 6b 69 6f kio.v128, X##kio
43d0: 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f .v128); \. XO
43e0: 52 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 6b Req128(Cio, X##k
43f0: 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 io.v128); \.
4400: 58 23 23 6b 75 20 3d 20 58 4f 52 36 34 28 4c 4f X##ku = XOR64(LO
4410: 41 44 36 34 28 73 74 61 74 65 5b 31 34 5d 29 2c AD64(state[14]),
4420: 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b 31 34 LOAD64(input[14
4430: 5d 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 ])); \. XOReq
4440: 36 34 28 43 75 2c 20 58 23 23 6b 75 29 3b 20 5c 64(Cu, X##ku); \
4450: 0a 20 20 20 20 58 23 23 6d 61 65 2e 76 31 32 38 . X##mae.v128
4460: 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 = XOR128(LOAD12
4470: 38 75 28 73 74 61 74 65 5b 31 35 5d 29 2c 20 4c 8u(state[15]), L
4480: 4f 41 44 31 32 38 75 28 69 6e 70 75 74 5b 31 35 OAD128u(input[15
4490: 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 61 ])); \. X##ma
44a0: 20 3d 20 58 23 23 6d 61 65 2e 76 31 32 38 3b 20 = X##mae.v128;
44b0: 5c 0a 20 20 20 20 58 23 23 6d 65 20 3d 20 47 45 \. X##me = GE
44c0: 54 36 34 48 49 48 49 28 58 23 23 6d 61 65 2e 76 T64HIHI(X##mae.v
44d0: 31 32 38 2c 20 58 23 23 6d 61 65 2e 76 31 32 38 128, X##mae.v128
44e0: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 6d 65 ); \. X##kame
44f0: 2e 76 31 32 38 20 3d 20 47 45 54 36 34 4c 4f 4c .v128 = GET64LOL
4500: 4f 28 58 23 23 6b 61 2c 20 58 23 23 6d 65 29 3b O(X##ka, X##me);
4510: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 \. XOReq128(
4520: 43 61 65 2c 20 58 23 23 6d 61 65 2e 76 31 32 38 Cae, X##mae.v128
4530: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 69 6f 2e ); \. X##mio.
4540: 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 4c 4f v128 = XOR128(LO
4550: 41 44 31 32 38 75 28 73 74 61 74 65 5b 31 37 5d AD128u(state[17]
4560: 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b ), LOAD64(input[
4570: 31 37 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 17])); \. X##
4580: 6d 69 20 3d 20 58 23 23 6d 69 6f 2e 76 31 32 38 mi = X##mio.v128
4590: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 65 6d 69 2e ; \. X##kemi.
45a0: 76 31 32 38 20 3d 20 47 45 54 36 34 4c 4f 4c 4f v128 = GET64LOLO
45b0: 28 58 23 23 6b 65 2c 20 58 23 23 6d 69 29 3b 20 (X##ke, X##mi);
45c0: 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 47 45 \. X##mo = GE
45d0: 54 36 34 48 49 48 49 28 58 23 23 6d 69 6f 2e 76 T64HIHI(X##mio.v
45e0: 31 32 38 2c 20 58 23 23 6d 69 6f 2e 76 31 32 38 128, X##mio.v128
45f0: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 ); \. XOReq12
4600: 38 28 43 69 6f 2c 20 58 23 23 6d 69 6f 2e 76 31 8(Cio, X##mio.v1
4610: 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 75 28); \. X##mu
4620: 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b = LOAD64(state[
4630: 31 39 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 19]); \. XORe
4640: 71 36 34 28 43 75 2c 20 58 23 23 6d 75 29 3b 20 q64(Cu, X##mu);
4650: 5c 0a 20 20 20 20 58 23 23 73 61 65 2e 76 31 32 \. X##sae.v12
4660: 38 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 74 8 = LOAD128(stat
4670: 65 5b 32 30 5d 29 3b 20 5c 0a 20 20 20 20 58 23 e[20]); \. X#
4680: 23 73 61 20 3d 20 58 23 23 73 61 65 2e 76 31 32 #sa = X##sae.v12
4690: 38 3b 20 5c 0a 20 20 20 20 58 23 23 73 65 20 3d 8; \. X##se =
46a0: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 73 61 GET64HIHI(X##sa
46b0: 65 2e 76 31 32 38 2c 20 58 23 23 73 61 65 2e 76 e.v128, X##sae.v
46c0: 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 128); \. XORe
46d0: 71 31 32 38 28 43 61 65 2c 20 58 23 23 73 61 65 q128(Cae, X##sae
46e0: 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 .v128); \. X#
46f0: 23 73 69 6f 2e 76 31 32 38 20 3d 20 4c 4f 41 44 #sio.v128 = LOAD
4700: 31 32 38 28 73 74 61 74 65 5b 32 32 5d 29 3b 20 128(state[22]);
4710: 5c 0a 20 20 20 20 58 23 23 73 69 20 3d 20 58 23 \. X##si = X#
4720: 23 73 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 #sio.v128; \.
4730: 20 58 23 23 73 6f 20 3d 20 47 45 54 36 34 48 49 X##so = GET64HI
4740: 48 49 28 58 23 23 73 69 6f 2e 76 31 32 38 2c 20 HI(X##sio.v128,
4750: 58 23 23 73 69 6f 2e 76 31 32 38 29 3b 20 5c 0a X##sio.v128); \.
4760: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f XOReq128(Cio
4770: 2c 20 58 23 23 73 69 6f 2e 76 31 32 38 29 3b 20 , X##sio.v128);
4780: 5c 0a 20 20 20 20 58 23 23 73 75 20 3d 20 4c 4f \. X##su = LO
4790: 41 44 36 34 28 73 74 61 74 65 5b 32 34 5d 29 3b AD64(state[24]);
47a0: 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 43 \. XOReq64(C
47b0: 75 2c 20 58 23 23 73 75 29 3b 20 5c 0a 0a 23 64 u, X##su); \..#d
47c0: 65 66 69 6e 65 20 63 6f 70 79 46 72 6f 6d 53 74 efine copyFromSt
47d0: 61 74 65 41 6e 64 58 6f 72 31 33 34 34 62 69 74 ateAndXor1344bit
47e0: 73 28 58 2c 20 73 74 61 74 65 2c 20 69 6e 70 75 s(X, state, inpu
47f0: 74 29 20 5c 0a 20 20 20 20 58 23 23 62 61 65 2e t) \. X##bae.
4800: 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 4c 4f v128 = XOR128(LO
4810: 41 44 31 32 38 28 73 74 61 74 65 5b 20 30 5d 29 AD128(state[ 0])
4820: 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 75 74 , LOAD128u(input
4830: 5b 20 30 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 [ 0])); \. X#
4840: 23 62 61 20 3d 20 58 23 23 62 61 65 2e 76 31 32 #ba = X##bae.v12
4850: 38 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 20 3d 8; \. X##be =
4860: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 62 61 GET64HIHI(X##ba
4870: 65 2e 76 31 32 38 2c 20 58 23 23 62 61 65 2e 76 e.v128, X##bae.v
4880: 31 32 38 29 3b 20 5c 0a 20 20 20 20 43 61 65 20 128); \. Cae
4890: 3d 20 58 23 23 62 61 65 2e 76 31 32 38 3b 20 5c = X##bae.v128; \
48a0: 0a 20 20 20 20 58 23 23 62 69 6f 2e 76 31 32 38 . X##bio.v128
48b0: 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 = XOR128(LOAD12
48c0: 38 28 73 74 61 74 65 5b 20 32 5d 29 2c 20 4c 4f 8(state[ 2]), LO
48d0: 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 32 5d AD128u(input[ 2]
48e0: 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 20 )); \. X##bi
48f0: 3d 20 58 23 23 62 69 6f 2e 76 31 32 38 3b 20 5c = X##bio.v128; \
4900: 0a 20 20 20 20 58 23 23 62 6f 20 3d 20 47 45 54 . X##bo = GET
4910: 36 34 48 49 48 49 28 58 23 23 62 69 6f 2e 76 31 64HIHI(X##bio.v1
4920: 32 38 2c 20 58 23 23 62 69 6f 2e 76 31 32 38 29 28, X##bio.v128)
4930: 3b 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20 58 23 ; \. Cio = X#
4940: 23 62 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 #bio.v128; \.
4950: 20 58 23 23 62 75 20 3d 20 58 4f 52 36 34 28 4c X##bu = XOR64(L
4960: 4f 41 44 36 34 28 73 74 61 74 65 5b 20 34 5d 29 OAD64(state[ 4])
4970: 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b 20 , LOAD64(input[
4980: 34 5d 29 29 3b 20 5c 0a 20 20 20 20 43 75 20 3d 4])); \. Cu =
4990: 20 58 23 23 62 75 3b 20 5c 0a 20 20 20 20 58 23 X##bu; \. X#
49a0: 23 67 61 65 2e 76 31 32 38 20 3d 20 58 4f 52 31 #gae.v128 = XOR1
49b0: 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74 61 74 28(LOAD128u(stat
49c0: 65 5b 20 35 5d 29 2c 20 4c 4f 41 44 31 32 38 75 e[ 5]), LOAD128u
49d0: 28 69 6e 70 75 74 5b 20 35 5d 29 29 3b 20 5c 0a (input[ 5])); \.
49e0: 20 20 20 20 58 23 23 67 61 20 3d 20 58 23 23 67 X##ga = X##g
49f0: 61 65 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 ae.v128; \. X
4a00: 23 23 67 65 20 3d 20 47 45 54 36 34 48 49 48 49 ##ge = GET64HIHI
4a10: 28 58 23 23 67 61 65 2e 76 31 32 38 2c 20 58 23 (X##gae.v128, X#
4a20: 23 67 61 65 2e 76 31 32 38 29 3b 20 5c 0a 20 20 #gae.v128); \.
4a30: 20 20 58 23 23 62 61 67 65 2e 76 31 32 38 20 3d X##bage.v128 =
4a40: 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 62 61 GET64LOLO(X##ba
4a50: 2c 20 58 23 23 67 65 29 3b 20 5c 0a 20 20 20 20 , X##ge); \.
4a60: 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58 23 XOReq128(Cae, X#
4a70: 23 67 61 65 2e 76 31 32 38 29 3b 20 5c 0a 20 20 #gae.v128); \.
4a80: 20 20 58 23 23 67 69 6f 2e 76 31 32 38 20 3d 20 X##gio.v128 =
4a90: 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 75 28 XOR128(LOAD128u(
4aa0: 73 74 61 74 65 5b 20 37 5d 29 2c 20 4c 4f 41 44 state[ 7]), LOAD
4ab0: 31 32 38 75 28 69 6e 70 75 74 5b 20 37 5d 29 29 128u(input[ 7]))
4ac0: 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 20 3d 20 ; \. X##gi =
4ad0: 58 23 23 67 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 X##gio.v128; \.
4ae0: 20 20 20 58 23 23 62 65 67 69 2e 76 31 32 38 20 X##begi.v128
4af0: 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 62 = GET64LOLO(X##b
4b00: 65 2c 20 58 23 23 67 69 29 3b 20 5c 0a 20 20 20 e, X##gi); \.
4b10: 20 58 23 23 67 6f 20 3d 20 47 45 54 36 34 48 49 X##go = GET64HI
4b20: 48 49 28 58 23 23 67 69 6f 2e 76 31 32 38 2c 20 HI(X##gio.v128,
4b30: 58 23 23 67 69 6f 2e 76 31 32 38 29 3b 20 5c 0a X##gio.v128); \.
4b40: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f XOReq128(Cio
4b50: 2c 20 58 23 23 67 69 6f 2e 76 31 32 38 29 3b 20 , X##gio.v128);
4b60: 5c 0a 20 20 20 20 58 23 23 67 75 20 3d 20 58 4f \. X##gu = XO
4b70: 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 74 65 R64(LOAD64(state
4b80: 5b 20 39 5d 29 2c 20 4c 4f 41 44 36 34 28 69 6e [ 9]), LOAD64(in
4b90: 70 75 74 5b 20 39 5d 29 29 3b 20 5c 0a 20 20 20 put[ 9])); \.
4ba0: 20 58 4f 52 65 71 36 34 28 43 75 2c 20 58 23 23 XOReq64(Cu, X##
4bb0: 67 75 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 gu); \. X##ka
4bc0: 65 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 e.v128 = XOR128(
4bd0: 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 30 LOAD128(state[10
4be0: 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 ]), LOAD128u(inp
4bf0: 75 74 5b 31 30 5d 29 29 3b 20 5c 0a 20 20 20 20 ut[10])); \.
4c00: 58 23 23 6b 61 20 3d 20 58 23 23 6b 61 65 2e 76 X##ka = X##kae.v
4c10: 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 6b 65 128; \. X##ke
4c20: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 = GET64HIHI(X##
4c30: 6b 61 65 2e 76 31 32 38 2c 20 58 23 23 6b 61 65 kae.v128, X##kae
4c40: 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f .v128); \. XO
4c50: 52 65 71 31 32 38 28 43 61 65 2c 20 58 23 23 6b Req128(Cae, X##k
4c60: 61 65 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 ae.v128); \.
4c70: 58 23 23 6b 69 6f 2e 76 31 32 38 20 3d 20 58 4f X##kio.v128 = XO
4c80: 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 R128(LOAD128(sta
4c90: 74 65 5b 31 32 5d 29 2c 20 4c 4f 41 44 31 32 38 te[12]), LOAD128
4ca0: 75 28 69 6e 70 75 74 5b 31 32 5d 29 29 3b 20 5c u(input[12])); \
4cb0: 0a 20 20 20 20 58 23 23 6b 69 20 3d 20 58 23 23 . X##ki = X##
4cc0: 6b 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 kio.v128; \.
4cd0: 58 23 23 6b 6f 20 3d 20 47 45 54 36 34 48 49 48 X##ko = GET64HIH
4ce0: 49 28 58 23 23 6b 69 6f 2e 76 31 32 38 2c 20 58 I(X##kio.v128, X
4cf0: 23 23 6b 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 ##kio.v128); \.
4d00: 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c XOReq128(Cio,
4d10: 20 58 23 23 6b 69 6f 2e 76 31 32 38 29 3b 20 5c X##kio.v128); \
4d20: 0a 20 20 20 20 58 23 23 6b 75 20 3d 20 58 4f 52 . X##ku = XOR
4d30: 36 34 28 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 64(LOAD64(state[
4d40: 31 34 5d 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 14]), LOAD64(inp
4d50: 75 74 5b 31 34 5d 29 29 3b 20 5c 0a 20 20 20 20 ut[14])); \.
4d60: 58 4f 52 65 71 36 34 28 43 75 2c 20 58 23 23 6b XOReq64(Cu, X##k
4d70: 75 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 61 65 u); \. X##mae
4d80: 2e 76 31 32 38 20 3d 20 58 4f 52 31 32 38 28 4c .v128 = XOR128(L
4d90: 4f 41 44 31 32 38 75 28 73 74 61 74 65 5b 31 35 OAD128u(state[15
4da0: 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 ]), LOAD128u(inp
4db0: 75 74 5b 31 35 5d 29 29 3b 20 5c 0a 20 20 20 20 ut[15])); \.
4dc0: 58 23 23 6d 61 20 3d 20 58 23 23 6d 61 65 2e 76 X##ma = X##mae.v
4dd0: 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 6d 65 128; \. X##me
4de0: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 = GET64HIHI(X##
4df0: 6d 61 65 2e 76 31 32 38 2c 20 58 23 23 6d 61 65 mae.v128, X##mae
4e00: 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 .v128); \. X#
4e10: 23 6b 61 6d 65 2e 76 31 32 38 20 3d 20 47 45 54 #kame.v128 = GET
4e20: 36 34 4c 4f 4c 4f 28 58 23 23 6b 61 2c 20 58 23 64LOLO(X##ka, X#
4e30: 23 6d 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 #me); \. XORe
4e40: 71 31 32 38 28 43 61 65 2c 20 58 23 23 6d 61 65 q128(Cae, X##mae
4e50: 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 .v128); \. X#
4e60: 23 6d 69 6f 2e 76 31 32 38 20 3d 20 58 4f 52 31 #mio.v128 = XOR1
4e70: 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74 61 74 28(LOAD128u(stat
4e80: 65 5b 31 37 5d 29 2c 20 4c 4f 41 44 31 32 38 75 e[17]), LOAD128u
4e90: 28 69 6e 70 75 74 5b 31 37 5d 29 29 3b 20 5c 0a (input[17])); \.
4ea0: 20 20 20 20 58 23 23 6d 69 20 3d 20 58 23 23 6d X##mi = X##m
4eb0: 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 io.v128; \. X
4ec0: 23 23 6b 65 6d 69 2e 76 31 32 38 20 3d 20 47 45 ##kemi.v128 = GE
4ed0: 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 65 2c 20 58 T64LOLO(X##ke, X
4ee0: 23 23 6d 69 29 3b 20 5c 0a 20 20 20 20 58 23 23 ##mi); \. X##
4ef0: 6d 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 mo = GET64HIHI(X
4f00: 23 23 6d 69 6f 2e 76 31 32 38 2c 20 58 23 23 6d ##mio.v128, X##m
4f10: 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 io.v128); \.
4f20: 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58 23 XOReq128(Cio, X#
4f30: 23 6d 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 #mio.v128); \.
4f40: 20 20 58 23 23 6d 75 20 3d 20 58 4f 52 36 34 28 X##mu = XOR64(
4f50: 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 39 5d LOAD64(state[19]
4f60: 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b ), LOAD64(input[
4f70: 31 39 5d 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 19])); \. XOR
4f80: 65 71 36 34 28 43 75 2c 20 58 23 23 6d 75 29 3b eq64(Cu, X##mu);
4f90: 20 5c 0a 20 20 20 20 58 23 23 73 61 65 2e 76 31 \. X##sae.v1
4fa0: 32 38 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 28 = XOR128(LOAD
4fb0: 31 32 38 28 73 74 61 74 65 5b 32 30 5d 29 2c 20 128(state[20]),
4fc0: 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b 32 30 5d LOAD64(input[20]
4fd0: 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 61 20 )); \. X##sa
4fe0: 3d 20 58 23 23 73 61 65 2e 76 31 32 38 3b 20 5c = X##sae.v128; \
4ff0: 0a 20 20 20 20 58 23 23 73 65 20 3d 20 47 45 54 . X##se = GET
5000: 36 34 48 49 48 49 28 58 23 23 73 61 65 2e 76 31 64HIHI(X##sae.v1
5010: 32 38 2c 20 58 23 23 73 61 65 2e 76 31 32 38 29 28, X##sae.v128)
5020: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 ; \. XOReq128
5030: 28 43 61 65 2c 20 58 23 23 73 61 65 2e 76 31 32 (Cae, X##sae.v12
5040: 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 69 6f 8); \. X##sio
5050: 2e 76 31 32 38 20 3d 20 4c 4f 41 44 31 32 38 28 .v128 = LOAD128(
5060: 73 74 61 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 state[22]); \.
5070: 20 20 58 23 23 73 69 20 3d 20 58 23 23 73 69 6f X##si = X##sio
5080: 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 .v128; \. X##
5090: 73 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 so = GET64HIHI(X
50a0: 23 23 73 69 6f 2e 76 31 32 38 2c 20 58 23 23 73 ##sio.v128, X##s
50b0: 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 io.v128); \.
50c0: 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58 23 XOReq128(Cio, X#
50d0: 23 73 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 #sio.v128); \.
50e0: 20 20 58 23 23 73 75 20 3d 20 4c 4f 41 44 36 34 X##su = LOAD64
50f0: 28 73 74 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 (state[24]); \.
5100: 20 20 20 58 4f 52 65 71 36 34 28 43 75 2c 20 58 XOReq64(Cu, X
5110: 23 23 73 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e ##su); \..#defin
5120: 65 20 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 28 e copyFromState(
5130: 58 2c 20 73 74 61 74 65 29 20 5c 0a 20 20 20 20 X, state) \.
5140: 58 23 23 62 61 65 2e 76 31 32 38 20 3d 20 4c 4f X##bae.v128 = LO
5150: 41 44 31 32 38 28 73 74 61 74 65 5b 20 30 5d 29 AD128(state[ 0])
5160: 3b 20 5c 0a 20 20 20 20 58 23 23 62 61 20 3d 20 ; \. X##ba =
5170: 58 23 23 62 61 65 2e 76 31 32 38 3b 20 5c 0a 20 X##bae.v128; \.
5180: 20 20 20 58 23 23 62 65 20 3d 20 47 45 54 36 34 X##be = GET64
5190: 48 49 48 49 28 58 23 23 62 61 65 2e 76 31 32 38 HIHI(X##bae.v128
51a0: 2c 20 58 23 23 62 61 65 2e 76 31 32 38 29 3b 20 , X##bae.v128);
51b0: 5c 0a 20 20 20 20 43 61 65 20 3d 20 58 23 23 62 \. Cae = X##b
51c0: 61 65 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 ae.v128; \. X
51d0: 23 23 62 69 6f 2e 76 31 32 38 20 3d 20 4c 4f 41 ##bio.v128 = LOA
51e0: 44 31 32 38 28 73 74 61 74 65 5b 20 32 5d 29 3b D128(state[ 2]);
51f0: 20 5c 0a 20 20 20 20 58 23 23 62 69 20 3d 20 58 \. X##bi = X
5200: 23 23 62 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 ##bio.v128; \.
5210: 20 20 58 23 23 62 6f 20 3d 20 47 45 54 36 34 48 X##bo = GET64H
5220: 49 48 49 28 58 23 23 62 69 6f 2e 76 31 32 38 2c IHI(X##bio.v128,
5230: 20 58 23 23 62 69 6f 2e 76 31 32 38 29 3b 20 5c X##bio.v128); \
5240: 0a 20 20 20 20 43 69 6f 20 3d 20 58 23 23 62 69 . Cio = X##bi
5250: 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 o.v128; \. X#
5260: 23 62 75 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 #bu = LOAD64(sta
5270: 74 65 5b 20 34 5d 29 3b 20 5c 0a 20 20 20 20 43 te[ 4]); \. C
5280: 75 20 3d 20 58 23 23 62 75 3b 20 5c 0a 20 20 20 u = X##bu; \.
5290: 20 58 23 23 67 61 65 2e 76 31 32 38 20 3d 20 4c X##gae.v128 = L
52a0: 4f 41 44 31 32 38 75 28 73 74 61 74 65 5b 20 35 OAD128u(state[ 5
52b0: 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 20 ]); \. X##ga
52c0: 3d 20 58 23 23 67 61 65 2e 76 31 32 38 3b 20 5c = X##gae.v128; \
52d0: 0a 20 20 20 20 58 23 23 67 65 20 3d 20 47 45 54 . X##ge = GET
52e0: 36 34 48 49 48 49 28 58 23 23 67 61 65 2e 76 31 64HIHI(X##gae.v1
52f0: 32 38 2c 20 58 23 23 67 61 65 2e 76 31 32 38 29 28, X##gae.v128)
5300: 3b 20 5c 0a 20 20 20 20 58 23 23 62 61 67 65 2e ; \. X##bage.
5310: 76 31 32 38 20 3d 20 47 45 54 36 34 4c 4f 4c 4f v128 = GET64LOLO
5320: 28 58 23 23 62 61 2c 20 58 23 23 67 65 29 3b 20 (X##ba, X##ge);
5330: 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 \. XOReq128(C
5340: 61 65 2c 20 58 23 23 67 61 65 2e 76 31 32 38 29 ae, X##gae.v128)
5350: 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 6f 2e 76 ; \. X##gio.v
5360: 31 32 38 20 3d 20 4c 4f 41 44 31 32 38 75 28 73 128 = LOAD128u(s
5370: 74 61 74 65 5b 20 37 5d 29 3b 20 5c 0a 20 20 20 tate[ 7]); \.
5380: 20 58 23 23 67 69 20 3d 20 58 23 23 67 69 6f 2e X##gi = X##gio.
5390: 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 62 v128; \. X##b
53a0: 65 67 69 2e 76 31 32 38 20 3d 20 47 45 54 36 34 egi.v128 = GET64
53b0: 4c 4f 4c 4f 28 58 23 23 62 65 2c 20 58 23 23 67 LOLO(X##be, X##g
53c0: 69 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 6f 20 i); \. X##go
53d0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67 = GET64HIHI(X##g
53e0: 69 6f 2e 76 31 32 38 2c 20 58 23 23 67 69 6f 2e io.v128, X##gio.
53f0: 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f 52 v128); \. XOR
5400: 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 67 69 eq128(Cio, X##gi
5410: 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 o.v128); \. X
5420: 23 23 67 75 20 3d 20 4c 4f 41 44 36 34 28 73 74 ##gu = LOAD64(st
5430: 61 74 65 5b 20 39 5d 29 3b 20 5c 0a 20 20 20 20 ate[ 9]); \.
5440: 58 4f 52 65 71 36 34 28 43 75 2c 20 58 23 23 67 XOReq64(Cu, X##g
5450: 75 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 65 u); \. X##kae
5460: 2e 76 31 32 38 20 3d 20 4c 4f 41 44 31 32 38 28 .v128 = LOAD128(
5470: 73 74 61 74 65 5b 31 30 5d 29 3b 20 5c 0a 20 20 state[10]); \.
5480: 20 20 58 23 23 6b 61 20 3d 20 58 23 23 6b 61 65 X##ka = X##kae
5490: 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 58 23 23 .v128; \. X##
54a0: 6b 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 ke = GET64HIHI(X
54b0: 23 23 6b 61 65 2e 76 31 32 38 2c 20 58 23 23 6b ##kae.v128, X##k
54c0: 61 65 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 ae.v128); \.
54d0: 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58 23 XOReq128(Cae, X#
54e0: 23 6b 61 65 2e 76 31 32 38 29 3b 20 5c 0a 20 20 #kae.v128); \.
54f0: 20 20 58 23 23 6b 69 6f 2e 76 31 32 38 20 3d 20 X##kio.v128 =
5500: 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 32 LOAD128(state[12
5510: 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 20 ]); \. X##ki
5520: 3d 20 58 23 23 6b 69 6f 2e 76 31 32 38 3b 20 5c = X##kio.v128; \
5530: 0a 20 20 20 20 58 23 23 6b 6f 20 3d 20 47 45 54 . X##ko = GET
5540: 36 34 48 49 48 49 28 58 23 23 6b 69 6f 2e 76 31 64HIHI(X##kio.v1
5550: 32 38 2c 20 58 23 23 6b 69 6f 2e 76 31 32 38 29 28, X##kio.v128)
5560: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 ; \. XOReq128
5570: 28 43 69 6f 2c 20 58 23 23 6b 69 6f 2e 76 31 32 (Cio, X##kio.v12
5580: 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 20 8); \. X##ku
5590: 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 = LOAD64(state[1
55a0: 34 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 4]); \. XOReq
55b0: 36 34 28 43 75 2c 20 58 23 23 6b 75 29 3b 20 5c 64(Cu, X##ku); \
55c0: 0a 20 20 20 20 58 23 23 6d 61 65 2e 76 31 32 38 . X##mae.v128
55d0: 20 3d 20 4c 4f 41 44 31 32 38 75 28 73 74 61 74 = LOAD128u(stat
55e0: 65 5b 31 35 5d 29 3b 20 5c 0a 20 20 20 20 58 23 e[15]); \. X#
55f0: 23 6d 61 20 3d 20 58 23 23 6d 61 65 2e 76 31 32 #ma = X##mae.v12
5600: 38 3b 20 5c 0a 20 20 20 20 58 23 23 6d 65 20 3d 8; \. X##me =
5610: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6d 61 GET64HIHI(X##ma
5620: 65 2e 76 31 32 38 2c 20 58 23 23 6d 61 65 2e 76 e.v128, X##mae.v
5630: 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 128); \. X##k
5640: 61 6d 65 2e 76 31 32 38 20 3d 20 47 45 54 36 34 ame.v128 = GET64
5650: 4c 4f 4c 4f 28 58 23 23 6b 61 2c 20 58 23 23 6d LOLO(X##ka, X##m
5660: 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 e); \. XOReq1
5670: 32 38 28 43 61 65 2c 20 58 23 23 6d 61 65 2e 76 28(Cae, X##mae.v
5680: 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 128); \. X##m
5690: 69 6f 2e 76 31 32 38 20 3d 20 4c 4f 41 44 31 32 io.v128 = LOAD12
56a0: 38 75 28 73 74 61 74 65 5b 31 37 5d 29 3b 20 5c 8u(state[17]); \
56b0: 0a 20 20 20 20 58 23 23 6d 69 20 3d 20 58 23 23 . X##mi = X##
56c0: 6d 69 6f 2e 76 31 32 38 3b 20 5c 0a 20 20 20 20 mio.v128; \.
56d0: 58 23 23 6b 65 6d 69 2e 76 31 32 38 20 3d 20 47 X##kemi.v128 = G
56e0: 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 65 2c 20 ET64LOLO(X##ke,
56f0: 58 23 23 6d 69 29 3b 20 5c 0a 20 20 20 20 58 23 X##mi); \. X#
5700: 23 6d 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28 #mo = GET64HIHI(
5710: 58 23 23 6d 69 6f 2e 76 31 32 38 2c 20 58 23 23 X##mio.v128, X##
5720: 6d 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 mio.v128); \.
5730: 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58 XOReq128(Cio, X
5740: 23 23 6d 69 6f 2e 76 31 32 38 29 3b 20 5c 0a 20 ##mio.v128); \.
5750: 20 20 20 58 23 23 6d 75 20 3d 20 4c 4f 41 44 36 X##mu = LOAD6
5760: 34 28 73 74 61 74 65 5b 31 39 5d 29 3b 20 5c 0a 4(state[19]); \.
5770: 20 20 20 20 58 4f 52 65 71 36 34 28 43 75 2c 20 XOReq64(Cu,
5780: 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58 23 X##mu); \. X#
5790: 23 73 61 65 2e 76 31 32 38 20 3d 20 4c 4f 41 44 #sae.v128 = LOAD
57a0: 31 32 38 28 73 74 61 74 65 5b 32 30 5d 29 3b 20 128(state[20]);
57b0: 5c 0a 20 20 20 20 58 23 23 73 61 20 3d 20 58 23 \. X##sa = X#
57c0: 23 73 61 65 2e 76 31 32 38 3b 20 5c 0a 20 20 20 #sae.v128; \.
57d0: 20 58 23 23 73 65 20 3d 20 47 45 54 36 34 48 49 X##se = GET64HI
57e0: 48 49 28 58 23 23 73 61 65 2e 76 31 32 38 2c 20 HI(X##sae.v128,
57f0: 58 23 23 73 61 65 2e 76 31 32 38 29 3b 20 5c 0a X##sae.v128); \.
5800: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 XOReq128(Cae
5810: 2c 20 58 23 23 73 61 65 2e 76 31 32 38 29 3b 20 , X##sae.v128);
5820: 5c 0a 20 20 20 20 58 23 23 73 69 6f 2e 76 31 32 \. X##sio.v12
5830: 38 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 74 8 = LOAD128(stat
5840: 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 20 20 58 23 e[22]); \. X#
5850: 23 73 69 20 3d 20 58 23 23 73 69 6f 2e 76 31 32 #si = X##sio.v12
5860: 38 3b 20 5c 0a 20 20 20 20 58 23 23 73 6f 20 3d 8; \. X##so =
5870: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 73 69 GET64HIHI(X##si
5880: 6f 2e 76 31 32 38 2c 20 58 23 23 73 69 6f 2e 76 o.v128, X##sio.v
5890: 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 128); \. XORe
58a0: 71 31 32 38 28 43 69 6f 2c 20 58 23 23 73 69 6f q128(Cio, X##sio
58b0: 2e 76 31 32 38 29 3b 20 5c 0a 20 20 20 20 58 23 .v128); \. X#
58c0: 23 73 75 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 #su = LOAD64(sta
58d0: 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 20 20 58 te[24]); \. X
58e0: 4f 52 65 71 36 34 28 43 75 2c 20 58 23 23 73 75 OReq64(Cu, X##su
58f0: 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20 63 6f ); \..#define co
5900: 70 79 54 6f 53 74 61 74 65 28 73 74 61 74 65 2c pyToState(state,
5910: 20 58 29 20 5c 0a 20 20 20 20 73 74 61 74 65 5b X) \. state[
5920: 20 30 5d 20 3d 20 41 23 23 62 61 67 65 2e 76 36 0] = A##bage.v6
5930: 34 5b 30 5d 3b 20 5c 0a 20 20 20 20 73 74 61 74 4[0]; \. stat
5940: 65 5b 20 31 5d 20 3d 20 41 23 23 62 65 67 69 2e e[ 1] = A##begi.
5950: 76 36 34 5b 30 5d 3b 20 5c 0a 20 20 20 20 53 54 v64[0]; \. ST
5960: 4f 52 45 36 34 28 73 74 61 74 65 5b 20 32 5d 2c ORE64(state[ 2],
5970: 20 58 23 23 62 69 29 3b 20 5c 0a 20 20 20 20 53 X##bi); \. S
5980: 54 4f 52 45 36 34 28 73 74 61 74 65 5b 20 33 5d TORE64(state[ 3]
5990: 2c 20 58 23 23 62 6f 29 3b 20 5c 0a 20 20 20 20 , X##bo); \.
59a0: 53 54 4f 52 45 36 34 28 73 74 61 74 65 5b 20 34 STORE64(state[ 4
59b0: 5d 2c 20 58 23 23 62 75 29 3b 20 5c 0a 20 20 20 ], X##bu); \.
59c0: 20 53 54 4f 52 45 36 34 28 73 74 61 74 65 5b 20 STORE64(state[
59d0: 35 5d 2c 20 58 23 23 67 61 29 3b 20 5c 0a 20 20 5], X##ga); \.
59e0: 20 20 73 74 61 74 65 5b 20 36 5d 20 3d 20 41 23 state[ 6] = A#
59f0: 23 62 61 67 65 2e 76 36 34 5b 31 5d 3b 20 5c 0a #bage.v64[1]; \.
5a00: 20 20 20 20 73 74 61 74 65 5b 20 37 5d 20 3d 20 state[ 7] =
5a10: 41 23 23 62 65 67 69 2e 76 36 34 5b 31 5d 3b 20 A##begi.v64[1];
5a20: 5c 0a 20 20 20 20 53 54 4f 52 45 36 34 28 73 74 \. STORE64(st
5a30: 61 74 65 5b 20 38 5d 2c 20 58 23 23 67 6f 29 3b ate[ 8], X##go);
5a40: 20 5c 0a 20 20 20 20 53 54 4f 52 45 36 34 28 73 \. STORE64(s
5a50: 74 61 74 65 5b 20 39 5d 2c 20 58 23 23 67 75 29 tate[ 9], X##gu)
5a60: 3b 20 5c 0a 20 20 20 20 73 74 61 74 65 5b 31 30 ; \. state[10
5a70: 5d 20 3d 20 58 23 23 6b 61 6d 65 2e 76 36 34 5b ] = X##kame.v64[
5a80: 30 5d 3b 20 5c 0a 20 20 20 20 73 74 61 74 65 5b 0]; \. state[
5a90: 31 31 5d 20 3d 20 58 23 23 6b 65 6d 69 2e 76 36 11] = X##kemi.v6
5aa0: 34 5b 30 5d 3b 20 5c 0a 20 20 20 20 53 54 4f 52 4[0]; \. STOR
5ab0: 45 36 34 28 73 74 61 74 65 5b 31 32 5d 2c 20 58 E64(state[12], X
5ac0: 23 23 6b 69 29 3b 20 5c 0a 20 20 20 20 53 54 4f ##ki); \. STO
5ad0: 52 45 36 34 28 73 74 61 74 65 5b 31 33 5d 2c 20 RE64(state[13],
5ae0: 58 23 23 6b 6f 29 3b 20 5c 0a 20 20 20 20 53 54 X##ko); \. ST
5af0: 4f 52 45 36 34 28 73 74 61 74 65 5b 31 34 5d 2c ORE64(state[14],
5b00: 20 58 23 23 6b 75 29 3b 20 5c 0a 20 20 20 20 53 X##ku); \. S
5b10: 54 4f 52 45 36 34 28 73 74 61 74 65 5b 31 35 5d TORE64(state[15]
5b20: 2c 20 58 23 23 6d 61 29 3b 20 5c 0a 20 20 20 20 , X##ma); \.
5b30: 73 74 61 74 65 5b 31 36 5d 20 3d 20 58 23 23 6b state[16] = X##k
5b40: 61 6d 65 2e 76 36 34 5b 31 5d 3b 20 5c 0a 20 20 ame.v64[1]; \.
5b50: 20 20 73 74 61 74 65 5b 31 37 5d 20 3d 20 58 23 state[17] = X#
5b60: 23 6b 65 6d 69 2e 76 36 34 5b 31 5d 3b 20 5c 0a #kemi.v64[1]; \.
5b70: 20 20 20 20 53 54 4f 52 45 36 34 28 73 74 61 74 STORE64(stat
5b80: 65 5b 31 38 5d 2c 20 58 23 23 6d 6f 29 3b 20 5c e[18], X##mo); \
5b90: 0a 20 20 20 20 53 54 4f 52 45 36 34 28 73 74 61 . STORE64(sta
5ba0: 74 65 5b 31 39 5d 2c 20 58 23 23 6d 75 29 3b 20 te[19], X##mu);
5bb0: 5c 0a 20 20 20 20 53 54 4f 52 45 36 34 28 73 74 \. STORE64(st
5bc0: 61 74 65 5b 32 30 5d 2c 20 58 23 23 73 61 29 3b ate[20], X##sa);
5bd0: 20 5c 0a 20 20 20 20 53 54 4f 52 45 36 34 28 73 \. STORE64(s
5be0: 74 61 74 65 5b 32 31 5d 2c 20 58 23 23 73 65 29 tate[21], X##se)
5bf0: 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 36 34 28 ; \. STORE64(
5c00: 73 74 61 74 65 5b 32 32 5d 2c 20 58 23 23 73 69 state[22], X##si
5c10: 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 36 34 ); \. STORE64
5c20: 28 73 74 61 74 65 5b 32 33 5d 2c 20 58 23 23 73 (state[23], X##s
5c30: 6f 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 36 o); \. STORE6
5c40: 34 28 73 74 61 74 65 5b 32 34 5d 2c 20 58 23 23 4(state[24], X##
5c50: 73 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20 su); \..#define
5c60: 63 6f 70 79 53 74 61 74 65 56 61 72 69 61 62 6c copyStateVariabl
5c70: 65 73 28 58 2c 20 59 29 20 5c 0a 20 20 20 20 58 es(X, Y) \. X
5c80: 23 23 62 61 67 65 20 3d 20 59 23 23 62 61 67 65 ##bage = Y##bage
5c90: 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 67 69 20 ; \. X##begi
5ca0: 3d 20 59 23 23 62 65 67 69 3b 20 5c 0a 20 20 20 = Y##begi; \.
5cb0: 20 58 23 23 62 69 20 3d 20 59 23 23 62 69 3b 20 X##bi = Y##bi;
5cc0: 5c 0a 20 20 20 20 58 23 23 62 6f 20 3d 20 59 23 \. X##bo = Y#
5cd0: 23 62 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 #bo; \. X##bu
5ce0: 20 3d 20 59 23 23 62 75 3b 20 5c 0a 20 20 20 20 = Y##bu; \.
5cf0: 58 23 23 67 61 20 3d 20 59 23 23 67 61 3b 20 5c X##ga = Y##ga; \
5d00: 0a 20 20 20 20 58 23 23 67 6f 20 3d 20 59 23 23 . X##go = Y##
5d10: 67 6f 3b 20 5c 0a 20 20 20 20 58 23 23 67 75 20 go; \. X##gu
5d20: 3d 20 59 23 23 67 75 3b 20 5c 0a 20 20 20 20 58 = Y##gu; \. X
5d30: 23 23 6b 61 6d 65 20 3d 20 59 23 23 6b 61 6d 65 ##kame = Y##kame
5d40: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 65 6d 69 20 ; \. X##kemi
5d50: 3d 20 59 23 23 6b 65 6d 69 3b 20 5c 0a 20 20 20 = Y##kemi; \.
5d60: 20 58 23 23 6b 69 20 3d 20 59 23 23 6b 69 3b 20 X##ki = Y##ki;
5d70: 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d 20 59 23 \. X##ko = Y#
5d80: 23 6b 6f 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 #ko; \. X##ku
5d90: 20 3d 20 59 23 23 6b 75 3b 20 5c 0a 20 20 20 20 = Y##ku; \.
5da0: 58 23 23 6d 61 20 3d 20 59 23 23 6d 61 3b 20 5c X##ma = Y##ma; \
5db0: 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 59 23 23 . X##mo = Y##
5dc0: 6d 6f 3b 20 5c 0a 20 20 20 20 58 23 23 6d 75 20 mo; \. X##mu
5dd0: 3d 20 59 23 23 6d 75 3b 20 5c 0a 20 20 20 20 58 = Y##mu; \. X
5de0: 23 23 73 61 20 3d 20 59 23 23 73 61 3b 20 5c 0a ##sa = Y##sa; \.
5df0: 20 20 20 20 58 23 23 73 65 20 3d 20 59 23 23 73 X##se = Y##s
5e00: 65 3b 20 5c 0a 20 20 20 20 58 23 23 73 69 20 3d e; \. X##si =
5e10: 20 59 23 23 73 69 3b 20 5c 0a 20 20 20 20 58 23 Y##si; \. X#
5e20: 23 73 6f 20 3d 20 59 23 23 73 6f 3b 20 5c 0a 20 #so = Y##so; \.
5e30: 20 20 20 58 23 23 73 75 20 3d 20 59 23 23 73 75 X##su = Y##su
5e40: 3b 20 5c 0a 0a ; \..