/* Do not modify. This file is auto-generated from keccak1600-ppc64.pl. */
.abiversion	2
.text

.type	KeccakF1600_int,@function
.align	5
KeccakF1600_int:
.localentry	KeccakF1600_int,0

	li	0,24
	mtctr	0
	b	.Loop
.align	4
.Loop:
	xor	0,7,12
	std	11,96(1)
	xor	3,8,6
	std	16,104(1)
	xor	4,9,14
	std	21,112(1)
	xor	5,10,15
	std	26,120(1)
	xor	11,11,16
	xor	0,0,17
	xor	3,3,18
	xor	4,4,19
	xor	5,5,20
	xor	11,11,21
	xor	0,0,22
	xor	3,3,23
	xor	4,4,24
	xor	5,5,25
	xor	11,11,26
	xor	0,0,27
	xor	4,4,29
	xor	3,3,28
	xor	5,5,30
	rotldi	16,4,1
	xor	11,11,31
	rotldi	21,5,1
	xor	16,16,0
	rotldi	26,11,1

	xor	8,8,16
	xor	6,6,16
	xor	18,18,16
	xor	23,23,16
	xor	28,28,16

	rotldi	16,0,1
	xor	21,21,3
	xor	4,4,26
	rotldi	26,3,1
	xor	5,5,16
	xor	11,11,26

	xor	3,   9,21
	xor	14,14,21
	xor	19,19,21
	xor	24,24,21
	xor	29,29,21

	xor	7,7,11
	xor	12,12,11
	xor	17,17,11
	xor	22,22,11
	xor	27,27,11
	ld	11,96(1)
	xor	0,   10,4
	ld	16,104(1)
	xor	15,15,4
	ld	21,112(1)
	xor	20,20,4
	ld	26,120(1)
	xor	25,25,4
	xor	30,30,4

	xor	4,   11,5
	xor	16,16,5
	xor	21,21,5
	xor	26,26,5
	xor	31,31,5

	mr	5,8
	rotldi	8,6,44

	rotldi	9,19,43

	rotldi	10,25,21

	rotldi	11,31,14

	rotldi	6,16,20
	rotldi	19,20,25
	rotldi	25,24,15
	rotldi	31,28,2

	rotldi	16,29,61
	rotldi	20,26,8
	rotldi	24,18,10
	rotldi	28,15,55

	rotldi	29,21,39
	rotldi	26,30,56
	rotldi	18,14,6
	rotldi	15,23,45

	rotldi	21,27,18
	rotldi	30,22,41
	rotldi	14,17,3
	rotldi	23,12,36

	rotldi	12,0,28
	rotldi	17,5,1
	rotldi	22,4,27
	rotldi	27,3,62

	andc	0,9,8
	andc	3,10,9
	andc	4,7,11
	andc	5,8,7
	xor	7,7,0
	andc	0,11,10
	xor	8,8,3
	ld	3,80(1)
	xor	10,10,4
	xor	11,11,5
	xor	9,9,0
	ldu	5,8(3)

	andc	0,14,6
	std	3,80(1)
	andc	3,15,14
	andc	4,12,16
	xor	7,7,5
	andc	5,6,12
	xor	12,12,0
	andc	0,16,15
	xor	6,6,3
	xor	15,15,4
	xor	16,16,5
	xor	14,14,0

	andc	0,19,18
	andc	3,20,19
	andc	4,17,21
	andc	5,18,17
	xor	17,17,0
	andc	0,21,20
	xor	18,18,3
	xor	20,20,4
	xor	21,21,5
	xor	19,19,0

	andc	0,24,23
	andc	3,25,24
	andc	4,22,26
	andc	5,23,22
	xor	22,22,0
	andc	0,26,25
	xor	23,23,3
	xor	25,25,4
	xor	26,26,5
	xor	24,24,0

	andc	0,29,28
	andc	3,30,29
	andc	4,27,31
	andc	5,28,27
	xor	27,27,0
	andc	0,31,30
	xor	28,28,3
	xor	30,30,4
	xor	31,31,5
	xor	29,29,0

	bdnz	.Loop

	blr	
.long	0
.byte	0,12,0x14,0,0,0,0,0
.size	KeccakF1600_int,.-KeccakF1600_int

