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