shithub: tlsclient

ref: bfe9da47cfa2f51ebef78c59332b5ba2deba306d
dir: /third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc.S/

View raw version
// This file is generated from a similarly-named Perl script in the BoringSSL
// source tree. Do not edit by hand.

#if defined(__has_feature)
#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
#define OPENSSL_NO_ASM
#endif
#endif

#if !defined(OPENSSL_NO_ASM) && defined(__powerpc64__)
.machine	"any"

.abiversion	2
.text

.align	7
.Lrcon:
.byte	0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01
.byte	0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b
.byte	0x0c,0x0f,0x0e,0x0d,0x0c,0x0f,0x0e,0x0d,0x0c,0x0f,0x0e,0x0d,0x0c,0x0f,0x0e,0x0d
.byte	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
.Lconsts:
	mflr	0
	bcl	20,31,$+4
	mflr	6
	addi	6,6,-0x48
	mtlr	0
	blr	
.long	0
.byte	0,12,0x14,0,0,0,0,0
.byte	65,69,83,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,44,32,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

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

.Lset_encrypt_key:
	mflr	11
	std	11,16(1)

	li	6,-1
	cmpldi	3,0
	beq-	.Lenc_key_abort
	cmpldi	5,0
	beq-	.Lenc_key_abort
	li	6,-2
	cmpwi	4,128
	blt-	.Lenc_key_abort
	cmpwi	4,256
	bgt-	.Lenc_key_abort
	andi.	0,4,0x3f
	bne-	.Lenc_key_abort

	lis	0,0xfff0
	li	12,-1
	or	0,0,0

	bl	.Lconsts
	mtlr	11

	neg	9,3
	lvx	1,0,3
	addi	3,3,15
	lvsr	3,0,9
	li	8,0x20
	cmpwi	4,192
	lvx	2,0,3
	vspltisb	5,0x0f
	lvx	4,0,6
	vxor	3,3,5
	lvx	5,8,6
	addi	6,6,0x10
	vperm	1,1,2,3
	li	7,8
	vxor	0,0,0
	mtctr	7

	lvsl	8,0,5
	vspltisb	9,-1
	lvx	10,0,5
	vperm	9,9,0,8

	blt	.Loop128
	addi	3,3,8
	beq	.L192
	addi	3,3,8
	b	.L256

.align	4
.Loop128:
	vperm	3,1,1,5
	vsldoi	6,0,1,12
	vperm	11,1,1,8
	vsel	7,10,11,9
	vor	10,11,11
	.long	0x10632509
	stvx	7,0,5
	addi	5,5,16

	vxor	1,1,6
	vsldoi	6,0,6,12
	vxor	1,1,6
	vsldoi	6,0,6,12
	vxor	1,1,6
	vadduwm	4,4,4
	vxor	1,1,3
	bdnz	.Loop128

	lvx	4,0,6

	vperm	3,1,1,5
	vsldoi	6,0,1,12
	vperm	11,1,1,8
	vsel	7,10,11,9
	vor	10,11,11
	.long	0x10632509
	stvx	7,0,5
	addi	5,5,16

	vxor	1,1,6
	vsldoi	6,0,6,12
	vxor	1,1,6
	vsldoi	6,0,6,12
	vxor	1,1,6
	vadduwm	4,4,4
	vxor	1,1,3

	vperm	3,1,1,5
	vsldoi	6,0,1,12
	vperm	11,1,1,8
	vsel	7,10,11,9
	vor	10,11,11
	.long	0x10632509
	stvx	7,0,5
	addi	5,5,16

	vxor	1,1,6
	vsldoi	6,0,6,12
	vxor	1,1,6
	vsldoi	6,0,6,12
	vxor	1,1,6
	vxor	1,1,3
	vperm	11,1,1,8
	vsel	7,10,11,9
	vor	10,11,11
	stvx	7,0,5

	addi	3,5,15
	addi	5,5,0x50

	li	8,10
	b	.Ldone

.align	4
.L192:
	lvx	6,0,3
	li	7,4
	vperm	11,1,1,8
	vsel	7,10,11,9
	vor	10,11,11
	stvx	7,0,5
	addi	5,5,16
	vperm	2,2,6,3
	vspltisb	3,8
	mtctr	7
	vsububm	5,5,3

.Loop192:
	vperm	3,2,2,5
	vsldoi	6,0,1,12
	.long	0x10632509

	vxor	1,1,6
	vsldoi	6,0,6,12
	vxor	1,1,6
	vsldoi	6,0,6,12
	vxor	1,1,6

	vsldoi	7,0,2,8
	vspltw	6,1,3
	vxor	6,6,2
	vsldoi	2,0,2,12
	vadduwm	4,4,4
	vxor	2,2,6
	vxor	1,1,3
	vxor	2,2,3
	vsldoi	7,7,1,8

	vperm	3,2,2,5
	vsldoi	6,0,1,12
	vperm	11,7,7,8
	vsel	7,10,11,9
	vor	10,11,11
	.long	0x10632509
	stvx	7,0,5
	addi	5,5,16

	vsldoi	7,1,2,8
	vxor	1,1,6
	vsldoi	6,0,6,12
	vperm	11,7,7,8
	vsel	7,10,11,9
	vor	10,11,11
	vxor	1,1,6
	vsldoi	6,0,6,12
	vxor	1,1,6
	stvx	7,0,5
	addi	5,5,16

	vspltw	6,1,3
	vxor	6,6,2
	vsldoi	2,0,2,12
	vadduwm	4,4,4
	vxor	2,2,6
	vxor	1,1,3
	vxor	2,2,3
	vperm	11,1,1,8
	vsel	7,10,11,9
	vor	10,11,11
	stvx	7,0,5
	addi	3,5,15
	addi	5,5,16
	bdnz	.Loop192

	li	8,12
	addi	5,5,0x20
	b	.Ldone

.align	4
.L256:
	lvx	6,0,3
	li	7,7
	li	8,14
	vperm	11,1,1,8
	vsel	7,10,11,9
	vor	10,11,11
	stvx	7,0,5
	addi	5,5,16
	vperm	2,2,6,3
	mtctr	7

.Loop256:
	vperm	3,2,2,5
	vsldoi	6,0,1,12
	vperm	11,2,2,8
	vsel	7,10,11,9
	vor	10,11,11
	.long	0x10632509
	stvx	7,0,5
	addi	5,5,16

	vxor	1,1,6
	vsldoi	6,0,6,12
	vxor	1,1,6
	vsldoi	6,0,6,12
	vxor	1,1,6
	vadduwm	4,4,4
	vxor	1,1,3
	vperm	11,1,1,8
	vsel	7,10,11,9
	vor	10,11,11
	stvx	7,0,5
	addi	3,5,15
	addi	5,5,16
	bdz	.Ldone

	vspltw	3,1,3
	vsldoi	6,0,2,12
	.long	0x106305C8

	vxor	2,2,6
	vsldoi	6,0,6,12
	vxor	2,2,6
	vsldoi	6,0,6,12
	vxor	2,2,6

	vxor	2,2,3
	b	.Loop256

.align	4
.Ldone:
	lvx	2,0,3
	vsel	2,10,2,9
	stvx	2,0,3
	li	6,0
	or	12,12,12
	stw	8,0(5)

.Lenc_key_abort:
	mr	3,6
	blr	
.long	0
.byte	0,12,0x14,1,0,0,3,0
.long	0
.size	aes_hw_set_encrypt_key,.-aes_hw_set_encrypt_key

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

	stdu	1,-64(1)
	mflr	10
	std	10,80(1)
	bl	.Lset_encrypt_key
	mtlr	10

	cmpwi	3,0
	bne-	.Ldec_key_abort

	slwi	7,8,4
	subi	3,5,240
	srwi	8,8,1
	add	5,3,7
	mtctr	8

.Ldeckey:
	lwz	0, 0(3)
	lwz	6, 4(3)
	lwz	7, 8(3)
	lwz	8, 12(3)
	addi	3,3,16
	lwz	9, 0(5)
	lwz	10,4(5)
	lwz	11,8(5)
	lwz	12,12(5)
	stw	0, 0(5)
	stw	6, 4(5)
	stw	7, 8(5)
	stw	8, 12(5)
	subi	5,5,16
	stw	9, -16(3)
	stw	10,-12(3)
	stw	11,-8(3)
	stw	12,-4(3)
	bdnz	.Ldeckey

	xor	3,3,3
.Ldec_key_abort:
	addi	1,1,64
	blr	
.long	0
.byte	0,12,4,1,0x80,0,3,0
.long	0
.size	aes_hw_set_decrypt_key,.-aes_hw_set_decrypt_key
.globl	aes_hw_encrypt
.type	aes_hw_encrypt,@function
.align	5
aes_hw_encrypt:
.localentry	aes_hw_encrypt,0

	lwz	6,240(5)
	lis	0,0xfc00
	li	12,-1
	li	7,15
	or	0,0,0

	lvx	0,0,3
	neg	11,4
	lvx	1,7,3
	lvsl	2,0,3
	vspltisb	4,0x0f
	lvsr	3,0,11
	vxor	2,2,4
	li	7,16
	vperm	0,0,1,2
	lvx	1,0,5
	lvsr	5,0,5
	srwi	6,6,1
	lvx	2,7,5
	addi	7,7,16
	subi	6,6,1
	vperm	1,2,1,5

	vxor	0,0,1
	lvx	1,7,5
	addi	7,7,16
	mtctr	6

.Loop_enc:
	vperm	2,1,2,5
	.long	0x10001508
	lvx	2,7,5
	addi	7,7,16
	vperm	1,2,1,5
	.long	0x10000D08
	lvx	1,7,5
	addi	7,7,16
	bdnz	.Loop_enc

	vperm	2,1,2,5
	.long	0x10001508
	lvx	2,7,5
	vperm	1,2,1,5
	.long	0x10000D09

	vspltisb	2,-1
	vxor	1,1,1
	li	7,15
	vperm	2,2,1,3
	vxor	3,3,4
	lvx	1,0,4
	vperm	0,0,0,3
	vsel	1,1,0,2
	lvx	4,7,4
	stvx	1,0,4
	vsel	0,0,4,2
	stvx	0,7,4

	or	12,12,12
	blr	
.long	0
.byte	0,12,0x14,0,0,0,3,0
.long	0
.size	aes_hw_encrypt,.-aes_hw_encrypt
.globl	aes_hw_decrypt
.type	aes_hw_decrypt,@function
.align	5
aes_hw_decrypt:
.localentry	aes_hw_decrypt,0

	lwz	6,240(5)
	lis	0,0xfc00
	li	12,-1
	li	7,15
	or	0,0,0

	lvx	0,0,3
	neg	11,4
	lvx	1,7,3
	lvsl	2,0,3
	vspltisb	4,0x0f
	lvsr	3,0,11
	vxor	2,2,4
	li	7,16
	vperm	0,0,1,2
	lvx	1,0,5
	lvsr	5,0,5
	srwi	6,6,1
	lvx	2,7,5
	addi	7,7,16
	subi	6,6,1
	vperm	1,2,1,5

	vxor	0,0,1
	lvx	1,7,5
	addi	7,7,16
	mtctr	6