.type	KeccakF1600,@function
.align	5
KeccakF1600:
.localentry	KeccakF1600,0

	stdu	1,-272(1)
	mflr	0
	std	14,128(1)
	std	15,136(1)
	std	16,144(1)
	std	17,152(1)
	std	18,160(1)
	std	19,168(1)
	std	20,176(1)
	std	21,184(1)
	std	22,192(1)
	std	23,200(1)
	std	24,208(1)
	std	25,216(1)
	std	26,224(1)
	std	27,232(1)
	std	28,240(1)
	std	29,248(1)
	std	30,256(1)
	std	31,264(1)
	std	0,288(1)

	bl	PICmeup
	subi	12,12,8

	std	3,48(1)



	std	12,80(1)

	ld	7,0(3)
	ld	8,8(3)
	ld	9,16(3)
	ld	10,24(3)
	ld	11,32(3)
	ld	12,40(3)
	ld	6,48(3)
	ld	14,56(3)
	ld	15,64(3)
	ld	16,72(3)
	ld	17,80(3)
	ld	18,88(3)
	ld	19,96(3)
	ld	20,104(3)
	ld	21,112(3)
	ld	22,120(3)
	ld	23,128(3)
	ld	24,136(3)
	ld	25,144(3)
	ld	26,152(3)
	ld	27,160(3)
	ld	28,168(3)
	ld	29,176(3)
	ld	30,184(3)
	ld	31,192(3)

	bl	KeccakF1600_int

	ld	3,48(1)
	std	7,0(3)
	std	8,8(3)
	std	9,16(3)
	std	10,24(3)
	std	11,32(3)
	std	12,40(3)
	std	6,48(3)
	std	14,56(3)
	std	15,64(3)
	std	16,72(3)
	std	17,80(3)
	std	18,88(3)
	std	19,96(3)
	std	20,104(3)
	std	21,112(3)
	std	22,120(3)
	std	23,128(3)
	std	24,136(3)
	std	25,144(3)
	std	26,152(3)
	std	27,160(3)
	std	28,168(3)
	std	29,176(3)
	std	30,184(3)
	std	31,192(3)

	ld	0,288(1)
	ld	14,128(1)
	ld	15,136(1)
	ld	16,144(1)
	ld	17,152(1)
	ld	18,160(1)
	ld	19,168(1)
	ld	20,176(1)
	ld	21,184(1)
	ld	22,192(1)
	ld	23,200(1)
	ld	24,208(1)
	ld	25,216(1)
	ld	26,224(1)
	ld	27,232(1)
	ld	28,240(1)
	ld	29,248(1)
	ld	30,256(1)
	ld	31,264(1)
	mtlr	0
	addi	1,1,272
	blr	
.long	0
.byte	0,12,4,1,0x80,18,1,0
.long	0
.size	KeccakF1600,.-KeccakF1600

.type	dword_le_load,@function
.align	5
dword_le_load:
.localentry	dword_le_load,0

	lbzu	0,1(3)
	lbzu	4,1(3)
	lbzu	5,1(3)
	insrdi	0,4,8,48
	lbzu	4,1(3)
	insrdi	0,5,8,40
	lbzu	5,1(3)
	insrdi	0,4,8,32
	lbzu	4,1(3)
	insrdi	0,5,8,24
	lbzu	5,1(3)
	insrdi	0,4,8,16
	lbzu	4,1(3)
	insrdi	0,5,8,8
	insrdi	0,4,8,0
	blr	
.long	0
.byte	0,12,0x14,0,0,0,1,0
.long	0
.size	dword_le_load,.-dword_le_load

.globl	SHA3_absorb
.type	SHA3_absorb,@function
.type	SHA3_absorb,@function
.align	5
SHA3_absorb:
.localentry	SHA3_absorb,0

	stdu	1,-272(1)
	mflr	0
	std	14,128(1)
	std	15,136(1)
	std	16,144(1)
	std	17,152(1)
	std	18,160(1)
	std	19,168(1)
	std	20,176(1)
	std	21,184(1)
	std	22,192(1)
	std	23,200(1)
	std	24,208(1)
	std	25,216(1)
	std	26,224(1)
	std	27,232(1)
	std	28,240(1)
	std	29,248(1)
	std	30,256(1)
	std	31,264(1)
	std	0,288(1)

	bl	PICmeup
	subi	4,4,1
	subi	12,12,8

	std	3,48(1)
	std	4,56(1)
	std	5,64(1)
	std	6,72(1)
	mr	0,6
	std	12,80(1)

	ld	7,0(3)
	ld	8,8(3)
	ld	9,16(3)
	ld	10,24(3)
	ld	11,32(3)
	ld	12,40(3)
	ld	6,48(3)
	ld	14,56(3)
	ld	15,64(3)
	ld	16,72(3)
	ld	17,80(3)
	ld	18,88(3)
	ld	19,96(3)
	ld	20,104(3)
	ld	21,112(3)
	ld	22,120(3)
	ld	23,128(3)
	ld	24,136(3)
	ld	25,144(3)
	ld	26,152(3)
	ld	27,160(3)
	ld	28,168(3)
	ld	29,176(3)
	ld	30,184(3)
	ld	31,192(3)

	mr	3,4
	mr	4,5
	mr	5,0

	b	.Loop_absorb

.align	4
.Loop_absorb:
	cmpld	4,5
	blt	.Labsorbed

	sub	4,4,5
	srwi	5,5,3
	std	4,64(1)
	mtctr	5
	bl	dword_le_load
	xor	7,7,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	8,8,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	9,9,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	10,10,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	11,11,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	12,12,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	6,6,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	14,14,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	15,15,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	16,16,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	17,17,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	18,18,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	19,19,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	20,20,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	21,21,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	22,22,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	23,23,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	24,24,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	25,25,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	26,26,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	27,27,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	28,28,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	29,29,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	30,30,0
	bdz	.Lprocess_block
	bl	dword_le_load
	xor	31,31,0

