keccakf_amd64.s 14 KB

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