.Loop_dec:
	vperm	2,1,2,5
	.long	0x10001548
	lvx	2,7,5
	addi	7,7,16
	vperm	1,2,1,5
	.long	0x10000D48
	lvx	1,7,5
	addi	7,7,16
	bdnz	.Loop_dec

	vperm	2,1,2,5
	.long	0x10001548
	lvx	2,7,5
	vperm	1,2,1,5
	.long	0x10000D49

	vspltisb	2,-1
	vxor	1,1,1
	li	7,15
	vperm	2,2,1,3
	vxor	3,3,4
	lvx	1,0,4
	vperm	0,0,0,3
	vsel	1,1,0,2
	lvx	4,7,4
	stvx	1,0,4
	vsel	0,0,4,2
	stvx	0,7,4

	or	12,12,12
	blr	
.long	0
.byte	0,12,0x14,0,0,0,3,0
.long	0
.size	aes_hw_decrypt,.-aes_hw_decrypt
.globl	aes_hw_cbc_encrypt
.type	aes_hw_cbc_encrypt,@function
.align	5
aes_hw_cbc_encrypt:
.localentry	aes_hw_cbc_encrypt,0

	cmpldi	5,16
	.long	0x4dc00020

	cmpwi	8,0
	lis	0,0xffe0
	li	12,-1
	or	0,0,0

	li	10,15
	vxor	0,0,0
	vspltisb	3,0x0f

	lvx	4,0,7
	lvsl	6,0,7
	lvx	5,10,7
	vxor	6,6,3
	vperm	4,4,5,6

	neg	11,3
	lvsr	10,0,6
	lwz	9,240(6)

	lvsr	6,0,11
	lvx	5,0,3
	addi	3,3,15
	vxor	6,6,3

	lvsl	8,0,4
	vspltisb	9,-1
	lvx	7,0,4
	vperm	9,9,0,8
	vxor	8,8,3

	srwi	9,9,1
	li	10,16
	subi	9,9,1
	beq	.Lcbc_dec

.Lcbc_enc:
	vor	2,5,5
	lvx	5,0,3
	addi	3,3,16
	mtctr	9
	subi	5,5,16

	lvx	0,0,6
	vperm	2,2,5,6
	lvx	1,10,6
	addi	10,10,16
	vperm	0,1,0,10
	vxor	2,2,0
	lvx	0,10,6
	addi	10,10,16
	vxor	2,2,4

.Loop_cbc_enc:
	vperm	1,0,1,10
	.long	0x10420D08
	lvx	1,10,6
	addi	10,10,16
	vperm	0,1,0,10
	.long	0x10420508
	lvx	0,10,6
	addi	10,10,16
	bdnz	.Loop_cbc_enc

	vperm	1,0,1,10
	.long	0x10420D08
	lvx	1,10,6
	li	10,16
	vperm	0,1,0,10
	.long	0x10820509
	cmpldi	5,16

	vperm	3,4,4,8
	vsel	2,7,3,9
	vor	7,3,3
	stvx	2,0,4
	addi	4,4,16
	bge	.Lcbc_enc

	b	.Lcbc_done

.align	4
.Lcbc_dec:
	cmpldi	5,128
	bge	_aesp8_cbc_decrypt8x
	vor	3,5,5
	lvx	5,0,3
	addi	3,3,16
	mtctr	9
	subi	5,5,16

	lvx	0,0,6
	vperm	3,3,5,6
	lvx	1,10,6
	addi	10,10,16
	vperm	0,1,0,10
	vxor	2,3,0
	lvx	0,10,6
	addi	10,10,16

.Loop_cbc_dec:
	vperm	1,0,1,10
	.long	0x10420D48
	lvx	1,10,6
	addi	10,10,16
	vperm	0,1,0,10
	.long	0x10420548
	lvx	0,10,6
	addi	10,10,16
	bdnz	.Loop_cbc_dec

	vperm	1,0,1,10
	.long	0x10420D48
	lvx	1,10,6
	li	10,16
	vperm	0,1,0,10
	.long	0x10420549
	cmpldi	5,16

	vxor	2,2,4
	vor	4,3,3
	vperm	3,2,2,8
	vsel	2,7,3,9
	vor	7,3,3
	stvx	2,0,4
	addi	4,4,16
	bge	.Lcbc_dec

.Lcbc_done:
	addi	4,4,-1
	lvx	2,0,4
	vsel	2,7,2,9
	stvx	2,0,4

	neg	8,7
	li	10,15
	vxor	0,0,0
	vspltisb	9,-1
	vspltisb	3,0x0f
	lvsr	8,0,8
	vperm	9,9,0,8
	vxor	8,8,3
	lvx	7,0,7
	vperm	4,4,4,8
	vsel	2,7,4,9
	lvx	5,10,7
	stvx	2,0,7
	vsel	2,4,5,9
	stvx	2,10,7

	or	12,12,12
	blr	
.long	0
.byte	0,12,0x14,0,0,0,6,0
.long	0
.align	5
_aesp8_cbc_decrypt8x:
	stdu	1,-448(1)
	li	10,207
	li	11,223
	stvx	20,10,1
	addi	10,10,32
	stvx	21,11,1
	addi	11,11,32
	stvx	22,10,1
	addi	10,10,32
	stvx	23,11,1
	addi	11,11,32
	stvx	24,10,1
	addi	10,10,32
	stvx	25,11,1
	addi	11,11,32
	stvx	26,10,1
	addi	10,10,32
	stvx	27,11,1
	addi	11,11,32
	stvx	28,10,1
	addi	10,10,32
	stvx	29,11,1
	addi	11,11,32
	stvx	30,10,1
	stvx	31,11,1
	li	0,-1
	stw	12,396(1)
	li	8,0x10
	std	26,400(1)
	li	26,0x20
	std	27,408(1)
	li	27,0x30
	std	28,416(1)
	li	28,0x40
	std	29,424(1)
	li	29,0x50
	std	30,432(1)
	li	30,0x60
	std	31,440(1)
	li	31,0x70
	or	0,0,0

	subi	9,9,3
	subi	5,5,128

	lvx	23,0,6
	lvx	30,8,6
	addi	6,6,0x20
	lvx	31,0,6
	vperm	23,30,23,10
	addi	11,1,79
	mtctr	9

.Load_cbc_dec_key:
	vperm	24,31,30,10
	lvx	30,8,6
	addi	6,6,0x20
	stvx	24,0,11
	vperm	25,30,31,10
	lvx	31,0,6
	stvx	25,8,11
	addi	11,11,0x20
	bdnz	.Load_cbc_dec_key

	lvx	26,8,6
	vperm	24,31,30,10
	lvx	27,26,6
	stvx	24,0,11
	vperm	25,26,31,10
	lvx	28,27,6
	stvx	25,8,11
	addi	11,1,79
	vperm	26,27,26,10
	lvx	29,28,6
	vperm	27,28,27,10
	lvx	30,29,6
	vperm	28,29,28,10
	lvx	31,30,6
	vperm	29,30,29,10
	lvx	14,31,6
	vperm	30,31,30,10
	lvx	24,0,11
	vperm	31,14,31,10
	lvx	25,8,11



	subi	3,3,15

	li	10,8
	.long	0x7C001E99
	lvsl	6,0,10
	vspltisb	3,0x0f
	.long	0x7C281E99
	vxor	6,6,3
	.long	0x7C5A1E99
	vperm	0,0,0,6
	.long	0x7C7B1E99
	vperm	1,1,1,6
	.long	0x7D5C1E99
	vperm	2,2,2,6
	vxor	14,0,23
	.long	0x7D7D1E99
	vperm	3,3,3,6
	vxor	15,1,23
	.long	0x7D9E1E99
	vperm	10,10,10,6
	vxor	16,2,23
	.long	0x7DBF1E99
	addi	3,3,0x80
	vperm	11,11,11,6
	vxor	17,3,23
	vperm	12,12,12,6
	vxor	18,10,23
	vperm	13,13,13,6
	vxor	19,11,23
	vxor	20,12,23
	vxor	21,13,23

	mtctr	9
	b	.Loop_cbc_dec8x
.align	5
.Loop_cbc_dec8x:
	.long	0x11CEC548
	.long	0x11EFC548
	.long	0x1210C548
	.long	0x1231C548
	.long	0x1252C548
	.long	0x1273C548
	.long	0x1294C548
	.long	0x12B5C548
	lvx	24,26,11
	addi	11,11,0x20

	.long	0x11CECD48
	.long	0x11EFCD48
	.long	0x1210CD48
	.long	0x1231CD48
	.long	0x1252CD48
	.long	0x1273CD48
	.long	0x1294CD48
	.long	0x12B5CD48
	lvx	25,8,11
	bdnz	.Loop_cbc_dec8x

	subic	5,5,128
	.long	0x11CEC548
	.long	0x11EFC548
	.long	0x1210C548
	.long	0x1231C548
	.long	0x1252C548
	.long	0x1273C548
	.long	0x1294C548
	.long	0x12B5C548

	subfe.	0,0,0
	.long	0x11CECD48
	.long	0x11EFCD48
	.long	0x1210CD48
	.long	0x1231CD48
	.long	0x1252CD48
	.long	0x1273CD48
	.long	0x1294CD48
	.long	0x12B5CD48

	and	0,0,5
	.long	0x11CED548
	.long	0x11EFD548
	.long	0x1210D548
	.long	0x1231D548
	.long	0x1252D548
	.long	0x1273D548
	.long	0x1294D548
	.long	0x12B5D548

	add	3,3,0



	.long	0x11CEDD48
	.long	0x11EFDD48
	.long	0x1210DD48
	.long	0x1231DD48
	.long	0x1252DD48
	.long	0x1273DD48
	.long	0x1294DD48
	.long	0x12B5DD48

	addi	11,1,79
	.long	0x11CEE548
	.long	0x11EFE548
	.long	0x1210E548
	.long	0x1231E548
	.long	0x1252E548
	.long	0x1273E548
	.long	0x1294E548
	.long	0x12B5E548
	lvx	24,0,11

	.long	0x11CEED48
	.long	0x11EFED48
	.long	0x1210ED48
	.long	0x1231ED48
	.long	0x1252ED48
	.long	0x1273ED48
	.long	0x1294ED48
	.long	0x12B5ED48
	lvx	25,8,11

	.long	0x11CEF548
	vxor	4,4,31
	.long	0x11EFF548
	vxor	0,0,31
	.long	0x1210F548
	vxor	1,1,31
	.long	0x1231F548
	vxor	2,2,31
	.long	0x1252F548
	vxor	3,3,31
	.long	0x1273F548
	vxor	10,10,31
	.long	0x1294F548
	vxor	11,11,31
	.long	0x12B5F548
	vxor	12,12,31

	.long	0x11CE2549
	.long	0x11EF0549
	.long	0x7C001E99
	.long	0x12100D49
	.long	0x7C281E99
	.long	0x12311549
	vperm	0,0,0,6
	.long	0x7C5A1E99
	.long	0x12521D49
	vperm	1,1,1,6
	.long	0x7C7B1E99
	.long	0x12735549
	vperm	2,2,2,6
	.long	0x7D5C1E99
	.long	0x12945D49
	vperm	3,3,3,6
	.long	0x7D7D1E99
	.long	0x12B56549
	vperm	10,10,10,6
	.long	0x7D9E1E99
	vor	4,13,13
	vperm	11,11,11,6
	.long	0x7DBF1E99
	addi	3,3,0x80

	vperm	14,14,14,6
	vperm	15,15,15,6
	.long	0x7DC02799
	vperm	12,12,12,6
	vxor	14,0,23
	vperm	16,16,16,6
	.long	0x7DE82799
	vperm	13,13,13,6
	vxor	15,1,23
	vperm	17,17,17,6
	.long	0x7E1A2799
	vxor	16,2,23
	vperm	18,18,18,6
	.long	0x7E3B2799
	vxor	17,3,23
	vperm	19,19,19,6
	.long	0x7E5C2799
	vxor	18,10,23
	vperm	20,20,20,6
	.long	0x7E7D2799
	vxor	19,11,23
	vperm	21,21,21,6
	.long	0x7E9E2799
	vxor	20,12,23
	.long	0x7EBF2799
	addi	4,4,0x80
	vxor	21,13,23

	mtctr	9
	beq	.Loop_cbc_dec8x

	addic.	5,5,128
	beq	.Lcbc_dec8x_done
	nop	
	nop	

