keccak1600-ppc64.s 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669
  1. .abiversion 2
  2. .text
  3. .type KeccakF1600_int,@function
  4. .align 5
  5. KeccakF1600_int:
  6. .localentry KeccakF1600_int,0
  7. li 0,24
  8. mtctr 0
  9. b .Loop
  10. .align 4
  11. .Loop:
  12. xor 0,7,12
  13. std 11,96(1)
  14. xor 3,8,6
  15. std 16,104(1)
  16. xor 4,9,14
  17. std 21,112(1)
  18. xor 5,10,15
  19. std 26,120(1)
  20. xor 11,11,16
  21. xor 0,0,17
  22. xor 3,3,18
  23. xor 4,4,19
  24. xor 5,5,20
  25. xor 11,11,21
  26. xor 0,0,22
  27. xor 3,3,23
  28. xor 4,4,24
  29. xor 5,5,25
  30. xor 11,11,26
  31. xor 0,0,27
  32. xor 4,4,29
  33. xor 3,3,28
  34. xor 5,5,30
  35. rotldi 16,4,1
  36. xor 11,11,31
  37. rotldi 21,5,1
  38. xor 16,16,0
  39. rotldi 26,11,1
  40. xor 8,8,16
  41. xor 6,6,16
  42. xor 18,18,16
  43. xor 23,23,16
  44. xor 28,28,16
  45. rotldi 16,0,1
  46. xor 21,21,3
  47. xor 4,4,26
  48. rotldi 26,3,1
  49. xor 5,5,16
  50. xor 11,11,26
  51. xor 3, 9,21
  52. xor 14,14,21
  53. xor 19,19,21
  54. xor 24,24,21
  55. xor 29,29,21
  56. xor 7,7,11
  57. xor 12,12,11
  58. xor 17,17,11
  59. xor 22,22,11
  60. xor 27,27,11
  61. ld 11,96(1)
  62. xor 0, 10,4
  63. ld 16,104(1)
  64. xor 15,15,4
  65. ld 21,112(1)
  66. xor 20,20,4
  67. ld 26,120(1)
  68. xor 25,25,4
  69. xor 30,30,4
  70. xor 4, 11,5
  71. xor 16,16,5
  72. xor 21,21,5
  73. xor 26,26,5
  74. xor 31,31,5
  75. mr 5,8
  76. rotldi 8,6,44
  77. rotldi 9,19,43
  78. rotldi 10,25,21
  79. rotldi 11,31,14
  80. rotldi 6,16,20
  81. rotldi 19,20,25
  82. rotldi 25,24,15
  83. rotldi 31,28,2
  84. rotldi 16,29,61
  85. rotldi 20,26,8
  86. rotldi 24,18,10
  87. rotldi 28,15,55
  88. rotldi 29,21,39
  89. rotldi 26,30,56
  90. rotldi 18,14,6
  91. rotldi 15,23,45
  92. rotldi 21,27,18
  93. rotldi 30,22,41
  94. rotldi 14,17,3
  95. rotldi 23,12,36
  96. rotldi 12,0,28
  97. rotldi 17,5,1
  98. rotldi 22,4,27
  99. rotldi 27,3,62
  100. andc 0,9,8
  101. andc 3,10,9
  102. andc 4,7,11
  103. andc 5,8,7
  104. xor 7,7,0
  105. andc 0,11,10
  106. xor 8,8,3
  107. ld 3,80(1)
  108. xor 10,10,4
  109. xor 11,11,5
  110. xor 9,9,0
  111. ldu 5,8(3)
  112. andc 0,14,6
  113. std 3,80(1)
  114. andc 3,15,14
  115. andc 4,12,16
  116. xor 7,7,5
  117. andc 5,6,12
  118. xor 12,12,0
  119. andc 0,16,15
  120. xor 6,6,3
  121. xor 15,15,4
  122. xor 16,16,5
  123. xor 14,14,0
  124. andc 0,19,18
  125. andc 3,20,19
  126. andc 4,17,21
  127. andc 5,18,17
  128. xor 17,17,0
  129. andc 0,21,20
  130. xor 18,18,3
  131. xor 20,20,4
  132. xor 21,21,5
  133. xor 19,19,0
  134. andc 0,24,23
  135. andc 3,25,24
  136. andc 4,22,26
  137. andc 5,23,22
  138. xor 22,22,0
  139. andc 0,26,25
  140. xor 23,23,3
  141. xor 25,25,4
  142. xor 26,26,5
  143. xor 24,24,0
  144. andc 0,29,28
  145. andc 3,30,29
  146. andc 4,27,31
  147. andc 5,28,27
  148. xor 27,27,0
  149. andc 0,31,30
  150. xor 28,28,3
  151. xor 30,30,4
  152. xor 31,31,5
  153. xor 29,29,0
  154. bdnz .Loop
  155. blr
  156. .long 0
  157. .byte 0,12,0x14,0,0,0,0,0
  158. .size KeccakF1600_int,.-KeccakF1600_int
  159. .type KeccakF1600,@function
  160. .align 5
  161. KeccakF1600:
  162. .localentry KeccakF1600,0
  163. stdu 1,-272(1)
  164. mflr 0
  165. std 14,128(1)
  166. std 15,136(1)
  167. std 16,144(1)
  168. std 17,152(1)
  169. std 18,160(1)
  170. std 19,168(1)
  171. std 20,176(1)
  172. std 21,184(1)
  173. std 22,192(1)
  174. std 23,200(1)
  175. std 24,208(1)
  176. std 25,216(1)
  177. std 26,224(1)
  178. std 27,232(1)
  179. std 28,240(1)
  180. std 29,248(1)
  181. std 30,256(1)
  182. std 31,264(1)
  183. std 0,288(1)
  184. bl PICmeup
  185. subi 12,12,8
  186. std 3,48(1)
  187. std 12,80(1)
  188. ld 7,0(3)
  189. ld 8,8(3)
  190. ld 9,16(3)
  191. ld 10,24(3)
  192. ld 11,32(3)
  193. ld 12,40(3)
  194. ld 6,48(3)
  195. ld 14,56(3)
  196. ld 15,64(3)
  197. ld 16,72(3)
  198. ld 17,80(3)
  199. ld 18,88(3)
  200. ld 19,96(3)
  201. ld 20,104(3)
  202. ld 21,112(3)
  203. ld 22,120(3)
  204. ld 23,128(3)
  205. ld 24,136(3)
  206. ld 25,144(3)
  207. ld 26,152(3)
  208. ld 27,160(3)
  209. ld 28,168(3)
  210. ld 29,176(3)
  211. ld 30,184(3)
  212. ld 31,192(3)
  213. bl KeccakF1600_int
  214. ld 3,48(1)
  215. std 7,0(3)
  216. std 8,8(3)
  217. std 9,16(3)
  218. std 10,24(3)
  219. std 11,32(3)
  220. std 12,40(3)
  221. std 6,48(3)
  222. std 14,56(3)
  223. std 15,64(3)
  224. std 16,72(3)
  225. std 17,80(3)
  226. std 18,88(3)
  227. std 19,96(3)
  228. std 20,104(3)
  229. std 21,112(3)
  230. std 22,120(3)
  231. std 23,128(3)
  232. std 24,136(3)
  233. std 25,144(3)
  234. std 26,152(3)
  235. std 27,160(3)
  236. std 28,168(3)
  237. std 29,176(3)
  238. std 30,184(3)
  239. std 31,192(3)
  240. ld 0,288(1)
  241. ld 14,128(1)
  242. ld 15,136(1)
  243. ld 16,144(1)
  244. ld 17,152(1)
  245. ld 18,160(1)
  246. ld 19,168(1)
  247. ld 20,176(1)
  248. ld 21,184(1)
  249. ld 22,192(1)
  250. ld 23,200(1)
  251. ld 24,208(1)
  252. ld 25,216(1)
  253. ld 26,224(1)
  254. ld 27,232(1)
  255. ld 28,240(1)
  256. ld 29,248(1)
  257. ld 30,256(1)
  258. ld 31,264(1)
  259. mtlr 0
  260. addi 1,1,272
  261. blr
  262. .long 0
  263. .byte 0,12,4,1,0x80,18,1,0
  264. .long 0
  265. .size KeccakF1600,.-KeccakF1600
  266. .type dword_le_load,@function
  267. .align 5
  268. dword_le_load:
  269. .localentry dword_le_load,0
  270. lbzu 0,1(3)
  271. lbzu 4,1(3)
  272. lbzu 5,1(3)
  273. insrdi 0,4,8,48
  274. lbzu 4,1(3)
  275. insrdi 0,5,8,40
  276. lbzu 5,1(3)
  277. insrdi 0,4,8,32
  278. lbzu 4,1(3)
  279. insrdi 0,5,8,24
  280. lbzu 5,1(3)
  281. insrdi 0,4,8,16
  282. lbzu 4,1(3)
  283. insrdi 0,5,8,8
  284. insrdi 0,4,8,0
  285. blr
  286. .long 0
  287. .byte 0,12,0x14,0,0,0,1,0
  288. .long 0
  289. .size dword_le_load,.-dword_le_load
  290. .globl SHA3_absorb
  291. .type SHA3_absorb,@function
  292. .type SHA3_absorb,@function
  293. .align 5
  294. SHA3_absorb:
  295. .localentry SHA3_absorb,0
  296. stdu 1,-272(1)
  297. mflr 0
  298. std 14,128(1)
  299. std 15,136(1)
  300. std 16,144(1)
  301. std 17,152(1)
  302. std 18,160(1)
  303. std 19,168(1)
  304. std 20,176(1)
  305. std 21,184(1)
  306. std 22,192(1)
  307. std 23,200(1)
  308. std 24,208(1)
  309. std 25,216(1)
  310. std 26,224(1)
  311. std 27,232(1)
  312. std 28,240(1)
  313. std 29,248(1)
  314. std 30,256(1)
  315. std 31,264(1)
  316. std 0,288(1)
  317. bl PICmeup
  318. subi 4,4,1
  319. subi 12,12,8
  320. std 3,48(1)
  321. std 4,56(1)
  322. std 5,64(1)
  323. std 6,72(1)
  324. mr 0,6
  325. std 12,80(1)
  326. ld 7,0(3)
  327. ld 8,8(3)
  328. ld 9,16(3)
  329. ld 10,24(3)
  330. ld 11,32(3)
  331. ld 12,40(3)
  332. ld 6,48(3)
  333. ld 14,56(3)
  334. ld 15,64(3)
  335. ld 16,72(3)
  336. ld 17,80(3)
  337. ld 18,88(3)
  338. ld 19,96(3)
  339. ld 20,104(3)
  340. ld 21,112(3)
  341. ld 22,120(3)
  342. ld 23,128(3)
  343. ld 24,136(3)
  344. ld 25,144(3)
  345. ld 26,152(3)
  346. ld 27,160(3)
  347. ld 28,168(3)
  348. ld 29,176(3)
  349. ld 30,184(3)
  350. ld 31,192(3)
  351. mr 3,4
  352. mr 4,5
  353. mr 5,0
  354. b .Loop_absorb
  355. .align 4
  356. .Loop_absorb:
  357. cmpld 4,5
  358. blt .Labsorbed
  359. sub 4,4,5
  360. srwi 5,5,3
  361. std 4,64(1)
  362. mtctr 5
  363. bl dword_le_load
  364. xor 7,7,0
  365. bdz .Lprocess_block
  366. bl dword_le_load
  367. xor 8,8,0
  368. bdz .Lprocess_block
  369. bl dword_le_load
  370. xor 9,9,0
  371. bdz .Lprocess_block
  372. bl dword_le_load
  373. xor 10,10,0
  374. bdz .Lprocess_block
  375. bl dword_le_load
  376. xor 11,11,0
  377. bdz .Lprocess_block
  378. bl dword_le_load
  379. xor 12,12,0
  380. bdz .Lprocess_block
  381. bl dword_le_load
  382. xor 6,6,0
  383. bdz .Lprocess_block
  384. bl dword_le_load
  385. xor 14,14,0
  386. bdz .Lprocess_block
  387. bl dword_le_load
  388. xor 15,15,0
  389. bdz .Lprocess_block
  390. bl dword_le_load
  391. xor 16,16,0
  392. bdz .Lprocess_block
  393. bl dword_le_load
  394. xor 17,17,0
  395. bdz .Lprocess_block
  396. bl dword_le_load
  397. xor 18,18,0
  398. bdz .Lprocess_block
  399. bl dword_le_load
  400. xor 19,19,0
  401. bdz .Lprocess_block
  402. bl dword_le_load
  403. xor 20,20,0
  404. bdz .Lprocess_block
  405. bl dword_le_load
  406. xor 21,21,0
  407. bdz .Lprocess_block
  408. bl dword_le_load
  409. xor 22,22,0
  410. bdz .Lprocess_block
  411. bl dword_le_load
  412. xor 23,23,0
  413. bdz .Lprocess_block
  414. bl dword_le_load
  415. xor 24,24,0
  416. bdz .Lprocess_block
  417. bl dword_le_load
  418. xor 25,25,0
  419. bdz .Lprocess_block
  420. bl dword_le_load
  421. xor 26,26,0
  422. bdz .Lprocess_block
  423. bl dword_le_load
  424. xor 27,27,0
  425. bdz .Lprocess_block
  426. bl dword_le_load
  427. xor 28,28,0
  428. bdz .Lprocess_block
  429. bl dword_le_load
  430. xor 29,29,0
  431. bdz .Lprocess_block
  432. bl dword_le_load
  433. xor 30,30,0
  434. bdz .Lprocess_block
  435. bl dword_le_load
  436. xor 31,31,0
  437. .Lprocess_block:
  438. std 3,56(1)
  439. bl KeccakF1600_int
  440. ld 0,80(1)
  441. ld 5,72(1)
  442. ld 4,64(1)
  443. ld 3,56(1)
  444. addic 0,0,-192
  445. std 0,80(1)
  446. b .Loop_absorb
  447. .align 4
  448. .Labsorbed:
  449. ld 3,48(1)
  450. std 7,0(3)
  451. std 8,8(3)
  452. std 9,16(3)
  453. std 10,24(3)
  454. std 11,32(3)
  455. std 12,40(3)
  456. std 6,48(3)
  457. std 14,56(3)
  458. std 15,64(3)
  459. std 16,72(3)
  460. std 17,80(3)
  461. std 18,88(3)
  462. std 19,96(3)
  463. std 20,104(3)
  464. std 21,112(3)
  465. std 22,120(3)
  466. std 23,128(3)
  467. std 24,136(3)
  468. std 25,144(3)
  469. std 26,152(3)
  470. std 27,160(3)
  471. std 28,168(3)
  472. std 29,176(3)
  473. std 30,184(3)
  474. std 31,192(3)
  475. mr 3,4
  476. ld 0,288(1)
  477. ld 14,128(1)
  478. ld 15,136(1)
  479. ld 16,144(1)
  480. ld 17,152(1)
  481. ld 18,160(1)
  482. ld 19,168(1)
  483. ld 20,176(1)
  484. ld 21,184(1)
  485. ld 22,192(1)
  486. ld 23,200(1)
  487. ld 24,208(1)
  488. ld 25,216(1)
  489. ld 26,224(1)
  490. ld 27,232(1)
  491. ld 28,240(1)
  492. ld 29,248(1)
  493. ld 30,256(1)
  494. ld 31,264(1)
  495. mtlr 0
  496. addi 1,1,272
  497. blr
  498. .long 0
  499. .byte 0,12,4,1,0x80,18,4,0
  500. .long 0
  501. .size SHA3_absorb,.-SHA3_absorb
  502. .globl SHA3_squeeze
  503. .type SHA3_squeeze,@function
  504. .type SHA3_squeeze,@function
  505. .align 5
  506. SHA3_squeeze:
  507. .localentry SHA3_squeeze,0
  508. stdu 1,-80(1)
  509. mflr 0
  510. std 28,48(1)
  511. std 29,56(1)
  512. std 30,64(1)
  513. std 31,72(1)
  514. std 0,96(1)
  515. mr 28,3
  516. subi 3,3,8
  517. subi 29,4,1
  518. mr 30,5
  519. mr 31,6
  520. b .Loop_squeeze
  521. .align 4
  522. .Loop_squeeze:
  523. ldu 0,8(3)
  524. cmpldi 30,8
  525. blt .Lsqueeze_tail
  526. stbu 0,1(29)
  527. srdi 0,0,8
  528. stbu 0,1(29)
  529. srdi 0,0,8
  530. stbu 0,1(29)
  531. srdi 0,0,8
  532. stbu 0,1(29)
  533. srdi 0,0,8
  534. stbu 0,1(29)
  535. srdi 0,0,8
  536. stbu 0,1(29)
  537. srdi 0,0,8
  538. stbu 0,1(29)
  539. srdi 0,0,8
  540. stbu 0,1(29)
  541. subic. 30,30,8
  542. beq .Lsqueeze_done
  543. subic. 6,6,8
  544. bgt .Loop_squeeze
  545. mr 3,28
  546. bl KeccakF1600
  547. subi 3,28,8
  548. mr 6,31
  549. b .Loop_squeeze
  550. .align 4
  551. .Lsqueeze_tail:
  552. mtctr 30
  553. .Loop_tail:
  554. stbu 0,1(29)
  555. srdi 0,0,8
  556. bdnz .Loop_tail
  557. .Lsqueeze_done:
  558. ld 0,96(1)
  559. ld 28,48(1)
  560. ld 29,56(1)
  561. ld 30,64(1)
  562. ld 31,72(1)
  563. mtlr 0
  564. addi 1,1,80
  565. blr
  566. .long 0
  567. .byte 0,12,4,1,0x80,4,4,0
  568. .long 0
  569. .size SHA3_squeeze,.-SHA3_squeeze
  570. .align 6
  571. PICmeup:
  572. mflr 0
  573. bcl 20,31,$+4
  574. mflr 12
  575. addi 12,12,56
  576. mtlr 0
  577. blr
  578. .long 0
  579. .byte 0,12,0x14,0,0,0,0,0
  580. .space 28
  581. .type iotas,@object
  582. iotas:
  583. .long 0x00000001,0x00000000
  584. .long 0x00008082,0x00000000
  585. .long 0x0000808a,0x80000000
  586. .long 0x80008000,0x80000000
  587. .long 0x0000808b,0x00000000
  588. .long 0x80000001,0x00000000
  589. .long 0x80008081,0x80000000
  590. .long 0x00008009,0x80000000
  591. .long 0x0000008a,0x00000000
  592. .long 0x00000088,0x00000000
  593. .long 0x80008009,0x00000000
  594. .long 0x8000000a,0x00000000
  595. .long 0x8000808b,0x00000000
  596. .long 0x0000008b,0x80000000
  597. .long 0x00008089,0x80000000
  598. .long 0x00008003,0x80000000
  599. .long 0x00008002,0x80000000
  600. .long 0x00000080,0x80000000
  601. .long 0x0000800a,0x00000000
  602. .long 0x8000000a,0x80000000
  603. .long 0x80008081,0x80000000
  604. .long 0x00008080,0x80000000
  605. .long 0x80000001,0x00000000
  606. .long 0x80008008,0x80000000
  607. .size iotas,.-iotas
  608. .byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,80,80,67,54,52,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
  609. .align 2