Péter Szilágyi | 80b25ed | 2015-12-17 14:01:42 +0200 | [diff] [blame] | 1 | // Copyright 2015 The Go Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
| 5 | // +build amd64,!appengine,!gccgo |
| 6 | |
| 7 | // This code was translated into a form compatible with 6a from the public |
| 8 | // domain sources at https://github.com/gvanas/KeccakCodePackage |
| 9 | |
| 10 | // Offsets in state |
| 11 | #define _ba (0*8) |
| 12 | #define _be (1*8) |
| 13 | #define _bi (2*8) |
| 14 | #define _bo (3*8) |
| 15 | #define _bu (4*8) |
| 16 | #define _ga (5*8) |
| 17 | #define _ge (6*8) |
| 18 | #define _gi (7*8) |
| 19 | #define _go (8*8) |
| 20 | #define _gu (9*8) |
| 21 | #define _ka (10*8) |
| 22 | #define _ke (11*8) |
| 23 | #define _ki (12*8) |
| 24 | #define _ko (13*8) |
| 25 | #define _ku (14*8) |
| 26 | #define _ma (15*8) |
| 27 | #define _me (16*8) |
| 28 | #define _mi (17*8) |
| 29 | #define _mo (18*8) |
| 30 | #define _mu (19*8) |
| 31 | #define _sa (20*8) |
| 32 | #define _se (21*8) |
| 33 | #define _si (22*8) |
| 34 | #define _so (23*8) |
| 35 | #define _su (24*8) |
| 36 | |
| 37 | // Temporary registers |
| 38 | #define rT1 AX |
| 39 | |
| 40 | // Round vars |
| 41 | #define rpState DI |
| 42 | #define rpStack SP |
| 43 | |
| 44 | #define rDa BX |
| 45 | #define rDe CX |
| 46 | #define rDi DX |
| 47 | #define rDo R8 |
| 48 | #define rDu R9 |
| 49 | |
| 50 | #define rBa R10 |
| 51 | #define rBe R11 |
| 52 | #define rBi R12 |
| 53 | #define rBo R13 |
| 54 | #define rBu R14 |
| 55 | |
| 56 | #define rCa SI |
| 57 | #define rCe BP |
| 58 | #define rCi rBi |
| 59 | #define rCo rBo |
| 60 | #define rCu R15 |
| 61 | |
| 62 | #define MOVQ_RBI_RCE MOVQ rBi, rCe |
| 63 | #define XORQ_RT1_RCA XORQ rT1, rCa |
| 64 | #define XORQ_RT1_RCE XORQ rT1, rCe |
| 65 | #define XORQ_RBA_RCU XORQ rBa, rCu |
| 66 | #define XORQ_RBE_RCU XORQ rBe, rCu |
| 67 | #define XORQ_RDU_RCU XORQ rDu, rCu |
| 68 | #define XORQ_RDA_RCA XORQ rDa, rCa |
| 69 | #define XORQ_RDE_RCE XORQ rDe, rCe |
| 70 | |
| 71 | #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) \ |
| 72 | /* Prepare round */ \ |
| 73 | MOVQ rCe, rDa; \ |
| 74 | ROLQ $1, rDa; \ |
| 75 | \ |
| 76 | MOVQ _bi(iState), rCi; \ |
| 77 | XORQ _gi(iState), rDi; \ |
| 78 | XORQ rCu, rDa; \ |
| 79 | XORQ _ki(iState), rCi; \ |
| 80 | XORQ _mi(iState), rDi; \ |
| 81 | XORQ rDi, rCi; \ |
| 82 | \ |
| 83 | MOVQ rCi, rDe; \ |
| 84 | ROLQ $1, rDe; \ |
| 85 | \ |
| 86 | MOVQ _bo(iState), rCo; \ |
| 87 | XORQ _go(iState), rDo; \ |
| 88 | XORQ rCa, rDe; \ |
| 89 | XORQ _ko(iState), rCo; \ |
| 90 | XORQ _mo(iState), rDo; \ |
| 91 | XORQ rDo, rCo; \ |
| 92 | \ |
| 93 | MOVQ rCo, rDi; \ |
| 94 | ROLQ $1, rDi; \ |
| 95 | \ |
| 96 | MOVQ rCu, rDo; \ |
| 97 | XORQ rCe, rDi; \ |
| 98 | ROLQ $1, rDo; \ |
| 99 | \ |
| 100 | MOVQ rCa, rDu; \ |
| 101 | XORQ rCi, rDo; \ |
| 102 | ROLQ $1, rDu; \ |
| 103 | \ |
| 104 | /* Result b */ \ |
| 105 | MOVQ _ba(iState), rBa; \ |
| 106 | MOVQ _ge(iState), rBe; \ |
| 107 | XORQ rCo, rDu; \ |
| 108 | MOVQ _ki(iState), rBi; \ |
| 109 | MOVQ _mo(iState), rBo; \ |
| 110 | MOVQ _su(iState), rBu; \ |
| 111 | XORQ rDe, rBe; \ |
| 112 | ROLQ $44, rBe; \ |
| 113 | XORQ rDi, rBi; \ |
| 114 | XORQ rDa, rBa; \ |
| 115 | ROLQ $43, rBi; \ |
| 116 | \ |
| 117 | MOVQ rBe, rCa; \ |
| 118 | MOVQ rc, rT1; \ |
| 119 | ORQ rBi, rCa; \ |
| 120 | XORQ rBa, rT1; \ |
| 121 | XORQ rT1, rCa; \ |
| 122 | MOVQ rCa, _ba(oState); \ |
| 123 | \ |
| 124 | XORQ rDu, rBu; \ |
| 125 | ROLQ $14, rBu; \ |
| 126 | MOVQ rBa, rCu; \ |
| 127 | ANDQ rBe, rCu; \ |
| 128 | XORQ rBu, rCu; \ |
| 129 | MOVQ rCu, _bu(oState); \ |
| 130 | \ |
| 131 | XORQ rDo, rBo; \ |
| 132 | ROLQ $21, rBo; \ |
| 133 | MOVQ rBo, rT1; \ |
| 134 | ANDQ rBu, rT1; \ |
| 135 | XORQ rBi, rT1; \ |
| 136 | MOVQ rT1, _bi(oState); \ |
| 137 | \ |
| 138 | NOTQ rBi; \ |
| 139 | ORQ rBa, rBu; \ |
| 140 | ORQ rBo, rBi; \ |
| 141 | XORQ rBo, rBu; \ |
| 142 | XORQ rBe, rBi; \ |
| 143 | MOVQ rBu, _bo(oState); \ |
| 144 | MOVQ rBi, _be(oState); \ |
| 145 | B_RBI_RCE; \ |
| 146 | \ |
| 147 | /* Result g */ \ |
| 148 | MOVQ _gu(iState), rBe; \ |
| 149 | XORQ rDu, rBe; \ |
| 150 | MOVQ _ka(iState), rBi; \ |
| 151 | ROLQ $20, rBe; \ |
| 152 | XORQ rDa, rBi; \ |
| 153 | ROLQ $3, rBi; \ |
| 154 | MOVQ _bo(iState), rBa; \ |
| 155 | MOVQ rBe, rT1; \ |
| 156 | ORQ rBi, rT1; \ |
| 157 | XORQ rDo, rBa; \ |
| 158 | MOVQ _me(iState), rBo; \ |
| 159 | MOVQ _si(iState), rBu; \ |
| 160 | ROLQ $28, rBa; \ |
| 161 | XORQ rBa, rT1; \ |
| 162 | MOVQ rT1, _ga(oState); \ |
| 163 | G_RT1_RCA; \ |
| 164 | \ |
| 165 | XORQ rDe, rBo; \ |
| 166 | ROLQ $45, rBo; \ |
| 167 | MOVQ rBi, rT1; \ |
| 168 | ANDQ rBo, rT1; \ |
| 169 | XORQ rBe, rT1; \ |
| 170 | MOVQ rT1, _ge(oState); \ |
| 171 | G_RT1_RCE; \ |
| 172 | \ |
| 173 | XORQ rDi, rBu; \ |
| 174 | ROLQ $61, rBu; \ |
| 175 | MOVQ rBu, rT1; \ |
| 176 | ORQ rBa, rT1; \ |
| 177 | XORQ rBo, rT1; \ |
| 178 | MOVQ rT1, _go(oState); \ |
| 179 | \ |
| 180 | ANDQ rBe, rBa; \ |
| 181 | XORQ rBu, rBa; \ |
| 182 | MOVQ rBa, _gu(oState); \ |
| 183 | NOTQ rBu; \ |
| 184 | G_RBA_RCU; \ |
| 185 | \ |
| 186 | ORQ rBu, rBo; \ |
| 187 | XORQ rBi, rBo; \ |
| 188 | MOVQ rBo, _gi(oState); \ |
| 189 | \ |
| 190 | /* Result k */ \ |
| 191 | MOVQ _be(iState), rBa; \ |
| 192 | MOVQ _gi(iState), rBe; \ |
| 193 | MOVQ _ko(iState), rBi; \ |
| 194 | MOVQ _mu(iState), rBo; \ |
| 195 | MOVQ _sa(iState), rBu; \ |
| 196 | XORQ rDi, rBe; \ |
| 197 | ROLQ $6, rBe; \ |
| 198 | XORQ rDo, rBi; \ |
| 199 | ROLQ $25, rBi; \ |
| 200 | MOVQ rBe, rT1; \ |
| 201 | ORQ rBi, rT1; \ |
| 202 | XORQ rDe, rBa; \ |
| 203 | ROLQ $1, rBa; \ |
| 204 | XORQ rBa, rT1; \ |
| 205 | MOVQ rT1, _ka(oState); \ |
| 206 | K_RT1_RCA; \ |
| 207 | \ |
| 208 | XORQ rDu, rBo; \ |
| 209 | ROLQ $8, rBo; \ |
| 210 | MOVQ rBi, rT1; \ |
| 211 | ANDQ rBo, rT1; \ |
| 212 | XORQ rBe, rT1; \ |
| 213 | MOVQ rT1, _ke(oState); \ |
| 214 | K_RT1_RCE; \ |
| 215 | \ |
| 216 | XORQ rDa, rBu; \ |
| 217 | ROLQ $18, rBu; \ |
| 218 | NOTQ rBo; \ |
| 219 | MOVQ rBo, rT1; \ |
| 220 | ANDQ rBu, rT1; \ |
| 221 | XORQ rBi, rT1; \ |
| 222 | MOVQ rT1, _ki(oState); \ |
| 223 | \ |
| 224 | MOVQ rBu, rT1; \ |
| 225 | ORQ rBa, rT1; \ |
| 226 | XORQ rBo, rT1; \ |
| 227 | MOVQ rT1, _ko(oState); \ |
| 228 | \ |
| 229 | ANDQ rBe, rBa; \ |
| 230 | XORQ rBu, rBa; \ |
| 231 | MOVQ rBa, _ku(oState); \ |
| 232 | K_RBA_RCU; \ |
| 233 | \ |
| 234 | /* Result m */ \ |
| 235 | MOVQ _ga(iState), rBe; \ |
| 236 | XORQ rDa, rBe; \ |
| 237 | MOVQ _ke(iState), rBi; \ |
| 238 | ROLQ $36, rBe; \ |
| 239 | XORQ rDe, rBi; \ |
| 240 | MOVQ _bu(iState), rBa; \ |
| 241 | ROLQ $10, rBi; \ |
| 242 | MOVQ rBe, rT1; \ |
| 243 | MOVQ _mi(iState), rBo; \ |
| 244 | ANDQ rBi, rT1; \ |
| 245 | XORQ rDu, rBa; \ |
| 246 | MOVQ _so(iState), rBu; \ |
| 247 | ROLQ $27, rBa; \ |
| 248 | XORQ rBa, rT1; \ |
| 249 | MOVQ rT1, _ma(oState); \ |
| 250 | M_RT1_RCA; \ |
| 251 | \ |
| 252 | XORQ rDi, rBo; \ |
| 253 | ROLQ $15, rBo; \ |
| 254 | MOVQ rBi, rT1; \ |
| 255 | ORQ rBo, rT1; \ |
| 256 | XORQ rBe, rT1; \ |
| 257 | MOVQ rT1, _me(oState); \ |
| 258 | M_RT1_RCE; \ |
| 259 | \ |
| 260 | XORQ rDo, rBu; \ |
| 261 | ROLQ $56, rBu; \ |
| 262 | NOTQ rBo; \ |
| 263 | MOVQ rBo, rT1; \ |
| 264 | ORQ rBu, rT1; \ |
| 265 | XORQ rBi, rT1; \ |
| 266 | MOVQ rT1, _mi(oState); \ |
| 267 | \ |
| 268 | ORQ rBa, rBe; \ |
| 269 | XORQ rBu, rBe; \ |
| 270 | MOVQ rBe, _mu(oState); \ |
| 271 | \ |
| 272 | ANDQ rBa, rBu; \ |
| 273 | XORQ rBo, rBu; \ |
| 274 | MOVQ rBu, _mo(oState); \ |
| 275 | M_RBE_RCU; \ |
| 276 | \ |
| 277 | /* Result s */ \ |
| 278 | MOVQ _bi(iState), rBa; \ |
| 279 | MOVQ _go(iState), rBe; \ |
| 280 | MOVQ _ku(iState), rBi; \ |
| 281 | XORQ rDi, rBa; \ |
| 282 | MOVQ _ma(iState), rBo; \ |
| 283 | ROLQ $62, rBa; \ |
| 284 | XORQ rDo, rBe; \ |
| 285 | MOVQ _se(iState), rBu; \ |
| 286 | ROLQ $55, rBe; \ |
| 287 | \ |
| 288 | XORQ rDu, rBi; \ |
| 289 | MOVQ rBa, rDu; \ |
| 290 | XORQ rDe, rBu; \ |
| 291 | ROLQ $2, rBu; \ |
| 292 | ANDQ rBe, rDu; \ |
| 293 | XORQ rBu, rDu; \ |
| 294 | MOVQ rDu, _su(oState); \ |
| 295 | \ |
| 296 | ROLQ $39, rBi; \ |
| 297 | S_RDU_RCU; \ |
| 298 | NOTQ rBe; \ |
| 299 | XORQ rDa, rBo; \ |
| 300 | MOVQ rBe, rDa; \ |
| 301 | ANDQ rBi, rDa; \ |
| 302 | XORQ rBa, rDa; \ |
| 303 | MOVQ rDa, _sa(oState); \ |
| 304 | S_RDA_RCA; \ |
| 305 | \ |
| 306 | ROLQ $41, rBo; \ |
| 307 | MOVQ rBi, rDe; \ |
| 308 | ORQ rBo, rDe; \ |
| 309 | XORQ rBe, rDe; \ |
| 310 | MOVQ rDe, _se(oState); \ |
| 311 | S_RDE_RCE; \ |
| 312 | \ |
| 313 | MOVQ rBo, rDi; \ |
| 314 | MOVQ rBu, rDo; \ |
| 315 | ANDQ rBu, rDi; \ |
| 316 | ORQ rBa, rDo; \ |
| 317 | XORQ rBi, rDi; \ |
| 318 | XORQ rBo, rDo; \ |
| 319 | MOVQ rDi, _si(oState); \ |
| 320 | MOVQ rDo, _so(oState) \ |
| 321 | |
| 322 | // func keccakF1600(state *[25]uint64) |
| 323 | TEXT ·keccakF1600(SB), 0, $200-8 |
| 324 | MOVQ state+0(FP), rpState |
Péter Szilágyi | 80b25ed | 2015-12-17 14:01:42 +0200 | [diff] [blame] | 325 | |
| 326 | // Convert the user state into an internal state |
| 327 | NOTQ _be(rpState) |
| 328 | NOTQ _bi(rpState) |
| 329 | NOTQ _go(rpState) |
| 330 | NOTQ _ki(rpState) |
| 331 | NOTQ _mi(rpState) |
| 332 | NOTQ _sa(rpState) |
| 333 | |
| 334 | // Execute the KeccakF permutation |
| 335 | MOVQ _ba(rpState), rCa |
| 336 | MOVQ _be(rpState), rCe |
| 337 | MOVQ _bu(rpState), rCu |
| 338 | |
| 339 | XORQ _ga(rpState), rCa |
| 340 | XORQ _ge(rpState), rCe |
| 341 | XORQ _gu(rpState), rCu |
| 342 | |
| 343 | XORQ _ka(rpState), rCa |
| 344 | XORQ _ke(rpState), rCe |
| 345 | XORQ _ku(rpState), rCu |
| 346 | |
| 347 | XORQ _ma(rpState), rCa |
| 348 | XORQ _me(rpState), rCe |
| 349 | XORQ _mu(rpState), rCu |
| 350 | |
| 351 | XORQ _sa(rpState), rCa |
| 352 | XORQ _se(rpState), rCe |
| 353 | MOVQ _si(rpState), rDi |
| 354 | MOVQ _so(rpState), rDo |
| 355 | XORQ _su(rpState), rCu |
| 356 | |
| 357 | 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) |
| 358 | 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) |
| 359 | 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) |
| 360 | 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) |
| 361 | 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) |
| 362 | 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) |
| 363 | 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) |
| 364 | 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) |
| 365 | 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) |
| 366 | 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) |
| 367 | 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) |
| 368 | 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) |
| 369 | 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) |
| 370 | 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) |
| 371 | 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) |
| 372 | 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) |
| 373 | 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) |
| 374 | 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) |
| 375 | 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) |
| 376 | 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) |
| 377 | 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) |
| 378 | 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) |
| 379 | 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) |
| 380 | mKeccakRound(rpStack, rpState, $0x8000000080008008, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP) |
| 381 | |
| 382 | // Revert the internal state to the user state |
| 383 | NOTQ _be(rpState) |
| 384 | NOTQ _bi(rpState) |
| 385 | NOTQ _go(rpState) |
| 386 | NOTQ _ki(rpState) |
| 387 | NOTQ _mi(rpState) |
| 388 | NOTQ _sa(rpState) |
| 389 | |
Péter Szilágyi | 80b25ed | 2015-12-17 14:01:42 +0200 | [diff] [blame] | 390 | RET |