.Loop_cbc_dec8x_tail:
	.long	0x11EFC548
	.long	0x1210C548
	.long	0x1231C548
	.long	0x1252C548
	.long	0x1273C548
	.long	0x1294C548
	.long	0x12B5C548
	lvx	24,26,11
	addi	11,11,0x20

	.long	0x11EFCD48
	.long	0x1210CD48
	.long	0x1231CD48
	.long	0x1252CD48
	.long	0x1273CD48
	.long	0x1294CD48
	.long	0x12B5CD48
	lvx	25,8,11
	bdnz	.Loop_cbc_dec8x_tail

	.long	0x11EFC548
	.long	0x1210C548
	.long	0x1231C548
	.long	0x1252C548
	.long	0x1273C548
	.long	0x1294C548
	.long	0x12B5C548

	.long	0x11EFCD48
	.long	0x1210CD48
	.long	0x1231CD48
	.long	0x1252CD48
	.long	0x1273CD48
	.long	0x1294CD48
	.long	0x12B5CD48

	.long	0x11EFD548
	.long	0x1210D548
	.long	0x1231D548
	.long	0x1252D548
	.long	0x1273D548
	.long	0x1294D548
	.long	0x12B5D548

	.long	0x11EFDD48
	.long	0x1210DD48
	.long	0x1231DD48
	.long	0x1252DD48
	.long	0x1273DD48
	.long	0x1294DD48
	.long	0x12B5DD48

	.long	0x11EFE548
	.long	0x1210E548
	.long	0x1231E548
	.long	0x1252E548
	.long	0x1273E548
	.long	0x1294E548
	.long	0x12B5E548

	.long	0x11EFED48
	.long	0x1210ED48
	.long	0x1231ED48
	.long	0x1252ED48
	.long	0x1273ED48
	.long	0x1294ED48
	.long	0x12B5ED48

	.long	0x11EFF548
	vxor	4,4,31
	.long	0x1210F548
	vxor	1,1,31
	.long	0x1231F548
	vxor	2,2,31
	.long	0x1252F548
	vxor	3,3,31
	.long	0x1273F548
	vxor	10,10,31
	.long	0x1294F548
	vxor	11,11,31
	.long	0x12B5F548
	vxor	12,12,31

	cmplwi	5,32
	blt	.Lcbc_dec8x_one
	nop	
	beq	.Lcbc_dec8x_two
	cmplwi	5,64
	blt	.Lcbc_dec8x_three
	nop	
	beq	.Lcbc_dec8x_four
	cmplwi	5,96
	blt	.Lcbc_dec8x_five
	nop	
	beq	.Lcbc_dec8x_six

.Lcbc_dec8x_seven:
	.long	0x11EF2549
	.long	0x12100D49
	.long	0x12311549
	.long	0x12521D49
	.long	0x12735549
	.long	0x12945D49
	.long	0x12B56549
	vor	4,13,13

	vperm	15,15,15,6
	vperm	16,16,16,6
	.long	0x7DE02799
	vperm	17,17,17,6
	.long	0x7E082799
	vperm	18,18,18,6
	.long	0x7E3A2799
	vperm	19,19,19,6
	.long	0x7E5B2799
	vperm	20,20,20,6
	.long	0x7E7C2799
	vperm	21,21,21,6
	.long	0x7E9D2799
	.long	0x7EBE2799
	addi	4,4,0x70
	b	.Lcbc_dec8x_done

.align	5
.Lcbc_dec8x_six:
	.long	0x12102549
	.long	0x12311549
	.long	0x12521D49
	.long	0x12735549
	.long	0x12945D49
	.long	0x12B56549
	vor	4,13,13

	vperm	16,16,16,6
	vperm	17,17,17,6
	.long	0x7E002799
	vperm	18,18,18,6
	.long	0x7E282799
	vperm	19,19,19,6
	.long	0x7E5A2799
	vperm	20,20,20,6
	.long	0x7E7B2799
	vperm	21,21,21,6
	.long	0x7E9C2799
	.long	0x7EBD2799
	addi	4,4,0x60
	b	.Lcbc_dec8x_done

.align	5
.Lcbc_dec8x_five:
	.long	0x12312549
	.long	0x12521D49
	.long	0x12735549
	.long	0x12945D49
	.long	0x12B56549
	vor	4,13,13

	vperm	17,17,17,6
	vperm	18,18,18,6
	.long	0x7E202799
	vperm	19,19,19,6
	.long	0x7E482799
	vperm	20,20,20,6
	.long	0x7E7A2799
	vperm	21,21,21,6
	.long	0x7E9B2799
	.long	0x7EBC2799
	addi	4,4,0x50
	b	.Lcbc_dec8x_done

.align	5
.Lcbc_dec8x_four:
	.long	0x12522549
	.long	0x12735549
	.long	0x12945D49
	.long	0x12B56549
	vor	4,13,13

	vperm	18,18,18,6
	vperm	19,19,19,6
	.long	0x7E402799
	vperm	20,20,20,6
	.long	0x7E682799
	vperm	21,21,21,6
	.long	0x7E9A2799
	.long	0x7EBB2799
	addi	4,4,0x40
	b	.Lcbc_dec8x_done

.align	5
.Lcbc_dec8x_three:
	.long	0x12732549
	.long	0x12945D49
	.long	0x12B56549
	vor	4,13,13

	vperm	19,19,19,6
	vperm	20,20,20,6
	.long	0x7E602799
	vperm	21,21,21,6
	.long	0x7E882799
	.long	0x7EBA2799
	addi	4,4,0x30
	b	.Lcbc_dec8x_done

.align	5
.Lcbc_dec8x_two:
	.long	0x12942549
	.long	0x12B56549
	vor	4,13,13

	vperm	20,20,20,6
	vperm	21,21,21,6
	.long	0x7E802799
	.long	0x7EA82799
	addi	4,4,0x20
	b	.Lcbc_dec8x_done

.align	5
.Lcbc_dec8x_one:
	.long	0x12B52549
	vor	4,13,13

	vperm	21,21,21,6
	.long	0x7EA02799
	addi	4,4,0x10

.Lcbc_dec8x_done:
	vperm	4,4,4,6
	.long	0x7C803F99

	li	10,79
	li	11,95
	stvx	6,10,1
	addi	10,10,32
	stvx	6,11,1
	addi	11,11,32
	stvx	6,10,1
	addi	10,10,32
	stvx	6,11,1
	addi	11,11,32
	stvx	6,10,1
	addi	10,10,32
	stvx	6,11,1
	addi	11,11,32
	stvx	6,10,1
	addi	10,10,32
	stvx	6,11,1
	addi	11,11,32

	or	12,12,12
	lvx	20,10,1
	addi	10,10,32
	lvx	21,11,1
	addi	11,11,32
	lvx	22,10,1
	addi	10,10,32
	lvx	23,11,1
	addi	11,11,32
	lvx	24,10,1
	addi	10,10,32
	lvx	25,11,1
	addi	11,11,32
	lvx	26,10,1
	addi	10,10,32
	lvx	27,11,1
	addi	11,11,32
	lvx	28,10,1
	addi	10,10,32
	lvx	29,11,1
	addi	11,11,32
	lvx	30,10,1
	lvx	31,11,1
	ld	26,400(1)
	ld	27,408(1)
	ld	28,416(1)
	ld	29,424(1)
	ld	30,432(1)
	ld	31,440(1)
	addi	1,1,448
	blr	
.long	0
.byte	0,12,0x04,0,0x80,6,6,0
.long	0
.size	aes_hw_cbc_encrypt,.-aes_hw_cbc_encrypt
.globl	aes_hw_ctr32_encrypt_blocks
.type	aes_hw_ctr32_encrypt_blocks,@function
.align	5
aes_hw_ctr32_encrypt_blocks:
.localentry	aes_hw_ctr32_encrypt_blocks,0

	cmpldi	5,1
	.long	0x4dc00020

	lis	0,0xfff0
	li	12,-1
	or	0,0,0

	li	10,15
	vxor	0,0,0
	vspltisb	3,0x0f

	lvx	4,0,7
	lvsl	6,0,7
	lvx	5,10,7
	vspltisb	11,1
	vxor	6,6,3
	vperm	4,4,5,6
	vsldoi	11,0,11,1

	neg	11,3
	lvsr	10,0,6
	lwz	9,240(6)

	lvsr	6,0,11
	lvx	5,0,3
	addi	3,3,15
	vxor	6,6,3

	srwi	9,9,1
	li	10,16
	subi	9,9,1

	cmpldi	5,8
	bge	_aesp8_ctr32_encrypt8x

	lvsl	8,0,4
	vspltisb	9,-1
	lvx	7,0,4
	vperm	9,9,0,8
	vxor	8,8,3

	lvx	0,0,6
	mtctr	9
	lvx	1,10,6
	addi	10,10,16
	vperm	0,1,0,10
	vxor	2,4,0
	lvx	0,10,6
	addi	10,10,16
	b	.Loop_ctr32_enc

.align	5
.Loop_ctr32_enc:
	vperm	1,0,1,10
	.long	0x10420D08
	lvx	1,10,6
	addi	10,10,16
	vperm	0,1,0,10
	.long	0x10420508
	lvx	0,10,6
	addi	10,10,16
	bdnz	.Loop_ctr32_enc

	vadduwm	4,4,11
	vor	3,5,5
	lvx	5,0,3
	addi	3,3,16
	subic.	5,5,1

	vperm	1,0,1,10
	.long	0x10420D08
	lvx	1,10,6
	vperm	3,3,5,6
	li	10,16
	vperm	1,1,0,10
	lvx	0,0,6
	vxor	3,3,1
	.long	0x10421D09

	lvx	1,10,6
	addi	10,10,16
	vperm	2,2,2,8
	vsel	3,7,2,9
	mtctr	9
	vperm	0,1,0,10
	vor	7,2,2
	vxor	2,4,0
	lvx	0,10,6
	addi	10,10,16
	stvx	3,0,4
	addi	4,4,16
	bne	.Loop_ctr32_enc

	addi	4,4,-1
	lvx	2,0,4
	vsel	2,7,2,9
	stvx	2,0,4

	or	12,12,12
	blr	
