github.com/onflow/flow-go/crypto@v0.24.8/hash/keccak.s (about) 1 // The functions below were copied from golang.org/x/crypto/sha3. 2 // 3 // Copyright (c) 2009 The Go Authors. All rights reserved. 4 5 // Redistribution and use in source and binary forms, with or without 6 // modification, are permitted provided that the following conditions are 7 // met: 8 9 // * Redistributions of source code must retain the above copyright 10 // notice, this list of conditions and the following disclaimer. 11 // * Redistributions in binary form must reproduce the above 12 // copyright notice, this list of conditions and the following disclaimer 13 // in the documentation and/or other materials provided with the 14 // distribution. 15 // * Neither the name of Google Inc. nor the names of its 16 // contributors may be used to endorse or promote products derived from 17 // this software without specific prior written permission. 18 19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31 32 // +build amd64,!purego,gc 33 34 // This code was translated into a form compatible with 6a from the public 35 // domain sources at https://github.com/gvanas/KeccakCodePackage 36 37 // Offsets in state 38 39 #define _ba (0*8) 40 #define _be (1*8) 41 #define _bi (2*8) 42 #define _bo (3*8) 43 #define _bu (4*8) 44 #define _ga (5*8) 45 #define _ge (6*8) 46 #define _gi (7*8) 47 #define _go (8*8) 48 #define _gu (9*8) 49 #define _ka (10*8) 50 #define _ke (11*8) 51 #define _ki (12*8) 52 #define _ko (13*8) 53 #define _ku (14*8) 54 #define _ma (15*8) 55 #define _me (16*8) 56 #define _mi (17*8) 57 #define _mo (18*8) 58 #define _mu (19*8) 59 #define _sa (20*8) 60 #define _se (21*8) 61 #define _si (22*8) 62 #define _so (23*8) 63 #define _su (24*8) 64 65 // Temporary registers 66 #define rT1 AX 67 68 // Round vars 69 #define rpState DI 70 #define rpStack SP 71 72 #define rDa BX 73 #define rDe CX 74 #define rDi DX 75 #define rDo R8 76 #define rDu R9 77 78 #define rBa R10 79 #define rBe R11 80 #define rBi R12 81 #define rBo R13 82 #define rBu R14 83 84 #define rCa SI 85 #define rCe BP 86 #define rCi rBi 87 #define rCo rBo 88 #define rCu R15 89 90 #define MOVQ_RBI_RCE MOVQ rBi, rCe 91 #define XORQ_RT1_RCA XORQ rT1, rCa 92 #define XORQ_RT1_RCE XORQ rT1, rCe 93 #define XORQ_RBA_RCU XORQ rBa, rCu 94 #define XORQ_RBE_RCU XORQ rBe, rCu 95 #define XORQ_RDU_RCU XORQ rDu, rCu 96 #define XORQ_RDA_RCA XORQ rDa, rCa 97 #define XORQ_RDE_RCE XORQ rDe, rCe 98 99 #define mKeccakRound(iState, oState, rc, B_RBI_RCE, G_RT1_RCA, G_RT1_RCE, G_RBA_RCU, K_RT1_RCA, K_RT1_RCE, K_RBA_RCU, M_RT1_RCA, M_RT1_RCE, M_RBE_RCU, S_RDU_RCU, S_RDA_RCA, S_RDE_RCE) \ 100 /* Prepare round */ \ 101 MOVQ rCe, rDa; \ 102 ROLQ $1, rDa; \ 103 \ 104 MOVQ _bi(iState), rCi; \ 105 XORQ _gi(iState), rDi; \ 106 XORQ rCu, rDa; \ 107 XORQ _ki(iState), rCi; \ 108 XORQ _mi(iState), rDi; \ 109 XORQ rDi, rCi; \ 110 \ 111 MOVQ rCi, rDe; \ 112 ROLQ $1, rDe; \ 113 \ 114 MOVQ _bo(iState), rCo; \ 115 XORQ _go(iState), rDo; \ 116 XORQ rCa, rDe; \ 117 XORQ _ko(iState), rCo; \ 118 XORQ _mo(iState), rDo; \ 119 XORQ rDo, rCo; \ 120 \ 121 MOVQ rCo, rDi; \ 122 ROLQ $1, rDi; \ 123 \ 124 MOVQ rCu, rDo; \ 125 XORQ rCe, rDi; \ 126 ROLQ $1, rDo; \ 127 \ 128 MOVQ rCa, rDu; \ 129 XORQ rCi, rDo; \ 130 ROLQ $1, rDu; \ 131 \ 132 /* Result b */ \ 133 MOVQ _ba(iState), rBa; \ 134 MOVQ _ge(iState), rBe; \ 135 XORQ rCo, rDu; \ 136 MOVQ _ki(iState), rBi; \ 137 MOVQ _mo(iState), rBo; \ 138 MOVQ _su(iState), rBu; \ 139 XORQ rDe, rBe; \ 140 ROLQ $44, rBe; \ 141 XORQ rDi, rBi; \ 142 XORQ rDa, rBa; \ 143 ROLQ $43, rBi; \ 144 \ 145 MOVQ rBe, rCa; \ 146 MOVQ rc, rT1; \ 147 ORQ rBi, rCa; \ 148 XORQ rBa, rT1; \ 149 XORQ rT1, rCa; \ 150 MOVQ rCa, _ba(oState); \ 151 \ 152 XORQ rDu, rBu; \ 153 ROLQ $14, rBu; \ 154 MOVQ rBa, rCu; \ 155 ANDQ rBe, rCu; \ 156 XORQ rBu, rCu; \ 157 MOVQ rCu, _bu(oState); \ 158 \ 159 XORQ rDo, rBo; \ 160 ROLQ $21, rBo; \ 161 MOVQ rBo, rT1; \ 162 ANDQ rBu, rT1; \ 163 XORQ rBi, rT1; \ 164 MOVQ rT1, _bi(oState); \ 165 \ 166 NOTQ rBi; \ 167 ORQ rBa, rBu; \ 168 ORQ rBo, rBi; \ 169 XORQ rBo, rBu; \ 170 XORQ rBe, rBi; \ 171 MOVQ rBu, _bo(oState); \ 172 MOVQ rBi, _be(oState); \ 173 B_RBI_RCE; \ 174 \ 175 /* Result g */ \ 176 MOVQ _gu(iState), rBe; \ 177 XORQ rDu, rBe; \ 178 MOVQ _ka(iState), rBi; \ 179 ROLQ $20, rBe; \ 180 XORQ rDa, rBi; \ 181 ROLQ $3, rBi; \ 182 MOVQ _bo(iState), rBa; \ 183 MOVQ rBe, rT1; \ 184 ORQ rBi, rT1; \ 185 XORQ rDo, rBa; \ 186 MOVQ _me(iState), rBo; \ 187 MOVQ _si(iState), rBu; \ 188 ROLQ $28, rBa; \ 189 XORQ rBa, rT1; \ 190 MOVQ rT1, _ga(oState); \ 191 G_RT1_RCA; \ 192 \ 193 XORQ rDe, rBo; \ 194 ROLQ $45, rBo; \ 195 MOVQ rBi, rT1; \ 196 ANDQ rBo, rT1; \ 197 XORQ rBe, rT1; \ 198 MOVQ rT1, _ge(oState); \ 199 G_RT1_RCE; \ 200 \ 201 XORQ rDi, rBu; \ 202 ROLQ $61, rBu; \ 203 MOVQ rBu, rT1; \ 204 ORQ rBa, rT1; \ 205 XORQ rBo, rT1; \ 206 MOVQ rT1, _go(oState); \ 207 \ 208 ANDQ rBe, rBa; \ 209 XORQ rBu, rBa; \ 210 MOVQ rBa, _gu(oState); \ 211 NOTQ rBu; \ 212 G_RBA_RCU; \ 213 \ 214 ORQ rBu, rBo; \ 215 XORQ rBi, rBo; \ 216 MOVQ rBo, _gi(oState); \ 217 \ 218 /* Result k */ \ 219 MOVQ _be(iState), rBa; \ 220 MOVQ _gi(iState), rBe; \ 221 MOVQ _ko(iState), rBi; \ 222 MOVQ _mu(iState), rBo; \ 223 MOVQ _sa(iState), rBu; \ 224 XORQ rDi, rBe; \ 225 ROLQ $6, rBe; \ 226 XORQ rDo, rBi; \ 227 ROLQ $25, rBi; \ 228 MOVQ rBe, rT1; \ 229 ORQ rBi, rT1; \ 230 XORQ rDe, rBa; \ 231 ROLQ $1, rBa; \ 232 XORQ rBa, rT1; \ 233 MOVQ rT1, _ka(oState); \ 234 K_RT1_RCA; \ 235 \ 236 XORQ rDu, rBo; \ 237 ROLQ $8, rBo; \ 238 MOVQ rBi, rT1; \ 239 ANDQ rBo, rT1; \ 240 XORQ rBe, rT1; \ 241 MOVQ rT1, _ke(oState); \ 242 K_RT1_RCE; \ 243 \ 244 XORQ rDa, rBu; \ 245 ROLQ $18, rBu; \ 246 NOTQ rBo; \ 247 MOVQ rBo, rT1; \ 248 ANDQ rBu, rT1; \ 249 XORQ rBi, rT1; \ 250 MOVQ rT1, _ki(oState); \ 251 \ 252 MOVQ rBu, rT1; \ 253 ORQ rBa, rT1; \ 254 XORQ rBo, rT1; \ 255 MOVQ rT1, _ko(oState); \ 256 \ 257 ANDQ rBe, rBa; \ 258 XORQ rBu, rBa; \ 259 MOVQ rBa, _ku(oState); \ 260 K_RBA_RCU; \ 261 \ 262 /* Result m */ \ 263 MOVQ _ga(iState), rBe; \ 264 XORQ rDa, rBe; \ 265 MOVQ _ke(iState), rBi; \ 266 ROLQ $36, rBe; \ 267 XORQ rDe, rBi; \ 268 MOVQ _bu(iState), rBa; \ 269 ROLQ $10, rBi; \ 270 MOVQ rBe, rT1; \ 271 MOVQ _mi(iState), rBo; \ 272 ANDQ rBi, rT1; \ 273 XORQ rDu, rBa; \ 274 MOVQ _so(iState), rBu; \ 275 ROLQ $27, rBa; \ 276 XORQ rBa, rT1; \ 277 MOVQ rT1, _ma(oState); \ 278 M_RT1_RCA; \ 279 \ 280 XORQ rDi, rBo; \ 281 ROLQ $15, rBo; \ 282 MOVQ rBi, rT1; \ 283 ORQ rBo, rT1; \ 284 XORQ rBe, rT1; \ 285 MOVQ rT1, _me(oState); \ 286 M_RT1_RCE; \ 287 \ 288 XORQ rDo, rBu; \ 289 ROLQ $56, rBu; \ 290 NOTQ rBo; \ 291 MOVQ rBo, rT1; \ 292 ORQ rBu, rT1; \ 293 XORQ rBi, rT1; \ 294 MOVQ rT1, _mi(oState); \ 295 \ 296 ORQ rBa, rBe; \ 297 XORQ rBu, rBe; \ 298 MOVQ rBe, _mu(oState); \ 299 \ 300 ANDQ rBa, rBu; \ 301 XORQ rBo, rBu; \ 302 MOVQ rBu, _mo(oState); \ 303 M_RBE_RCU; \ 304 \ 305 /* Result s */ \ 306 MOVQ _bi(iState), rBa; \ 307 MOVQ _go(iState), rBe; \ 308 MOVQ _ku(iState), rBi; \ 309 XORQ rDi, rBa; \ 310 MOVQ _ma(iState), rBo; \ 311 ROLQ $62, rBa; \ 312 XORQ rDo, rBe; \ 313 MOVQ _se(iState), rBu; \ 314 ROLQ $55, rBe; \ 315 \ 316 XORQ rDu, rBi; \ 317 MOVQ rBa, rDu; \ 318 XORQ rDe, rBu; \ 319 ROLQ $2, rBu; \ 320 ANDQ rBe, rDu; \ 321 XORQ rBu, rDu; \ 322 MOVQ rDu, _su(oState); \ 323 \ 324 ROLQ $39, rBi; \ 325 S_RDU_RCU; \ 326 NOTQ rBe; \ 327 XORQ rDa, rBo; \ 328 MOVQ rBe, rDa; \ 329 ANDQ rBi, rDa; \ 330 XORQ rBa, rDa; \ 331 MOVQ rDa, _sa(oState); \ 332 S_RDA_RCA; \ 333 \ 334 ROLQ $41, rBo; \ 335 MOVQ rBi, rDe; \ 336 ORQ rBo, rDe; \ 337 XORQ rBe, rDe; \ 338 MOVQ rDe, _se(oState); \ 339 S_RDE_RCE; \ 340 \ 341 MOVQ rBo, rDi; \ 342 MOVQ rBu, rDo; \ 343 ANDQ rBu, rDi; \ 344 ORQ rBa, rDo; \ 345 XORQ rBi, rDi; \ 346 XORQ rBo, rDo; \ 347 MOVQ rDi, _si(oState); \ 348 MOVQ rDo, _so(oState) \ 349 350 // func keccakF1600(state *[25]uint64) 351 TEXT ·keccakF1600(SB), 0, $200-8 352 MOVQ state+0(FP), rpState 353 354 // Convert the user state into an internal state 355 NOTQ _be(rpState) 356 NOTQ _bi(rpState) 357 NOTQ _go(rpState) 358 NOTQ _ki(rpState) 359 NOTQ _mi(rpState) 360 NOTQ _sa(rpState) 361 362 // Execute the KeccakF permutation 363 MOVQ _ba(rpState), rCa 364 MOVQ _be(rpState), rCe 365 MOVQ _bu(rpState), rCu 366 367 XORQ _ga(rpState), rCa 368 XORQ _ge(rpState), rCe 369 XORQ _gu(rpState), rCu 370 371 XORQ _ka(rpState), rCa 372 XORQ _ke(rpState), rCe 373 XORQ _ku(rpState), rCu 374 375 XORQ _ma(rpState), rCa 376 XORQ _me(rpState), rCe 377 XORQ _mu(rpState), rCu 378 379 XORQ _sa(rpState), rCa 380 XORQ _se(rpState), rCe 381 MOVQ _si(rpState), rDi 382 MOVQ _so(rpState), rDo 383 XORQ _su(rpState), rCu 384 385 mKeccakRound(rpState, rpStack, $0x0000000000000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 386 mKeccakRound(rpStack, rpState, $0x0000000000008082, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 387 mKeccakRound(rpState, rpStack, $0x800000000000808a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 388 mKeccakRound(rpStack, rpState, $0x8000000080008000, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 389 mKeccakRound(rpState, rpStack, $0x000000000000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 390 mKeccakRound(rpStack, rpState, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 391 mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 392 mKeccakRound(rpStack, rpState, $0x8000000000008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 393 mKeccakRound(rpState, rpStack, $0x000000000000008a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 394 mKeccakRound(rpStack, rpState, $0x0000000000000088, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 395 mKeccakRound(rpState, rpStack, $0x0000000080008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 396 mKeccakRound(rpStack, rpState, $0x000000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 397 mKeccakRound(rpState, rpStack, $0x000000008000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 398 mKeccakRound(rpStack, rpState, $0x800000000000008b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 399 mKeccakRound(rpState, rpStack, $0x8000000000008089, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 400 mKeccakRound(rpStack, rpState, $0x8000000000008003, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 401 mKeccakRound(rpState, rpStack, $0x8000000000008002, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 402 mKeccakRound(rpStack, rpState, $0x8000000000000080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 403 mKeccakRound(rpState, rpStack, $0x000000000000800a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 404 mKeccakRound(rpStack, rpState, $0x800000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 405 mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 406 mKeccakRound(rpStack, rpState, $0x8000000000008080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 407 mKeccakRound(rpState, rpStack, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) 408 mKeccakRound(rpStack, rpState, $0x8000000080008008, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP) 409 410 // Revert the internal state to the user state 411 NOTQ _be(rpState) 412 NOTQ _bi(rpState) 413 NOTQ _go(rpState) 414 NOTQ _ki(rpState) 415 NOTQ _mi(rpState) 416 NOTQ _sa(rpState) 417 418 RET 419