Hex Artifact Content
Not logged in

Artifact c67e96fc4b45efa55faf4a4c3b216ed683aba6f8:


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                                   ; \..