.long	0
.byte	0,12,0x14,0,0,0,6,0
.long	0
.align	5
_aesp8_ctr32_encrypt8x:
	stdu	1,-448(1)
	li	10,207
	li	11,223
	stvx	20,10,1
	addi	10,10,32
	stvx	21,11,1
	addi	11,11,32
	stvx	22,10,1
	addi	10,10,32
	stvx	23,11,1
	addi	11,11,32
	stvx	24,10,1
	addi	10,10,32
	stvx	25,11,1
	addi	11,11,32
	stvx	26,10,1
	addi	10,10,32
	stvx	27,11,1
	addi	11,11,32
	stvx	28,10,1
	addi	10,10,32
	stvx	29,11,1
	addi	11,11,32
	stvx	30,10,1
	stvx	31,11,1
	li	0,-1
	stw	12,396(1)
	li	8,0x10
	std	26,400(1)
	li	26,0x20
	std	27,408(1)
	li	27,0x30
	std	28,416(1)
	li	28,0x40
	std	29,424(1)
	li	29,0x50
	std	30,432(1)
	li	30,0x60
	std	31,440(1)
	li	31,0x70
	or	0,0,0

	subi	9,9,3

	lvx	23,0,6
	lvx	30,8,6
	addi	6,6,0x20
	lvx	31,0,6
	vperm	23,30,23,10
	addi	11,1,79
	mtctr	9

.Load_ctr32_enc_key:
	vperm	24,31,30,10
	lvx	30,8,6
	addi	6,6,0x20
	stvx	24,0,11
	vperm	25,30,31,10
	lvx	31,0,6
	stvx	25,8,11
	addi	11,11,0x20
	bdnz	.Load_ctr32_enc_key

	lvx	26,8,6
	vperm	24,31,30,10
	lvx	27,26,6
	stvx	24,0,11
	vperm	25,26,31,10
	lvx	28,27,6
	stvx	25,8,11
	addi	11,1,79
	vperm	26,27,26,10
	lvx	29,28,6
	vperm	27,28,27,10
	lvx	30,29,6
	vperm	28,29,28,10
	lvx	31,30,6
	vperm	29,30,29,10
	lvx	15,31,6
	vperm	30,31,30,10
	lvx	24,0,11
	vperm	31,15,31,10
	lvx	25,8,11

	vadduwm	7,11,11
	subi	3,3,15
	sldi	5,5,4

	vadduwm	16,4,11
	vadduwm	17,4,7
	vxor	15,4,23
	li	10,8
	vadduwm	18,16,7
	vxor	16,16,23
	lvsl	6,0,10
	vadduwm	19,17,7
	vxor	17,17,23
	vspltisb	3,0x0f
	vadduwm	20,18,7
	vxor	18,18,23
	vxor	6,6,3
	vadduwm	21,19,7
	vxor	19,19,23
	vadduwm	22,20,7
	vxor	20,20,23
	vadduwm	4,21,7
	vxor	21,21,23
	vxor	22,22,23

	mtctr	9
	b	.Loop_ctr32_enc8x
.align	5
.Loop_ctr32_enc8x:
	.long	0x11EFC508
	.long	0x1210C508
	.long	0x1231C508
	.long	0x1252C508
	.long	0x1273C508
	.long	0x1294C508
	.long	0x12B5C508
	.long	0x12D6C508
.Loop_ctr32_enc8x_middle:
	lvx	24,26,11
	addi	11,11,0x20

	.long	0x11EFCD08
	.long	0x1210CD08
	.long	0x1231CD08
	.long	0x1252CD08
	.long	0x1273CD08
	.long	0x1294CD08
	.long	0x12B5CD08
	.long	0x12D6CD08
	lvx	25,8,11
	bdnz	.Loop_ctr32_enc8x

	subic	11,5,256
	.long	0x11EFC508
	.long	0x1210C508
	.long	0x1231C508
	.long	0x1252C508
	.long	0x1273C508
	.long	0x1294C508
	.long	0x12B5C508
	.long	0x12D6C508

	subfe	0,0,0
	.long	0x11EFCD08
	.long	0x1210CD08
	.long	0x1231CD08
	.long	0x1252CD08
	.long	0x1273CD08
	.long	0x1294CD08
	.long	0x12B5CD08
	.long	0x12D6CD08

	and	0,0,11
	addi	11,1,79
	.long	0x11EFD508
	.long	0x1210D508
	.long	0x1231D508
	.long	0x1252D508
	.long	0x1273D508
	.long	0x1294D508
	.long	0x12B5D508
	.long	0x12D6D508
	lvx	24,0,11

	subic	5,5,129
	.long	0x11EFDD08
	addi	5,5,1
	.long	0x1210DD08
	.long	0x1231DD08
	.long	0x1252DD08
	.long	0x1273DD08
	.long	0x1294DD08
	.long	0x12B5DD08
	.long	0x12D6DD08
	lvx	25,8,11

	.long	0x11EFE508
	.long	0x7C001E99
	.long	0x1210E508
	.long	0x7C281E99
	.long	0x1231E508
	.long	0x7C5A1E99
	.long	0x1252E508
	.long	0x7C7B1E99
	.long	0x1273E508
	.long	0x7D5C1E99
	.long	0x1294E508
	.long	0x7D9D1E99
	.long	0x12B5E508
	.long	0x7DBE1E99
	.long	0x12D6E508
	.long	0x7DDF1E99
	addi	3,3,0x80

	.long	0x11EFED08
	vperm	0,0,0,6
	.long	0x1210ED08
	vperm	1,1,1,6
	.long	0x1231ED08
	vperm	2,2,2,6
	.long	0x1252ED08
	vperm	3,3,3,6
	.long	0x1273ED08
	vperm	10,10,10,6
	.long	0x1294ED08
	vperm	12,12,12,6
	.long	0x12B5ED08
	vperm	13,13,13,6
	.long	0x12D6ED08
	vperm	14,14,14,6

	add	3,3,0



	subfe.	0,0,0
	.long	0x11EFF508
	vxor	0,0,31
	.long	0x1210F508
	vxor	1,1,31
	.long	0x1231F508
	vxor	2,2,31
	.long	0x1252F508
	vxor	3,3,31
	.long	0x1273F508
	vxor	10,10,31
	.long	0x1294F508
	vxor	12,12,31
	.long	0x12B5F508
	vxor	13,13,31
	.long	0x12D6F508
	vxor	14,14,31

	bne	.Lctr32_enc8x_break

	.long	0x100F0509
	.long	0x10300D09
	vadduwm	16,4,11
	.long	0x10511509
	vadduwm	17,4,7
	vxor	15,4,23
	.long	0x10721D09
	vadduwm	18,16,7
	vxor	16,16,23
	.long	0x11535509
	vadduwm	19,17,7
	vxor	17,17,23
	.long	0x11946509
	vadduwm	20,18,7
	vxor	18,18,23
	.long	0x11B56D09
	vadduwm	21,19,7
	vxor	19,19,23
	.long	0x11D67509
	vadduwm	22,20,7
	vxor	20,20,23
	vperm	0,0,0,6
	vadduwm	4,21,7
	vxor	21,21,23
	vperm	1,1,1,6
	vxor	22,22,23
	mtctr	9

	.long	0x11EFC508
	.long	0x7C002799
	vperm	2,2,2,6
	.long	0x1210C508
	.long	0x7C282799
	vperm	3,3,3,6
	.long	0x1231C508
	.long	0x7C5A2799
	vperm	10,10,10,6
	.long	0x1252C508
	.long	0x7C7B2799
	vperm	12,12,12,6
	.long	0x1273C508
	.long	0x7D5C2799
	vperm	13,13,13,6
	.long	0x1294C508
	.long	0x7D9D2799
	vperm	14,14,14,6
	.long	0x12B5C508
	.long	0x7DBE2799
	.long	0x12D6C508
	.long	0x7DDF2799
	addi	4,4,0x80

	b	.Loop_ctr32_enc8x_middle

.align	5
.Lctr32_enc8x_break:
	cmpwi	5,-0x60
	blt	.Lctr32_enc8x_one
	nop	
	beq	.Lctr32_enc8x_two
	cmpwi	5,-0x40
	blt	.Lctr32_enc8x_three
	nop	
	beq	.Lctr32_enc8x_four
	cmpwi	5,-0x20
	blt	.Lctr32_enc8x_five
	nop	
	beq	.Lctr32_enc8x_six
	cmpwi	5,0x00
	blt	.Lctr32_enc8x_seven

.Lctr32_enc8x_eight:
	.long	0x11EF0509
	.long	0x12100D09
	.long	0x12311509
	.long	0x12521D09
	.long	0x12735509
	.long	0x12946509
	.long	0x12B56D09
	.long	0x12D67509

	vperm	15,15,15,6
	vperm	16,16,16,6
	.long	0x7DE02799
	vperm	17,17,17,6
	.long	0x7E082799
	vperm	18,18,18,6
	.long	0x7E3A2799
	vperm	19,19,19,6
	.long	0x7E5B2799
	vperm	20,20,20,6
	.long	0x7E7C2799
	vperm	21,21,21,6
	.long	0x7E9D2799
	vperm	22,22,22,6
	.long	0x7EBE2799
	.long	0x7EDF2799
	addi	4,4,0x80
	b	.Lctr32_enc8x_done

.align	5
.Lctr32_enc8x_seven:
	.long	0x11EF0D09
	.long	0x12101509
	.long	0x12311D09
	.long	0x12525509
	.long	0x12736509
	.long	0x12946D09
	.long	0x12B57509

	vperm	15,15,15,6
	vperm	16,16,16,6
	.long	0x7DE02799
	vperm	17,17,17,6
	.long	0x7E082799
	vperm	18,18,18,6
	.long	0x7E3A2799
	vperm	19,19,19,6
	.long	0x7E5B2799
	vperm	20,20,20,6
	.long	0x7E7C2799
	vperm	21,21,21,6
	.long	0x7E9D2799
	.long	0x7EBE2799
	addi	4,4,0x70
	b	.Lctr32_enc8x_done

.align	5
.Lctr32_enc8x_six:
	.long	0x11EF1509
	.long	0x12101D09
	.long	0x12315509
	.long	0x12526509
	.long	0x12736D09
	.long	0x12947509

	vperm	15,15,15,6
	vperm	16,16,16,6
	.long	0x7DE02799
	vperm	17,17,17,6
	.long	0x7E082799
	vperm	18,18,18,6
	.long	0x7E3A2799
	vperm	19,19,19,6
	.long	0x7E5B2799
	vperm	20,20,20,6
	.long	0x7E7C2799
	.long	0x7E9D2799
	addi	4,4,0x60
	b	.Lctr32_enc8x_done

.align	5
.Lctr32_enc8x_five:
	.long	0x11EF1D09
	.long	0x12105509
	.long	0x12316509
	.long	0x12526D09
	.long	0x12737509

	vperm	15,15,15,6
	vperm	16,16,16,6
	.long	0x7DE02799
	vperm	17,17,17,6
	.long	0x7E082799
	vperm	18,18,18,6
	.long	0x7E3A2799
	vperm	19,19,19,6
	.long	0x7E5B2799
	.long	0x7E7C2799
	addi	4,4,0x50
	b	.Lctr32_enc8x_done

.align	5
.Lctr32_enc8x_four:
	.long	0x11EF5509
	.long	0x12106509
	.long	0x12316D09
	.long	0x12527509

	vperm	15,15,15,6
	vperm	16,16,16,6
	.long	0x7DE02799
	vperm	17,17,17,6
	.long	0x7E082799
	vperm	18,18,18,6
	.long	0x7E3A2799
	.long	0x7E5B2799
	addi	4,4,0x40
	b	.Lctr32_enc8x_done