.Lprocess_block:
	std	3,56(1)

	bl	KeccakF1600_int

	ld	0,80(1)
	ld	5,72(1)
	ld	4,64(1)
	ld	3,56(1)
	addic	0,0,-192
	std	0,80(1)

	b	.Loop_absorb

.align	4
.Labsorbed:
	ld	3,48(1)
	std	7,0(3)
	std	8,8(3)
	std	9,16(3)
	std	10,24(3)
	std	11,32(3)
	std	12,40(3)
	std	6,48(3)
	std	14,56(3)
	std	15,64(3)
	std	16,72(3)
	std	17,80(3)
	std	18,88(3)
	std	19,96(3)
	std	20,104(3)
	std	21,112(3)
	std	22,120(3)
	std	23,128(3)
	std	24,136(3)
	std	25,144(3)
	std	26,152(3)
	std	27,160(3)
	std	28,168(3)
	std	29,176(3)
	std	30,184(3)
	std	31,192(3)

	mr	3,4
	ld	0,288(1)
	ld	14,128(1)
	ld	15,136(1)
	ld	16,144(1)
	ld	17,152(1)
	ld	18,160(1)
	ld	19,168(1)
	ld	20,176(1)
	ld	21,184(1)
	ld	22,192(1)
	ld	23,200(1)
	ld	24,208(1)
	ld	25,216(1)
	ld	26,224(1)
	ld	27,232(1)
	ld	28,240(1)
	ld	29,248(1)
	ld	30,256(1)
	ld	31,264(1)
	mtlr	0
	addi	1,1,272
	blr	
.long	0
.byte	0,12,4,1,0x80,18,4,0
.long	0
.size	SHA3_absorb,.-SHA3_absorb
.globl	SHA3_squeeze
.type	SHA3_squeeze,@function
.type	SHA3_squeeze,@function
.align	5
SHA3_squeeze:
.localentry	SHA3_squeeze,0

	stdu	1,-80(1)
	mflr	0
	std	28,48(1)
	std	29,56(1)
	std	30,64(1)
	std	31,72(1)
	std	0,96(1)

	mr	28,3
	subi	3,3,8
	subi	29,4,1
	mr	30,5
	mr	31,6
	b	.Loop_squeeze

.align	4
.Loop_squeeze:
	ldu	0,8(3)
	cmpldi	30,8
	blt	.Lsqueeze_tail

	stbu	0,1(29)
	srdi	0,0,8
	stbu	0,1(29)
	srdi	0,0,8
	stbu	0,1(29)
	srdi	0,0,8
	stbu	0,1(29)
	srdi	0,0,8
	stbu	0,1(29)
	srdi	0,0,8
	stbu	0,1(29)
	srdi	0,0,8
	stbu	0,1(29)
	srdi	0,0,8
	stbu	0,1(29)

	subic.	30,30,8
	beq	.Lsqueeze_done

	subic.	6,6,8
	bgt	.Loop_squeeze

	mr	3,28
	bl	KeccakF1600
	subi	3,28,8
	mr	6,31
	b	.Loop_squeeze

.align	4
.Lsqueeze_tail:
	mtctr	30
.Loop_tail:
	stbu	0,1(29)
	srdi	0,0,8
	bdnz	.Loop_tail

.Lsqueeze_done:
	ld	0,96(1)
	ld	28,48(1)
	ld	29,56(1)
	ld	30,64(1)
	ld	31,72(1)
	mtlr	0
	addi	1,1,80
	blr	
.long	0
.byte	0,12,4,1,0x80,4,4,0
.long	0
.size	SHA3_squeeze,.-SHA3_squeeze
.align	6
PICmeup:
	mflr	0
	bcl	20,31,$+4
	mflr	12
	addi	12,12,56
	mtlr	0
	blr	
.long	0
.byte	0,12,0x14,0,0,0,0,0
.space	28
.type	iotas,@object
iotas:
.long	0x00000000,0x00000001
.long	0x00000000,0x00008082
.long	0x80000000,0x0000808a
.long	0x80000000,0x80008000
.long	0x00000000,0x0000808b
.long	0x00000000,0x80000001
.long	0x80000000,0x80008081
.long	0x80000000,0x00008009
.long	0x00000000,0x0000008a
.long	0x00000000,0x00000088
.long	0x00000000,0x80008009
.long	0x00000000,0x8000000a
.long	0x00000000,0x8000808b
.long	0x80000000,0x0000008b
.long	0x80000000,0x00008089
.long	0x80000000,0x00008003
.long	0x80000000,0x00008002
.long	0x80000000,0x00000080
.long	0x00000000,0x0000800a
.long	0x80000000,0x8000000a
.long	0x80000000,0x80008081
.long	0x80000000,0x00008080
.long	0x00000000,0x80000001
.long	0x80000000,0x80008008
.size	iotas,.-iotas
.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
.align	2