.align	5
.Lctr32_enc8x_three:
	.long	0x11EF6509
	.long	0x12106D09
	.long	0x12317509

	vperm	15,15,15,6
	vperm	16,16,16,6
	.long	0x7DE02799
	vperm	17,17,17,6
	.long	0x7E082799
	.long	0x7E3A2799
	addi	4,4,0x30
	b	.Lctr32_enc8x_done

.align	5
.Lctr32_enc8x_two:
	.long	0x11EF6D09
	.long	0x12107509

	vperm	15,15,15,6
	vperm	16,16,16,6
	.long	0x7DE02799
	.long	0x7E082799
	addi	4,4,0x20
	b	.Lctr32_enc8x_done

.align	5
.Lctr32_enc8x_one:
	.long	0x11EF7509

	vperm	15,15,15,6
	.long	0x7DE02799
	addi	4,4,0x10

.Lctr32_enc8x_done:
	li	10,79
	li	11,95
	stvx	6,10,1
	addi	10,10,32
	stvx	6,11,1
	addi	11,11,32
	stvx	6,10,1
	addi	10,10,32
	stvx	6,11,1
	addi	11,11,32
	stvx	6,10,1
	addi	10,10,32
	stvx	6,11,1
	addi	11,11,32
	stvx	6,10,1
	addi	10,10,32
	stvx	6,11,1
	addi	11,11,32

	or	12,12,12
	lvx	20,10,1
	addi	10,10,32
	lvx	21,11,1
	addi	11,11,32
	lvx	22,10,1
	addi	10,10,32
	lvx	23,11,1
	addi	11,11,32
	lvx	24,10,1
	addi	10,10,32
	lvx	25,11,1
	addi	11,11,32
	lvx	26,10,1
	addi	10,10,32
	lvx	27,11,1
	addi	11,11,32
	lvx	28,10,1
	addi	10,10,32
	lvx	29,11,1
	addi	11,11,32
	lvx	30,10,1
	lvx	31,11,1
	ld	26,400(1)
	ld	27,408(1)
	ld	28,416(1)
	ld	29,424(1)
	ld	30,432(1)
	ld	31,440(1)
	addi	1,1,448
	blr	
.long	0
.byte	0,12,0x04,0,0x80,6,6,0
.long	0
.size	aes_hw_ctr32_encrypt_blocks,.-aes_hw_ctr32_encrypt_blocks
.globl	aes_hw_xts_encrypt
.type	aes_hw_xts_encrypt,@function
.align	5
aes_hw_xts_encrypt:
.localentry	aes_hw_xts_encrypt,0

	mr	10,3
	li	3,-1
	cmpldi	5,16
	.long	0x4dc00020

	lis	0,0xfff0
	li	12,-1
	li	11,0
	or	0,0,0

	vspltisb	9,0x07
	lvsl	6,11,11
	vspltisb	11,0x0f
	vxor	6,6,9

	li	3,15
	lvx	8,0,8
	lvsl	5,0,8
	lvx	4,3,8
	vxor	5,5,11
	vperm	8,8,4,5

	neg	11,10
	lvsr	5,0,11
	lvx	2,0,10
	addi	10,10,15
	vxor	5,5,11

	cmpldi	7,0
	beq	.Lxts_enc_no_key2

	lvsr	7,0,7
	lwz	9,240(7)
	srwi	9,9,1
	subi	9,9,1
	li	3,16

	lvx	0,0,7
	lvx	1,3,7
	addi	3,3,16
	vperm	0,1,0,7
	vxor	8,8,0
	lvx	0,3,7
	addi	3,3,16
	mtctr	9

.Ltweak_xts_enc:
	vperm	1,0,1,7
	.long	0x11080D08
	lvx	1,3,7
	addi	3,3,16
	vperm	0,1,0,7
	.long	0x11080508
	lvx	0,3,7
	addi	3,3,16
	bdnz	.Ltweak_xts_enc

	vperm	1,0,1,7
	.long	0x11080D08
	lvx	1,3,7
	vperm	0,1,0,7
	.long	0x11080509

	li	8,0
	b	.Lxts_enc

.Lxts_enc_no_key2:
	li	3,-16
	and	5,5,3


.Lxts_enc:
	lvx	4,0,10
	addi	10,10,16

	lvsr	7,0,6
	lwz	9,240(6)
	srwi	9,9,1
	subi	9,9,1
	li	3,16

	vslb	10,9,9
	vor	10,10,9
	vspltisb	11,1
	vsldoi	10,10,11,15

	cmpldi	5,96
	bge	_aesp8_xts_encrypt6x

	andi.	7,5,15
	subic	0,5,32
	subi	7,7,16
	subfe	0,0,0
	and	0,0,7
	add	10,10,0

	lvx	0,0,6
	lvx	1,3,6
	addi	3,3,16
	vperm	2,2,4,5
	vperm	0,1,0,7
	vxor	2,2,8
	vxor	2,2,0
	lvx	0,3,6
	addi	3,3,16
	mtctr	9
	b	.Loop_xts_enc

.align	5
.Loop_xts_enc:
	vperm	1,0,1,7
	.long	0x10420D08
	lvx	1,3,6
	addi	3,3,16
	vperm	0,1,0,7
	.long	0x10420508
	lvx	0,3,6
	addi	3,3,16
	bdnz	.Loop_xts_enc

	vperm	1,0,1,7
	.long	0x10420D08
	lvx	1,3,6
	li	3,16
	vperm	0,1,0,7
	vxor	0,0,8
	.long	0x10620509

	vperm	11,3,3,6

	.long	0x7D602799

	addi	4,4,16

	subic.	5,5,16
	beq	.Lxts_enc_done

	vor	2,4,4
	lvx	4,0,10
	addi	10,10,16
	lvx	0,0,6
	lvx	1,3,6
	addi	3,3,16

	subic	0,5,32
	subfe	0,0,0
	and	0,0,7
	add	10,10,0

	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vand	11,11,10
	vxor	8,8,11

	vperm	2,2,4,5
	vperm	0,1,0,7
	vxor	2,2,8
	vxor	3,3,0
	vxor	2,2,0
	lvx	0,3,6
	addi	3,3,16

	mtctr	9
	cmpldi	5,16
	bge	.Loop_xts_enc

	vxor	3,3,8
	lvsr	5,0,5
	vxor	4,4,4
	vspltisb	11,-1
	vperm	4,4,11,5
	vsel	2,2,3,4

	subi	11,4,17
	subi	4,4,16
	mtctr	5
	li	5,16
.Loop_xts_enc_steal:
	lbzu	0,1(11)
	stb	0,16(11)
	bdnz	.Loop_xts_enc_steal

	mtctr	9
	b	.Loop_xts_enc

.Lxts_enc_done:
	cmpldi	8,0
	beq	.Lxts_enc_ret

	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vand	11,11,10
	vxor	8,8,11

	vperm	8,8,8,6
	.long	0x7D004799

.Lxts_enc_ret:
	or	12,12,12
	li	3,0
	blr	
.long	0
.byte	0,12,0x04,0,0x80,6,6,0
.long	0
.size	aes_hw_xts_encrypt,.-aes_hw_xts_encrypt

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

	mr	10,3
	li	3,-1
	cmpldi	5,16
	.long	0x4dc00020

	lis	0,0xfff8
	li	12,-1
	li	11,0
	or	0,0,0

	andi.	0,5,15
	neg	0,0
	andi.	0,0,16
	sub	5,5,0

	vspltisb	9,0x07
	lvsl	6,11,11
	vspltisb	11,0x0f
	vxor	6,6,9

	li	3,15
	lvx	8,0,8
	lvsl	5,0,8
	lvx	4,3,8
	vxor	5,5,11
	vperm	8,8,4,5

	neg	11,10
	lvsr	5,0,11
	lvx	2,0,10
	addi	10,10,15
	vxor	5,5,11

	cmpldi	7,0
	beq	.Lxts_dec_no_key2

	lvsr	7,0,7
	lwz	9,240(7)
	srwi	9,9,1
	subi	9,9,1
	li	3,16

	lvx	0,0,7
	lvx	1,3,7
	addi	3,3,16
	vperm	0,1,0,7
	vxor	8,8,0
	lvx	0,3,7
	addi	3,3,16
	mtctr	9

.Ltweak_xts_dec:
	vperm	1,0,1,7
	.long	0x11080D08
	lvx	1,3,7
	addi	3,3,16
	vperm	0,1,0,7
	.long	0x11080508
	lvx	0,3,7
	addi	3,3,16
	bdnz	.Ltweak_xts_dec

	vperm	1,0,1,7
	.long	0x11080D08
	lvx	1,3,7
	vperm	0,1,0,7
	.long	0x11080509

	li	8,0
	b	.Lxts_dec

.Lxts_dec_no_key2:
	neg	3,5
	andi.	3,3,15
	add	5,5,3


.Lxts_dec:
	lvx	4,0,10
	addi	10,10,16

	lvsr	7,0,6
	lwz	9,240(6)
	srwi	9,9,1
	subi	9,9,1
	li	3,16

	vslb	10,9,9
	vor	10,10,9
	vspltisb	11,1
	vsldoi	10,10,11,15

	cmpldi	5,96
	bge	_aesp8_xts_decrypt6x

	lvx	0,0,6
	lvx	1,3,6
	addi	3,3,16
	vperm	2,2,4,5
	vperm	0,1,0,7
	vxor	2,2,8
	vxor	2,2,0
	lvx	0,3,6
	addi	3,3,16
	mtctr	9

	cmpldi	5,16
	blt	.Ltail_xts_dec


.align	5
.Loop_xts_dec:
	vperm	1,0,1,7
	.long	0x10420D48
	lvx	1,3,6
	addi	3,3,16
	vperm	0,1,0,7
	.long	0x10420548
	lvx	0,3,6
	addi	3,3,16
	bdnz	.Loop_xts_dec

	vperm	1,0,1,7
	.long	0x10420D48
	lvx	1,3,6
	li	3,16
	vperm	0,1,0,7
	vxor	0,0,8
	.long	0x10620549

	vperm	11,3,3,6

	.long	0x7D602799

	addi	4,4,16

	subic.	5,5,16
	beq	.Lxts_dec_done

	vor	2,4,4
	lvx	4,0,10
	addi	10,10,16
	lvx	0,0,6
	lvx	1,3,6
	addi	3,3,16

	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vand	11,11,10
	vxor	8,8,11

	vperm	2,2,4,5
	vperm	0,1,0,7
	vxor	2,2,8
	vxor	2,2,0
	lvx	0,3,6
	addi	3,3,16

	mtctr	9
	cmpldi	5,16
	bge	.Loop_xts_dec

.Ltail_xts_dec:
	vsrab	11,8,9
	vaddubm	12,8,8
	vsldoi	11,11,11,15
	vand	11,11,10
	vxor	12,12,11

	subi	10,10,16
	add	10,10,5

	vxor	2,2,8
	vxor	2,2,12

.Loop_xts_dec_short:
	vperm	1,0,1,7
	.long	0x10420D48
	lvx	1,3,6
	addi	3,3,16
	vperm	0,1,0,7
	.long	0x10420548
	lvx	0,3,6
	addi	3,3,16
	bdnz	.Loop_xts_dec_short

	vperm	1,0,1,7
	.long	0x10420D48
	lvx	1,3,6
	li	3,16
	vperm	0,1,0,7
	vxor	0,0,12
	.long	0x10620549

	vperm	11,3,3,6

	.long	0x7D602799


	vor	2,4,4
	lvx	4,0,10

	lvx	0,0,6
	lvx	1,3,6
	addi	3,3,16
	vperm	2,2,4,5
	vperm	0,1,0,7

	lvsr	5,0,5
	vxor	4,4,4
	vspltisb	11,-1
	vperm	4,4,11,5
	vsel	2,2,3,4

	vxor	0,0,8
	vxor	2,2,0
	lvx	0,3,6
	addi	3,3,16

	subi	11,4,1
	mtctr	5
	li	5,16
.Loop_xts_dec_steal:
	lbzu	0,1(11)
	stb	0,16(11)
	bdnz	.Loop_xts_dec_steal

	mtctr	9
	b	.Loop_xts_dec

.Lxts_dec_done:
	cmpldi	8,0
	beq	.Lxts_dec_ret

	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vand	11,11,10
	vxor	8,8,11

	vperm	8,8,8,6
	.long	0x7D004799

.Lxts_dec_ret:
	or	12,12,12
	li	3,0
	blr	
.long	0
.byte	0,12,0x04,0,0x80,6,6,0
.long	0
.size	aes_hw_xts_decrypt,.-aes_hw_xts_decrypt
.align	5
_aesp8_xts_encrypt6x:
	stdu	1,-448(1)
	mflr	11
	li	7,207
	li	3,223
	std	11,464(1)
	stvx	20,7,1
	addi	7,7,32
	stvx	21,3,1
	addi	3,3,32
	stvx	22,7,1
	addi	7,7,32
	stvx	23,3,1
	addi	3,3,32
	stvx	24,7,1
	addi	7,7,32
	stvx	25,3,1
	addi	3,3,32
	stvx	26,7,1
	addi	7,7,32
	stvx	27,3,1
	addi	3,3,32
	stvx	28,7,1
	addi	7,7,32
	stvx	29,3,1
	addi	3,3,32
	stvx	30,7,1
	stvx	31,3,1
	li	0,-1
	stw	12,396(1)
	li	3,0x10
	std	26,400(1)
	li	26,0x20
	std	27,408(1)
	li	27,0x30
	std	28,416(1)
	li	28,0x40
	std	29,424(1)
	li	29,0x50
	std	30,432(1)
	li	30,0x60
	std	31,440(1)
	li	31,0x70
	or	0,0,0

	subi	9,9,3

	lvx	23,0,6
	lvx	30,3,6
	addi	6,6,0x20
	lvx	31,0,6
	vperm	23,30,23,7
	addi	7,1,79
	mtctr	9

.Load_xts_enc_key:
	vperm	24,31,30,7
	lvx	30,3,6
	addi	6,6,0x20
	stvx	24,0,7
	vperm	25,30,31,7
	lvx	31,0,6
	stvx	25,3,7
	addi	7,7,0x20
	bdnz	.Load_xts_enc_key

	lvx	26,3,6
	vperm	24,31,30,7
	lvx	27,26,6
	stvx	24,0,7
	vperm	25,26,31,7
	lvx	28,27,6
	stvx	25,3,7
	addi	7,1,79
	vperm	26,27,26,7
	lvx	29,28,6
	vperm	27,28,27,7
	lvx	30,29,6
	vperm	28,29,28,7
	lvx	31,30,6
	vperm	29,30,29,7
	lvx	22,31,6
	vperm	30,31,30,7
	lvx	24,0,7
	vperm	31,22,31,7
	lvx	25,3,7

	vperm	0,2,4,5
	subi	10,10,31
	vxor	17,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vand	11,11,10
	vxor	7,0,17
	vxor	8,8,11

	.long	0x7C235699
	vxor	18,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vperm	1,1,1,6
	vand	11,11,10
	vxor	12,1,18
	vxor	8,8,11

	.long	0x7C5A5699
	andi.	31,5,15
	vxor	19,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vperm	2,2,2,6
	vand	11,11,10
	vxor	13,2,19
	vxor	8,8,11

	.long	0x7C7B5699
	sub	5,5,31
	vxor	20,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vperm	3,3,3,6
	vand	11,11,10
	vxor	14,3,20
	vxor	8,8,11

	.long	0x7C9C5699
	subi	5,5,0x60
	vxor	21,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vperm	4,4,4,6
	vand	11,11,10
	vxor	15,4,21
	vxor	8,8,11

	.long	0x7CBD5699
	addi	10,10,0x60
	vxor	22,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vperm	5,5,5,6
	vand	11,11,10
	vxor	16,5,22
	vxor	8,8,11

	vxor	31,31,23
	mtctr	9
	b	.Loop_xts_enc6x

.align	5
.Loop_xts_enc6x:
	.long	0x10E7C508
	.long	0x118CC508
	.long	0x11ADC508
	.long	0x11CEC508
	.long	0x11EFC508
	.long	0x1210C508
	lvx	24,26,7
	addi	7,7,0x20

	.long	0x10E7CD08
	.long	0x118CCD08
	.long	0x11ADCD08
	.long	0x11CECD08
	.long	0x11EFCD08
	.long	0x1210CD08
	lvx	25,3,7
	bdnz	.Loop_xts_enc6x

	subic	5,5,96
	vxor	0,17,31
	.long	0x10E7C508
	.long	0x118CC508
	vsrab	11,8,9
	vxor	17,8,23
	vaddubm	8,8,8
	.long	0x11ADC508
	.long	0x11CEC508
	vsldoi	11,11,11,15
	.long	0x11EFC508
	.long	0x1210C508

	subfe.	0,0,0
	vand	11,11,10
	.long	0x10E7CD08
	.long	0x118CCD08
	vxor	8,8,11
	.long	0x11ADCD08
	.long	0x11CECD08
	vxor	1,18,31
	vsrab	11,8,9
	vxor	18,8,23
	.long	0x11EFCD08
	.long	0x1210CD08

	and	0,0,5
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	.long	0x10E7D508
	.long	0x118CD508
	vand	11,11,10
	.long	0x11ADD508
	.long	0x11CED508
	vxor	8,8,11
	.long	0x11EFD508
	.long	0x1210D508

	add	10,10,0



	vxor	2,19,31
	vsrab	11,8,9
	vxor	19,8,23
	vaddubm	8,8,8
	.long	0x10E7DD08
	.long	0x118CDD08
	vsldoi	11,11,11,15
	.long	0x11ADDD08
	.long	0x11CEDD08
	vand	11,11,10
	.long	0x11EFDD08
	.long	0x1210DD08

	addi	7,1,79
	vxor	8,8,11
	.long	0x10E7E508
	.long	0x118CE508
	vxor	3,20,31
	vsrab	11,8,9
	vxor	20,8,23
	.long	0x11ADE508
	.long	0x11CEE508
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	.long	0x11EFE508
	.long	0x1210E508
	lvx	24,0,7
	vand	11,11,10

	.long	0x10E7ED08
	.long	0x118CED08
	vxor	8,8,11
	.long	0x11ADED08
	.long	0x11CEED08
	vxor	4,21,31
	vsrab	11,8,9
	vxor	21,8,23
	.long	0x11EFED08
	.long	0x1210ED08
	lvx	25,3,7
	vaddubm	8,8,8
	vsldoi	11,11,11,15

	.long	0x10E7F508
	.long	0x118CF508
	vand	11,11,10
	.long	0x11ADF508
	.long	0x11CEF508
	vxor	8,8,11
	.long	0x11EFF508
	.long	0x1210F508
	vxor	5,22,31
	vsrab	11,8,9
	vxor	22,8,23

	.long	0x10E70509
	.long	0x7C005699
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	.long	0x118C0D09
	.long	0x7C235699
	.long	0x11AD1509
	vperm	0,0,0,6
	.long	0x7C5A5699
	vand	11,11,10
	.long	0x11CE1D09
	vperm	1,1,1,6
	.long	0x7C7B5699
	.long	0x11EF2509
	vperm	2,2,2,6
	.long	0x7C9C5699
	vxor	8,8,11
	.long	0x11702D09

	vperm	3,3,3,6
	.long	0x7CBD5699
	addi	10,10,0x60
	vperm	4,4,4,6
	vperm	5,5,5,6

	vperm	7,7,7,6
	vperm	12,12,12,6
	.long	0x7CE02799
	vxor	7,0,17
	vperm	13,13,13,6
	.long	0x7D832799
	vxor	12,1,18
	vperm	14,14,14,6
	.long	0x7DBA2799
	vxor	13,2,19
	vperm	15,15,15,6
	.long	0x7DDB2799
	vxor	14,3,20
	vperm	16,11,11,6
	.long	0x7DFC2799
	vxor	15,4,21
	.long	0x7E1D2799

	vxor	16,5,22
	addi	4,4,0x60

	mtctr	9
	beq	.Loop_xts_enc6x

	addic.	5,5,0x60
	beq	.Lxts_enc6x_zero
	cmpwi	5,0x20
	blt	.Lxts_enc6x_one
	nop	
	beq	.Lxts_enc6x_two
	cmpwi	5,0x40
	blt	.Lxts_enc6x_three
	nop	
	beq	.Lxts_enc6x_four

.Lxts_enc6x_five:
	vxor	7,1,17
	vxor	12,2,18
	vxor	13,3,19
	vxor	14,4,20
	vxor	15,5,21

	bl	_aesp8_xts_enc5x

	vperm	7,7,7,6
	vor	17,22,22
	vperm	12,12,12,6
	.long	0x7CE02799
	vperm	13,13,13,6
	.long	0x7D832799
	vperm	14,14,14,6
	.long	0x7DBA2799
	vxor	11,15,22
	vperm	15,15,15,6
	.long	0x7DDB2799
	.long	0x7DFC2799
	addi	4,4,0x50
	bne	.Lxts_enc6x_steal
	b	.Lxts_enc6x_done

.align	4
.Lxts_enc6x_four:
	vxor	7,2,17
	vxor	12,3,18
	vxor	13,4,19
	vxor	14,5,20
	vxor	15,15,15

	bl	_aesp8_xts_enc5x

	vperm	7,7,7,6
	vor	17,21,21
	vperm	12,12,12,6
	.long	0x7CE02799
	vperm	13,13,13,6
	.long	0x7D832799
	vxor	11,14,21
	vperm	14,14,14,6
	.long	0x7DBA2799
	.long	0x7DDB2799
	addi	4,4,0x40
	bne	.Lxts_enc6x_steal
	b	.Lxts_enc6x_done

.align	4
.Lxts_enc6x_three:
	vxor	7,3,17
	vxor	12,4,18
	vxor	13,5,19
	vxor	14,14,14
	vxor	15,15,15

	bl	_aesp8_xts_enc5x

	vperm	7,7,7,6
	vor	17,20,20
	vperm	12,12,12,6
	.long	0x7CE02799
	vxor	11,13,20
	vperm	13,13,13,6
	.long	0x7D832799
	.long	0x7DBA2799
	addi	4,4,0x30
	bne	.Lxts_enc6x_steal
	b	.Lxts_enc6x_done

.align	4
.Lxts_enc6x_two:
	vxor	7,4,17
	vxor	12,5,18
	vxor	13,13,13
	vxor	14,14,14
	vxor	15,15,15

	bl	_aesp8_xts_enc5x

	vperm	7,7,7,6
	vor	17,19,19
	vxor	11,12,19
	vperm	12,12,12,6
	.long	0x7CE02799
	.long	0x7D832799
	addi	4,4,0x20
	bne	.Lxts_enc6x_steal
	b	.Lxts_enc6x_done

.align	4
.Lxts_enc6x_one:
	vxor	7,5,17
	nop	
.Loop_xts_enc1x:
	.long	0x10E7C508
	lvx	24,26,7
	addi	7,7,0x20

	.long	0x10E7CD08
	lvx	25,3,7
	bdnz	.Loop_xts_enc1x

	add	10,10,31
	cmpwi	31,0
	.long	0x10E7C508

	subi	10,10,16
	.long	0x10E7CD08

	lvsr	5,0,31
	.long	0x10E7D508

	.long	0x7C005699
	.long	0x10E7DD08

	addi	7,1,79
	.long	0x10E7E508
	lvx	24,0,7

	.long	0x10E7ED08
	lvx	25,3,7
	vxor	17,17,31

	vperm	0,0,0,6
	.long	0x10E7F508

	vperm	0,0,0,5
	.long	0x10E78D09

	vor	17,18,18
	vxor	11,7,18
	vperm	7,7,7,6
	.long	0x7CE02799
	addi	4,4,0x10
	bne	.Lxts_enc6x_steal
	b	.Lxts_enc6x_done

.align	4
.Lxts_enc6x_zero:
	cmpwi	31,0
	beq	.Lxts_enc6x_done

	add	10,10,31
	subi	10,10,16
	.long	0x7C005699
	lvsr	5,0,31
	vperm	0,0,0,6
	vperm	0,0,0,5
	vxor	11,11,17
.Lxts_enc6x_steal:
	vxor	0,0,17
	vxor	7,7,7
	vspltisb	12,-1
	vperm	7,7,12,5
	vsel	7,0,11,7

	subi	30,4,17
	subi	4,4,16
	mtctr	31
.Loop_xts_enc6x_steal:
	lbzu	0,1(30)
	stb	0,16(30)
	bdnz	.Loop_xts_enc6x_steal

	li	31,0
	mtctr	9
	b	.Loop_xts_enc1x

.align	4
.Lxts_enc6x_done:
	cmpldi	8,0
	beq	.Lxts_enc6x_ret

	vxor	8,17,23
	vperm	8,8,8,6
	.long	0x7D004799

.Lxts_enc6x_ret:
	mtlr	11
	li	10,79
	li	11,95
	stvx	9,10,1
	addi	10,10,32
	stvx	9,11,1
	addi	11,11,32
	stvx	9,10,1
	addi	10,10,32
	stvx	9,11,1
	addi	11,11,32
	stvx	9,10,1
	addi	10,10,32
	stvx	9,11,1
	addi	11,11,32
	stvx	9,10,1
	addi	10,10,32
	stvx	9,11,1
	addi	11,11,32

	or	12,12,12
	lvx	20,10,1
	addi	10,10,32
	lvx	21,11,1
	addi	11,11,32
	lvx	22,10,1
	addi	10,10,32
	lvx	23,11,1
	addi	11,11,32
	lvx	24,10,1
	addi	10,10,32
	lvx	25,11,1
	addi	11,11,32
	lvx	26,10,1
	addi	10,10,32
	lvx	27,11,1
	addi	11,11,32
	lvx	28,10,1
	addi	10,10,32
	lvx	29,11,1
	addi	11,11,32
	lvx	30,10,1
	lvx	31,11,1
	ld	26,400(1)
	ld	27,408(1)
	ld	28,416(1)
	ld	29,424(1)
	ld	30,432(1)
	ld	31,440(1)
	addi	1,1,448
	blr	
.long	0
.byte	0,12,0x04,1,0x80,6,6,0
.long	0

.align	5
_aesp8_xts_enc5x:
	.long	0x10E7C508
	.long	0x118CC508
	.long	0x11ADC508
	.long	0x11CEC508
	.long	0x11EFC508
	lvx	24,26,7
	addi	7,7,0x20

	.long	0x10E7CD08
	.long	0x118CCD08
	.long	0x11ADCD08
	.long	0x11CECD08
	.long	0x11EFCD08
	lvx	25,3,7
	bdnz	_aesp8_xts_enc5x

	add	10,10,31
	cmpwi	31,0
	.long	0x10E7C508
	.long	0x118CC508
	.long	0x11ADC508
	.long	0x11CEC508
	.long	0x11EFC508

	subi	10,10,16
	.long	0x10E7CD08
	.long	0x118CCD08
	.long	0x11ADCD08
	.long	0x11CECD08
	.long	0x11EFCD08
	vxor	17,17,31

	.long	0x10E7D508
	lvsr	5,0,31
	.long	0x118CD508
	.long	0x11ADD508
	.long	0x11CED508
	.long	0x11EFD508
	vxor	1,18,31

	.long	0x10E7DD08
	.long	0x7C005699
	.long	0x118CDD08
	.long	0x11ADDD08
	.long	0x11CEDD08
	.long	0x11EFDD08
	vxor	2,19,31

	addi	7,1,79
	.long	0x10E7E508
	.long	0x118CE508
	.long	0x11ADE508
	.long	0x11CEE508
	.long	0x11EFE508
	lvx	24,0,7
	vxor	3,20,31

	.long	0x10E7ED08
	vperm	0,0,0,6
	.long	0x118CED08
	.long	0x11ADED08
	.long	0x11CEED08
	.long	0x11EFED08
	lvx	25,3,7
	vxor	4,21,31

	.long	0x10E7F508
	vperm	0,0,0,5
	.long	0x118CF508
	.long	0x11ADF508
	.long	0x11CEF508
	.long	0x11EFF508

	.long	0x10E78D09
	.long	0x118C0D09
	.long	0x11AD1509
	.long	0x11CE1D09
	.long	0x11EF2509
	blr	
.long	0
.byte	0,12,0x14,0,0,0,0,0

.align	5
_aesp8_xts_decrypt6x:
	stdu	1,-448(1)
	mflr	11
	li	7,207
	li	3,223
	std	11,464(1)
	stvx	20,7,1
	addi	7,7,32
	stvx	21,3,1
	addi	3,3,32
	stvx	22,7,1
	addi	7,7,32
	stvx	23,3,1
	addi	3,3,32
	stvx	24,7,1
	addi	7,7,32
	stvx	25,3,1
	addi	3,3,32
	stvx	26,7,1
	addi	7,7,32
	stvx	27,3,1
	addi	3,3,32
	stvx	28,7,1
	addi	7,7,32
	stvx	29,3,1
	addi	3,3,32
	stvx	30,7,1
	stvx	31,3,1
	li	0,-1
	stw	12,396(1)
	li	3,0x10
	std	26,400(1)
	li	26,0x20
	std	27,408(1)
	li	27,0x30
	std	28,416(1)
	li	28,0x40
	std	29,424(1)
	li	29,0x50
	std	30,432(1)
	li	30,0x60
	std	31,440(1)
	li	31,0x70
	or	0,0,0

	subi	9,9,3

	lvx	23,0,6
	lvx	30,3,6
	addi	6,6,0x20
	lvx	31,0,6
	vperm	23,30,23,7
	addi	7,1,79
	mtctr	9

.Load_xts_dec_key:
	vperm	24,31,30,7
	lvx	30,3,6
	addi	6,6,0x20
	stvx	24,0,7
	vperm	25,30,31,7
	lvx	31,0,6
	stvx	25,3,7
	addi	7,7,0x20
	bdnz	.Load_xts_dec_key

	lvx	26,3,6
	vperm	24,31,30,7
	lvx	27,26,6
	stvx	24,0,7
	vperm	25,26,31,7
	lvx	28,27,6
	stvx	25,3,7
	addi	7,1,79
	vperm	26,27,26,7
	lvx	29,28,6
	vperm	27,28,27,7
	lvx	30,29,6
	vperm	28,29,28,7
	lvx	31,30,6
	vperm	29,30,29,7
	lvx	22,31,6
	vperm	30,31,30,7
	lvx	24,0,7
	vperm	31,22,31,7
	lvx	25,3,7

	vperm	0,2,4,5
	subi	10,10,31
	vxor	17,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vand	11,11,10
	vxor	7,0,17
	vxor	8,8,11

	.long	0x7C235699
	vxor	18,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vperm	1,1,1,6
	vand	11,11,10
	vxor	12,1,18
	vxor	8,8,11

	.long	0x7C5A5699
	andi.	31,5,15
	vxor	19,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vperm	2,2,2,6
	vand	11,11,10
	vxor	13,2,19
	vxor	8,8,11

	.long	0x7C7B5699
	sub	5,5,31
	vxor	20,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vperm	3,3,3,6
	vand	11,11,10
	vxor	14,3,20
	vxor	8,8,11

	.long	0x7C9C5699
	subi	5,5,0x60
	vxor	21,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vperm	4,4,4,6
	vand	11,11,10
	vxor	15,4,21
	vxor	8,8,11

	.long	0x7CBD5699
	addi	10,10,0x60
	vxor	22,8,23
	vsrab	11,8,9
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	vperm	5,5,5,6
	vand	11,11,10
	vxor	16,5,22
	vxor	8,8,11

	vxor	31,31,23
	mtctr	9
	b	.Loop_xts_dec6x

.align	5
.Loop_xts_dec6x:
	.long	0x10E7C548
	.long	0x118CC548
	.long	0x11ADC548
	.long	0x11CEC548
	.long	0x11EFC548
	.long	0x1210C548
	lvx	24,26,7
	addi	7,7,0x20

	.long	0x10E7CD48
	.long	0x118CCD48
	.long	0x11ADCD48
	.long	0x11CECD48
	.long	0x11EFCD48
	.long	0x1210CD48
	lvx	25,3,7
	bdnz	.Loop_xts_dec6x

	subic	5,5,96
	vxor	0,17,31
	.long	0x10E7C548
	.long	0x118CC548
	vsrab	11,8,9
	vxor	17,8,23
	vaddubm	8,8,8
	.long	0x11ADC548
	.long	0x11CEC548
	vsldoi	11,11,11,15
	.long	0x11EFC548
	.long	0x1210C548

	subfe.	0,0,0
	vand	11,11,10
	.long	0x10E7CD48
	.long	0x118CCD48
	vxor	8,8,11
	.long	0x11ADCD48
	.long	0x11CECD48
	vxor	1,18,31
	vsrab	11,8,9
	vxor	18,8,23
	.long	0x11EFCD48
	.long	0x1210CD48

	and	0,0,5
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	.long	0x10E7D548
	.long	0x118CD548
	vand	11,11,10
	.long	0x11ADD548
	.long	0x11CED548
	vxor	8,8,11
	.long	0x11EFD548
	.long	0x1210D548

	add	10,10,0



	vxor	2,19,31
	vsrab	11,8,9
	vxor	19,8,23
	vaddubm	8,8,8
	.long	0x10E7DD48
	.long	0x118CDD48
	vsldoi	11,11,11,15
	.long	0x11ADDD48
	.long	0x11CEDD48
	vand	11,11,10
	.long	0x11EFDD48
	.long	0x1210DD48

	addi	7,1,79
	vxor	8,8,11
	.long	0x10E7E548
	.long	0x118CE548
	vxor	3,20,31
	vsrab	11,8,9
	vxor	20,8,23
	.long	0x11ADE548
	.long	0x11CEE548
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	.long	0x11EFE548
	.long	0x1210E548
	lvx	24,0,7
	vand	11,11,10

	.long	0x10E7ED48
	.long	0x118CED48
	vxor	8,8,11
	.long	0x11ADED48
	.long	0x11CEED48
	vxor	4,21,31
	vsrab	11,8,9
	vxor	21,8,23
	.long	0x11EFED48
	.long	0x1210ED48
	lvx	25,3,7
	vaddubm	8,8,8
	vsldoi	11,11,11,15

	.long	0x10E7F548
	.long	0x118CF548
	vand	11,11,10
	.long	0x11ADF548
	.long	0x11CEF548
	vxor	8,8,11
	.long	0x11EFF548
	.long	0x1210F548
	vxor	5,22,31
	vsrab	11,8,9
	vxor	22,8,23

	.long	0x10E70549
	.long	0x7C005699
	vaddubm	8,8,8
	vsldoi	11,11,11,15
	.long	0x118C0D49
	.long	0x7C235699
	.long	0x11AD1549
	vperm	0,0,0,6
	.long	0x7C5A5699
	vand	11,11,10
	.long	0x11CE1D49
	vperm	1,1,1,6
	.long	0x7C7B5699
	.long	0x11EF2549
	vperm	2,2,2,6
	.long	0x7C9C5699
	vxor	8,8,11
	.long	0x12102D49
	vperm	3,3,3,6
	.long	0x7CBD5699
	addi	10,10,0x60
	vperm	4,4,4,6
	vperm	5,5,5,6

	vperm	7,7,7,6
	vperm	12,12,12,6
	.long	0x7CE02799
	vxor	7,0,17
	vperm	13,13,13,6
	.long	0x7D832799
	vxor	12,1,18
	vperm	14,14,14,6
	.long	0x7DBA2799
	vxor	13,2,19
	vperm	15,15,15,6
	.long	0x7DDB2799
	vxor	14,3,20
	vperm	16,16,16,6
	.long	0x7DFC2799
	vxor	15,4,21
	.long	0x7E1D2799
	vxor	16,5,22
	addi	4,4,0x60

	mtctr	9
	beq	.Loop_xts_dec6x

	addic.	5,5,0x60
	beq	.Lxts_dec6x_zero
	cmpwi	5,0x20
	blt	.Lxts_dec6x_one
	nop	
	beq	.Lxts_dec6x_two
	cmpwi	5,0x40
	blt	.Lxts_dec6x_three
	nop	
	beq	.Lxts_dec6x_four

.Lxts_dec6x_five:
	vxor	7,1,17
	vxor	12,2,18
	vxor	13,3,19
	vxor	14,4,20
	vxor	15,5,21

	bl	_aesp8_xts_dec5x

	vperm	7,7,7,6
	vor	17,22,22
	vxor	18,8,23
	vperm	12,12,12,6
	.long	0x7CE02799
	vxor	7,0,18
	vperm	13,13,13,6
	.long	0x7D832799
	vperm	14,14,14,6
	.long	0x7DBA2799
	vperm	15,15,15,6
	.long	0x7DDB2799
	.long	0x7DFC2799
	addi	4,4,0x50
	bne	.Lxts_dec6x_steal
	b	.Lxts_dec6x_done

.align	4
.Lxts_dec6x_four:
	vxor	7,2,17
	vxor	12,3,18
	vxor	13,4,19
	vxor	14,5,20
	vxor	15,15,15

	bl	_aesp8_xts_dec5x

	vperm	7,7,7,6
	vor	17,21,21
	vor	18,22,22
	vperm	12,12,12,6
	.long	0x7CE02799
	vxor	7,0,22
	vperm	13,13,13,6
	.long	0x7D832799
	vperm	14,14,14,6
	.long	0x7DBA2799
	.long	0x7DDB2799
	addi	4,4,0x40
	bne	.Lxts_dec6x_steal
	b	.Lxts_dec6x_done

.align	4
.Lxts_dec6x_three:
	vxor	7,3,17
	vxor	12,4,18
	vxor	13,5,19
	vxor	14,14,14
	vxor	15,15,15

	bl	_aesp8_xts_dec5x

	vperm	7,7,7,6
	vor	17,20,20
	vor	18,21,21
	vperm	12,12,12,6
	.long	0x7CE02799
	vxor	7,0,21
	vperm	13,13,13,6
	.long	0x7D832799
	.long	0x7DBA2799
	addi	4,4,0x30
	bne	.Lxts_dec6x_steal
	b	.Lxts_dec6x_done

.align	4
.Lxts_dec6x_two:
	vxor	7,4,17
	vxor	12,5,18
	vxor	13,13,13
	vxor	14,14,14
	vxor	15,15,15

	bl	_aesp8_xts_dec5x

	vperm	7,7,7,6
	vor	17,19,19
	vor	18,20,20
	vperm	12,12,12,6
	.long	0x7CE02799
	vxor	7,0,20
	.long	0x7D832799
	addi	4,4,0x20
	bne	.Lxts_dec6x_steal
	b	.Lxts_dec6x_done

.align	4
.Lxts_dec6x_one:
	vxor	7,5,17
	nop	
.Loop_xts_dec1x:
	.long	0x10E7C548
	lvx	24,26,7
	addi	7,7,0x20

	.long	0x10E7CD48
	lvx	25,3,7
	bdnz	.Loop_xts_dec1x

	subi	0,31,1
	.long	0x10E7C548

	andi.	0,0,16
	cmpwi	31,0
	.long	0x10E7CD48

	sub	10,10,0
	.long	0x10E7D548

	.long	0x7C005699
	.long	0x10E7DD48

	addi	7,1,79
	.long	0x10E7E548
	lvx	24,0,7

	.long	0x10E7ED48
	lvx	25,3,7
	vxor	17,17,31

	vperm	0,0,0,6
	.long	0x10E7F548

	mtctr	9
	.long	0x10E78D49

	vor	17,18,18
	vor	18,19,19
	vperm	7,7,7,6
	.long	0x7CE02799
	addi	4,4,0x10
	vxor	7,0,19
	bne	.Lxts_dec6x_steal
	b	.Lxts_dec6x_done

.align	4
.Lxts_dec6x_zero:
	cmpwi	31,0
	beq	.Lxts_dec6x_done

	.long	0x7C005699
	vperm	0,0,0,6
	vxor	7,0,18
.Lxts_dec6x_steal:
	.long	0x10E7C548
	lvx	24,26,7
	addi	7,7,0x20

	.long	0x10E7CD48
	lvx	25,3,7
	bdnz	.Lxts_dec6x_steal

	add	10,10,31
	.long	0x10E7C548

	cmpwi	31,0
	.long	0x10E7CD48

	.long	0x7C005699
	.long	0x10E7D548

	lvsr	5,0,31
	.long	0x10E7DD48

	addi	7,1,79
	.long	0x10E7E548
	lvx	24,0,7

	.long	0x10E7ED48
	lvx	25,3,7
	vxor	18,18,31

	vperm	0,0,0,6
	.long	0x10E7F548

	vperm	0,0,0,5
	.long	0x11679549

	vperm	7,11,11,6
	.long	0x7CE02799


	vxor	7,7,7
	vspltisb	12,-1
	vperm	7,7,12,5
	vsel	7,0,11,7
	vxor	7,7,17

	subi	30,4,1
	mtctr	31
.Loop_xts_dec6x_steal:
	lbzu	0,1(30)
	stb	0,16(30)
	bdnz	.Loop_xts_dec6x_steal

	li	31,0
	mtctr	9
	b	.Loop_xts_dec1x

.align	4
.Lxts_dec6x_done:
	cmpldi	8,0
	beq	.Lxts_dec6x_ret

	vxor	8,17,23
	vperm	8,8,8,6
	.long	0x7D004799

.Lxts_dec6x_ret:
	mtlr	11
	li	10,79
	li	11,95
	stvx	9,10,1
	addi	10,10,32
	stvx	9,11,1
	addi	11,11,32
	stvx	9,10,1
	addi	10,10,32
	stvx	9,11,1
	addi	11,11,32
	stvx	9,10,1
	addi	10,10,32
	stvx	9,11,1
	addi	11,11,32
	stvx	9,10,1
	addi	10,10,32
	stvx	9,11,1
	addi	11,11,32

	or	12,12,12
	lvx	20,10,1
	addi	10,10,32
	lvx	21,11,1
	addi	11,11,32
	lvx	22,10,1
	addi	10,10,32
	lvx	23,11,1
	addi	11,11,32
	lvx	24,10,1
	addi	10,10,32
	lvx	25,11,1
	addi	11,11,32
	lvx	26,10,1
	addi	10,10,32
	lvx	27,11,1
	addi	11,11,32
	lvx	28,10,1
	addi	10,10,32
	lvx	29,11,1
	addi	11,11,32
	lvx	30,10,1
	lvx	31,11,1
	ld	26,400(1)
	ld	27,408(1)
	ld	28,416(1)
	ld	29,424(1)
	ld	30,432(1)
	ld	31,440(1)
	addi	1,1,448
	blr	
.long	0
.byte	0,12,0x04,1,0x80,6,6,0
.long	0

.align	5
_aesp8_xts_dec5x:
	.long	0x10E7C548
	.long	0x118CC548
	.long	0x11ADC548
	.long	0x11CEC548
	.long	0x11EFC548
	lvx	24,26,7
	addi	7,7,0x20

	.long	0x10E7CD48
	.long	0x118CCD48
	.long	0x11ADCD48
	.long	0x11CECD48
	.long	0x11EFCD48
	lvx	25,3,7
	bdnz	_aesp8_xts_dec5x

	subi	0,31,1
	.long	0x10E7C548
	.long	0x118CC548
	.long	0x11ADC548
	.long	0x11CEC548
	.long	0x11EFC548

	andi.	0,0,16
	cmpwi	31,0
	.long	0x10E7CD48
	.long	0x118CCD48
	.long	0x11ADCD48
	.long	0x11CECD48
	.long	0x11EFCD48
	vxor	17,17,31

	sub	10,10,0
	.long	0x10E7D548
	.long	0x118CD548
	.long	0x11ADD548
	.long	0x11CED548
	.long	0x11EFD548
	vxor	1,18,31

	.long	0x10E7DD48
	.long	0x7C005699
	.long	0x118CDD48
	.long	0x11ADDD48
	.long	0x11CEDD48
	.long	0x11EFDD48
	vxor	2,19,31

	addi	7,1,79
	.long	0x10E7E548
	.long	0x118CE548
	.long	0x11ADE548
	.long	0x11CEE548
	.long	0x11EFE548
	lvx	24,0,7
	vxor	3,20,31

	.long	0x10E7ED48
	vperm	0,0,0,6
	.long	0x118CED48
	.long	0x11ADED48
	.long	0x11CEED48
	.long	0x11EFED48
	lvx	25,3,7
	vxor	4,21,31

	.long	0x10E7F548
	.long	0x118CF548
	.long	0x11ADF548
	.long	0x11CEF548
	.long	0x11EFF548

	.long	0x10E78D49
	.long	0x118C0D49
	.long	0x11AD1549
	.long	0x11CE1D49
	.long	0x11EF2549
	mtctr	9
	blr	
.long	0
.byte	0,12,0x14,0,0,0,0,0
#endif  // !OPENSSL_NO_ASM && __powerpc64__
.section	.note.GNU-stack,"",@progbits