xref: /netbsd-src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/chacha-ppc.S (revision e0ea3921ea68e51b93ffc215f08ae1647c8e1796)
12ac7033aSchristos.machine	"any"
22ac7033aSchristos.text
32ac7033aSchristos
42ac7033aSchristos.globl	ChaCha20_ctr32_int
52ac7033aSchristos.type	ChaCha20_ctr32_int,@function
62ac7033aSchristos.section	".opd","aw"
72ac7033aSchristos.align	3
82ac7033aSchristosChaCha20_ctr32_int:
92ac7033aSchristos.quad	.ChaCha20_ctr32_int,.TOC.@tocbase,0
102ac7033aSchristos.previous
112ac7033aSchristos.align	5
122ac7033aSchristos.ChaCha20_ctr32_int:
132ac7033aSchristos__ChaCha20_ctr32_int:
142ac7033aSchristos	cmpldi	5,0
152ac7033aSchristos	beqlr
162ac7033aSchristos
172ac7033aSchristos	stdu	1,-256(1)
182ac7033aSchristos	mflr	0
192ac7033aSchristos
202ac7033aSchristos	std	14,112(1)
212ac7033aSchristos	std	15,120(1)
222ac7033aSchristos	std	16,128(1)
232ac7033aSchristos	std	17,136(1)
242ac7033aSchristos	std	18,144(1)
252ac7033aSchristos	std	19,152(1)
262ac7033aSchristos	std	20,160(1)
272ac7033aSchristos	std	21,168(1)
282ac7033aSchristos	std	22,176(1)
292ac7033aSchristos	std	23,184(1)
302ac7033aSchristos	std	24,192(1)
312ac7033aSchristos	std	25,200(1)
322ac7033aSchristos	std	26,208(1)
332ac7033aSchristos	std	27,216(1)
342ac7033aSchristos	std	28,224(1)
352ac7033aSchristos	std	29,232(1)
362ac7033aSchristos	std	30,240(1)
372ac7033aSchristos	std	31,248(1)
382ac7033aSchristos	std	0,272(1)
392ac7033aSchristos
402ac7033aSchristos	lwz	11,0(7)
412ac7033aSchristos	lwz	12,4(7)
422ac7033aSchristos	lwz	14,8(7)
432ac7033aSchristos	lwz	15,12(7)
442ac7033aSchristos
452ac7033aSchristos	bl	__ChaCha20_1x
462ac7033aSchristos
472ac7033aSchristos	ld	0,272(1)
482ac7033aSchristos	ld	14,112(1)
492ac7033aSchristos	ld	15,120(1)
502ac7033aSchristos	ld	16,128(1)
512ac7033aSchristos	ld	17,136(1)
522ac7033aSchristos	ld	18,144(1)
532ac7033aSchristos	ld	19,152(1)
542ac7033aSchristos	ld	20,160(1)
552ac7033aSchristos	ld	21,168(1)
562ac7033aSchristos	ld	22,176(1)
572ac7033aSchristos	ld	23,184(1)
582ac7033aSchristos	ld	24,192(1)
592ac7033aSchristos	ld	25,200(1)
602ac7033aSchristos	ld	26,208(1)
612ac7033aSchristos	ld	27,216(1)
622ac7033aSchristos	ld	28,224(1)
632ac7033aSchristos	ld	29,232(1)
642ac7033aSchristos	ld	30,240(1)
652ac7033aSchristos	ld	31,248(1)
662ac7033aSchristos	mtlr	0
672ac7033aSchristos	addi	1,1,256
682ac7033aSchristos	blr
692ac7033aSchristos.long	0
702ac7033aSchristos.byte	0,12,4,1,0x80,18,5,0
712ac7033aSchristos.long	0
722ac7033aSchristos
732ac7033aSchristos
742ac7033aSchristos.align	5
752ac7033aSchristos__ChaCha20_1x:
762ac7033aSchristos.Loop_outer:
772ac7033aSchristos	lis	16,0x6170
782ac7033aSchristos	lis	17,0x3320
792ac7033aSchristos	lis	18,0x7962
802ac7033aSchristos	lis	19,0x6b20
812ac7033aSchristos	ori	16,16,0x7865
822ac7033aSchristos	ori	17,17,0x646e
832ac7033aSchristos	ori	18,18,0x2d32
842ac7033aSchristos	ori	19,19,0x6574
852ac7033aSchristos
862ac7033aSchristos	li	0,10
872ac7033aSchristos	lwz	20,0(6)
882ac7033aSchristos	lwz	21,4(6)
892ac7033aSchristos	lwz	22,8(6)
902ac7033aSchristos	lwz	23,12(6)
912ac7033aSchristos	lwz	24,16(6)
922ac7033aSchristos	mr	28,11
932ac7033aSchristos	lwz	25,20(6)
942ac7033aSchristos	mr	29,12
952ac7033aSchristos	lwz	26,24(6)
962ac7033aSchristos	mr	30,14
972ac7033aSchristos	lwz	27,28(6)
982ac7033aSchristos	mr	31,15
992ac7033aSchristos
1002ac7033aSchristos	mr	7,20
1012ac7033aSchristos	mr	8,21
1022ac7033aSchristos	mr	9,22
1032ac7033aSchristos	mr	10,23
1042ac7033aSchristos
1052ac7033aSchristos	mtctr	0
1062ac7033aSchristos.Loop:
1072ac7033aSchristos	add	16,16,20
1082ac7033aSchristos	add	17,17,21
1092ac7033aSchristos	add	18,18,22
1102ac7033aSchristos	add	19,19,23
1112ac7033aSchristos	xor	28,28,16
1122ac7033aSchristos	xor	29,29,17
1132ac7033aSchristos	xor	30,30,18
1142ac7033aSchristos	xor	31,31,19
1152ac7033aSchristos	rotlwi	28,28,16
1162ac7033aSchristos	rotlwi	29,29,16
1172ac7033aSchristos	rotlwi	30,30,16
1182ac7033aSchristos	rotlwi	31,31,16
1192ac7033aSchristos	add	24,24,28
1202ac7033aSchristos	add	25,25,29
1212ac7033aSchristos	add	26,26,30
1222ac7033aSchristos	add	27,27,31
1232ac7033aSchristos	xor	20,20,24
1242ac7033aSchristos	xor	21,21,25
1252ac7033aSchristos	xor	22,22,26
1262ac7033aSchristos	xor	23,23,27
1272ac7033aSchristos	rotlwi	20,20,12
1282ac7033aSchristos	rotlwi	21,21,12
1292ac7033aSchristos	rotlwi	22,22,12
1302ac7033aSchristos	rotlwi	23,23,12
1312ac7033aSchristos	add	16,16,20
1322ac7033aSchristos	add	17,17,21
1332ac7033aSchristos	add	18,18,22
1342ac7033aSchristos	add	19,19,23
1352ac7033aSchristos	xor	28,28,16
1362ac7033aSchristos	xor	29,29,17
1372ac7033aSchristos	xor	30,30,18
1382ac7033aSchristos	xor	31,31,19
1392ac7033aSchristos	rotlwi	28,28,8
1402ac7033aSchristos	rotlwi	29,29,8
1412ac7033aSchristos	rotlwi	30,30,8
1422ac7033aSchristos	rotlwi	31,31,8
1432ac7033aSchristos	add	24,24,28
1442ac7033aSchristos	add	25,25,29
1452ac7033aSchristos	add	26,26,30
1462ac7033aSchristos	add	27,27,31
1472ac7033aSchristos	xor	20,20,24
1482ac7033aSchristos	xor	21,21,25
1492ac7033aSchristos	xor	22,22,26
1502ac7033aSchristos	xor	23,23,27
1512ac7033aSchristos	rotlwi	20,20,7
1522ac7033aSchristos	rotlwi	21,21,7
1532ac7033aSchristos	rotlwi	22,22,7
1542ac7033aSchristos	rotlwi	23,23,7
1552ac7033aSchristos	add	16,16,21
1562ac7033aSchristos	add	17,17,22
1572ac7033aSchristos	add	18,18,23
1582ac7033aSchristos	add	19,19,20
1592ac7033aSchristos	xor	31,31,16
1602ac7033aSchristos	xor	28,28,17
1612ac7033aSchristos	xor	29,29,18
1622ac7033aSchristos	xor	30,30,19
1632ac7033aSchristos	rotlwi	31,31,16
1642ac7033aSchristos	rotlwi	28,28,16
1652ac7033aSchristos	rotlwi	29,29,16
1662ac7033aSchristos	rotlwi	30,30,16
1672ac7033aSchristos	add	26,26,31
1682ac7033aSchristos	add	27,27,28
1692ac7033aSchristos	add	24,24,29
1702ac7033aSchristos	add	25,25,30
1712ac7033aSchristos	xor	21,21,26
1722ac7033aSchristos	xor	22,22,27
1732ac7033aSchristos	xor	23,23,24
1742ac7033aSchristos	xor	20,20,25
1752ac7033aSchristos	rotlwi	21,21,12
1762ac7033aSchristos	rotlwi	22,22,12
1772ac7033aSchristos	rotlwi	23,23,12
1782ac7033aSchristos	rotlwi	20,20,12
1792ac7033aSchristos	add	16,16,21
1802ac7033aSchristos	add	17,17,22
1812ac7033aSchristos	add	18,18,23
1822ac7033aSchristos	add	19,19,20
1832ac7033aSchristos	xor	31,31,16
1842ac7033aSchristos	xor	28,28,17
1852ac7033aSchristos	xor	29,29,18
1862ac7033aSchristos	xor	30,30,19
1872ac7033aSchristos	rotlwi	31,31,8
1882ac7033aSchristos	rotlwi	28,28,8
1892ac7033aSchristos	rotlwi	29,29,8
1902ac7033aSchristos	rotlwi	30,30,8
1912ac7033aSchristos	add	26,26,31
1922ac7033aSchristos	add	27,27,28
1932ac7033aSchristos	add	24,24,29
1942ac7033aSchristos	add	25,25,30
1952ac7033aSchristos	xor	21,21,26
1962ac7033aSchristos	xor	22,22,27
1972ac7033aSchristos	xor	23,23,24
1982ac7033aSchristos	xor	20,20,25
1992ac7033aSchristos	rotlwi	21,21,7
2002ac7033aSchristos	rotlwi	22,22,7
2012ac7033aSchristos	rotlwi	23,23,7
2022ac7033aSchristos	rotlwi	20,20,7
2032ac7033aSchristos	bc	16,0,.Loop
2042ac7033aSchristos
2052ac7033aSchristos	subic	5,5,64
2062ac7033aSchristos	addi	16,16,0x7865
2072ac7033aSchristos	addi	17,17,0x646e
2082ac7033aSchristos	addi	18,18,0x2d32
2092ac7033aSchristos	addi	19,19,0x6574
2102ac7033aSchristos	addis	16,16,0x6170
2112ac7033aSchristos	addis	17,17,0x3320
2122ac7033aSchristos	addis	18,18,0x7962
2132ac7033aSchristos	addis	19,19,0x6b20
2142ac7033aSchristos
2152ac7033aSchristos	subfe.	0,0,0
2162ac7033aSchristos	add	20,20,7
2172ac7033aSchristos	lwz	7,16(6)
2182ac7033aSchristos	add	21,21,8
2192ac7033aSchristos	lwz	8,20(6)
2202ac7033aSchristos	add	22,22,9
2212ac7033aSchristos	lwz	9,24(6)
2222ac7033aSchristos	add	23,23,10
2232ac7033aSchristos	lwz	10,28(6)
2242ac7033aSchristos	add	24,24,7
2252ac7033aSchristos	add	25,25,8
2262ac7033aSchristos	add	26,26,9
2272ac7033aSchristos	add	27,27,10
2282ac7033aSchristos
2292ac7033aSchristos	add	28,28,11
2302ac7033aSchristos	add	29,29,12
2312ac7033aSchristos	add	30,30,14
2322ac7033aSchristos	add	31,31,15
2332ac7033aSchristos	addi	11,11,1
2342ac7033aSchristos	mr	7,16
2352ac7033aSchristos	rotlwi	16,16,8
2362ac7033aSchristos	rlwimi	16,7,24,0,7
2372ac7033aSchristos	rlwimi	16,7,24,16,23
2382ac7033aSchristos	mr	8,17
2392ac7033aSchristos	rotlwi	17,17,8
2402ac7033aSchristos	rlwimi	17,8,24,0,7
2412ac7033aSchristos	rlwimi	17,8,24,16,23
2422ac7033aSchristos	mr	9,18
2432ac7033aSchristos	rotlwi	18,18,8
2442ac7033aSchristos	rlwimi	18,9,24,0,7
2452ac7033aSchristos	rlwimi	18,9,24,16,23
2462ac7033aSchristos	mr	10,19
2472ac7033aSchristos	rotlwi	19,19,8
2482ac7033aSchristos	rlwimi	19,10,24,0,7
2492ac7033aSchristos	rlwimi	19,10,24,16,23
2502ac7033aSchristos	mr	7,20
2512ac7033aSchristos	rotlwi	20,20,8
2522ac7033aSchristos	rlwimi	20,7,24,0,7
2532ac7033aSchristos	rlwimi	20,7,24,16,23
2542ac7033aSchristos	mr	8,21
2552ac7033aSchristos	rotlwi	21,21,8
2562ac7033aSchristos	rlwimi	21,8,24,0,7
2572ac7033aSchristos	rlwimi	21,8,24,16,23
2582ac7033aSchristos	mr	9,22
2592ac7033aSchristos	rotlwi	22,22,8
2602ac7033aSchristos	rlwimi	22,9,24,0,7
2612ac7033aSchristos	rlwimi	22,9,24,16,23
2622ac7033aSchristos	mr	10,23
2632ac7033aSchristos	rotlwi	23,23,8
2642ac7033aSchristos	rlwimi	23,10,24,0,7
2652ac7033aSchristos	rlwimi	23,10,24,16,23
2662ac7033aSchristos	mr	7,24
2672ac7033aSchristos	rotlwi	24,24,8
2682ac7033aSchristos	rlwimi	24,7,24,0,7
2692ac7033aSchristos	rlwimi	24,7,24,16,23
2702ac7033aSchristos	mr	8,25
2712ac7033aSchristos	rotlwi	25,25,8
2722ac7033aSchristos	rlwimi	25,8,24,0,7
2732ac7033aSchristos	rlwimi	25,8,24,16,23
2742ac7033aSchristos	mr	9,26
2752ac7033aSchristos	rotlwi	26,26,8
2762ac7033aSchristos	rlwimi	26,9,24,0,7
2772ac7033aSchristos	rlwimi	26,9,24,16,23
2782ac7033aSchristos	mr	10,27
2792ac7033aSchristos	rotlwi	27,27,8
2802ac7033aSchristos	rlwimi	27,10,24,0,7
2812ac7033aSchristos	rlwimi	27,10,24,16,23
2822ac7033aSchristos	mr	7,28
2832ac7033aSchristos	rotlwi	28,28,8
2842ac7033aSchristos	rlwimi	28,7,24,0,7
2852ac7033aSchristos	rlwimi	28,7,24,16,23
2862ac7033aSchristos	mr	8,29
2872ac7033aSchristos	rotlwi	29,29,8
2882ac7033aSchristos	rlwimi	29,8,24,0,7
2892ac7033aSchristos	rlwimi	29,8,24,16,23
2902ac7033aSchristos	mr	9,30
2912ac7033aSchristos	rotlwi	30,30,8
2922ac7033aSchristos	rlwimi	30,9,24,0,7
2932ac7033aSchristos	rlwimi	30,9,24,16,23
2942ac7033aSchristos	mr	10,31
2952ac7033aSchristos	rotlwi	31,31,8
2962ac7033aSchristos	rlwimi	31,10,24,0,7
2972ac7033aSchristos	rlwimi	31,10,24,16,23
2982ac7033aSchristos	bne	.Ltail
2992ac7033aSchristos
3002ac7033aSchristos	lwz	7,0(4)
3012ac7033aSchristos	lwz	8,4(4)
3022ac7033aSchristos	cmpldi	5,0
3032ac7033aSchristos	lwz	9,8(4)
3042ac7033aSchristos	lwz	10,12(4)
3052ac7033aSchristos	xor	16,16,7
3062ac7033aSchristos	lwz	7,16(4)
3072ac7033aSchristos	xor	17,17,8
3082ac7033aSchristos	lwz	8,20(4)
3092ac7033aSchristos	xor	18,18,9
3102ac7033aSchristos	lwz	9,24(4)
3112ac7033aSchristos	xor	19,19,10
3122ac7033aSchristos	lwz	10,28(4)
3132ac7033aSchristos	xor	20,20,7
3142ac7033aSchristos	lwz	7,32(4)
3152ac7033aSchristos	xor	21,21,8
3162ac7033aSchristos	lwz	8,36(4)
3172ac7033aSchristos	xor	22,22,9
3182ac7033aSchristos	lwz	9,40(4)
3192ac7033aSchristos	xor	23,23,10
3202ac7033aSchristos	lwz	10,44(4)
3212ac7033aSchristos	xor	24,24,7
3222ac7033aSchristos	lwz	7,48(4)
3232ac7033aSchristos	xor	25,25,8
3242ac7033aSchristos	lwz	8,52(4)
3252ac7033aSchristos	xor	26,26,9
3262ac7033aSchristos	lwz	9,56(4)
3272ac7033aSchristos	xor	27,27,10
3282ac7033aSchristos	lwz	10,60(4)
3292ac7033aSchristos	xor	28,28,7
3302ac7033aSchristos	stw	16,0(3)
3312ac7033aSchristos	xor	29,29,8
3322ac7033aSchristos	stw	17,4(3)
3332ac7033aSchristos	xor	30,30,9
3342ac7033aSchristos	stw	18,8(3)
3352ac7033aSchristos	xor	31,31,10
3362ac7033aSchristos	stw	19,12(3)
3372ac7033aSchristos	stw	20,16(3)
3382ac7033aSchristos	stw	21,20(3)
3392ac7033aSchristos	stw	22,24(3)
3402ac7033aSchristos	stw	23,28(3)
3412ac7033aSchristos	stw	24,32(3)
3422ac7033aSchristos	stw	25,36(3)
3432ac7033aSchristos	stw	26,40(3)
3442ac7033aSchristos	stw	27,44(3)
3452ac7033aSchristos	stw	28,48(3)
3462ac7033aSchristos	stw	29,52(3)
3472ac7033aSchristos	stw	30,56(3)
3482ac7033aSchristos	addi	4,4,64
3492ac7033aSchristos	stw	31,60(3)
3502ac7033aSchristos	addi	3,3,64
3512ac7033aSchristos
3522ac7033aSchristos	bne	.Loop_outer
3532ac7033aSchristos
3542ac7033aSchristos	blr
3552ac7033aSchristos
3562ac7033aSchristos.align	4
3572ac7033aSchristos.Ltail:
3582ac7033aSchristos	addi	5,5,64
3592ac7033aSchristos	subi	4,4,1
3602ac7033aSchristos	subi	3,3,1
3612ac7033aSchristos	addi	7,1,48-1
3622ac7033aSchristos	mtctr	5
3632ac7033aSchristos
3642ac7033aSchristos	stw	16,48(1)
3652ac7033aSchristos	stw	17,52(1)
3662ac7033aSchristos	stw	18,56(1)
3672ac7033aSchristos	stw	19,60(1)
3682ac7033aSchristos	stw	20,64(1)
3692ac7033aSchristos	stw	21,68(1)
3702ac7033aSchristos	stw	22,72(1)
3712ac7033aSchristos	stw	23,76(1)
3722ac7033aSchristos	stw	24,80(1)
3732ac7033aSchristos	stw	25,84(1)
3742ac7033aSchristos	stw	26,88(1)
3752ac7033aSchristos	stw	27,92(1)
3762ac7033aSchristos	stw	28,96(1)
3772ac7033aSchristos	stw	29,100(1)
3782ac7033aSchristos	stw	30,104(1)
3792ac7033aSchristos	stw	31,108(1)
3802ac7033aSchristos
3812ac7033aSchristos.Loop_tail:
3822ac7033aSchristos	lbzu	11,1(4)
3832ac7033aSchristos	lbzu	16,1(7)
3842ac7033aSchristos	xor	12,11,16
3852ac7033aSchristos	stbu	12,1(3)
3862ac7033aSchristos	bc	16,0,.Loop_tail
3872ac7033aSchristos
3882ac7033aSchristos	stw	1,48(1)
3892ac7033aSchristos	stw	1,52(1)
3902ac7033aSchristos	stw	1,56(1)
3912ac7033aSchristos	stw	1,60(1)
3922ac7033aSchristos	stw	1,64(1)
3932ac7033aSchristos	stw	1,68(1)
3942ac7033aSchristos	stw	1,72(1)
3952ac7033aSchristos	stw	1,76(1)
3962ac7033aSchristos	stw	1,80(1)
3972ac7033aSchristos	stw	1,84(1)
3982ac7033aSchristos	stw	1,88(1)
3992ac7033aSchristos	stw	1,92(1)
4002ac7033aSchristos	stw	1,96(1)
4012ac7033aSchristos	stw	1,100(1)
4022ac7033aSchristos	stw	1,104(1)
4032ac7033aSchristos	stw	1,108(1)
4042ac7033aSchristos
4052ac7033aSchristos	blr
4062ac7033aSchristos.long	0
4072ac7033aSchristos.byte	0,12,0x14,0,0,0,0,0
4082ac7033aSchristos
4092ac7033aSchristos.globl	ChaCha20_ctr32_vmx
4102ac7033aSchristos.type	ChaCha20_ctr32_vmx,@function
4112ac7033aSchristos.section	".opd","aw"
4122ac7033aSchristos.align	3
4132ac7033aSchristosChaCha20_ctr32_vmx:
4142ac7033aSchristos.quad	.ChaCha20_ctr32_vmx,.TOC.@tocbase,0
4152ac7033aSchristos.previous
4162ac7033aSchristos.align	5
4172ac7033aSchristos.ChaCha20_ctr32_vmx:
4182ac7033aSchristos	cmpldi	5,256
4192ac7033aSchristos	blt	__ChaCha20_ctr32_int
4202ac7033aSchristos
421*e0ea3921Schristos	stdu	1,-416(1)
4222ac7033aSchristos	mflr	0
4232ac7033aSchristos	li	10,127
4242ac7033aSchristos	li	11,143
4252ac7033aSchristos	mfspr	12,256
426*e0ea3921Schristos	stvx	23,10,1
4272ac7033aSchristos	addi	10,10,32
428*e0ea3921Schristos	stvx	24,11,1
4292ac7033aSchristos	addi	11,11,32
430*e0ea3921Schristos	stvx	25,10,1
4312ac7033aSchristos	addi	10,10,32
432*e0ea3921Schristos	stvx	26,11,1
4332ac7033aSchristos	addi	11,11,32
434*e0ea3921Schristos	stvx	27,10,1
4352ac7033aSchristos	addi	10,10,32
436*e0ea3921Schristos	stvx	28,11,1
4372ac7033aSchristos	addi	11,11,32
438*e0ea3921Schristos	stvx	29,10,1
4392ac7033aSchristos	addi	10,10,32
440*e0ea3921Schristos	stvx	30,11,1
441*e0ea3921Schristos	stvx	31,10,1
442*e0ea3921Schristos	stw	12,268(1)
443*e0ea3921Schristos	std	14,272(1)
444*e0ea3921Schristos	std	15,280(1)
445*e0ea3921Schristos	std	16,288(1)
446*e0ea3921Schristos	std	17,296(1)
447*e0ea3921Schristos	std	18,304(1)
448*e0ea3921Schristos	std	19,312(1)
449*e0ea3921Schristos	std	20,320(1)
450*e0ea3921Schristos	std	21,328(1)
451*e0ea3921Schristos	std	22,336(1)
452*e0ea3921Schristos	std	23,344(1)
453*e0ea3921Schristos	std	24,352(1)
454*e0ea3921Schristos	std	25,360(1)
455*e0ea3921Schristos	std	26,368(1)
456*e0ea3921Schristos	std	27,376(1)
457*e0ea3921Schristos	std	28,384(1)
458*e0ea3921Schristos	std	29,392(1)
459*e0ea3921Schristos	std	30,400(1)
460*e0ea3921Schristos	std	31,408(1)
461*e0ea3921Schristos	li	12,-4096+511
462*e0ea3921Schristos	std	0, 432(1)
4632ac7033aSchristos	mtspr	256,12
4642ac7033aSchristos
4652ac7033aSchristos	bl	.Lconsts
4662ac7033aSchristos	li	16,16
4672ac7033aSchristos	li	17,32
4682ac7033aSchristos	li	18,48
4692ac7033aSchristos	li	19,64
4702ac7033aSchristos	li	20,31
4712ac7033aSchristos	li	21,15
4722ac7033aSchristos
473*e0ea3921Schristos	lvx	13,0,6
474*e0ea3921Schristos	lvsl	29,0,6
475*e0ea3921Schristos	lvx	14,16,6
476*e0ea3921Schristos	lvx	27,20,6
4772ac7033aSchristos
478*e0ea3921Schristos	lvx	15,0,7
479*e0ea3921Schristos	lvsl	30,0,7
480*e0ea3921Schristos	lvx	28,21,7
4812ac7033aSchristos
482*e0ea3921Schristos	lvx	12,0,12
483*e0ea3921Schristos	lvx	17,16,12
484*e0ea3921Schristos	lvx	18,17,12
485*e0ea3921Schristos	lvx	19,18,12
4862ac7033aSchristos	lvx	23,19,12
4872ac7033aSchristos
488*e0ea3921Schristos	vperm	13,13,14,29
489*e0ea3921Schristos	vperm	14,14,27,29
490*e0ea3921Schristos	vperm	15,15,28,30
4912ac7033aSchristos
4922ac7033aSchristos	lwz	11,0(7)
4932ac7033aSchristos	lwz	12,4(7)
494*e0ea3921Schristos	vadduwm	15,15,17
4952ac7033aSchristos	lwz	14,8(7)
496*e0ea3921Schristos	vadduwm	16,15,17
4972ac7033aSchristos	lwz	15,12(7)
498*e0ea3921Schristos	vadduwm	17,16,17
4992ac7033aSchristos
500*e0ea3921Schristos	vxor	29,29,29
501*e0ea3921Schristos	vspltisw	26,-1
502*e0ea3921Schristos	lvsl	24,0,4
503*e0ea3921Schristos	lvsr	25,0,3
504*e0ea3921Schristos	vperm	26,29,26,25
5052ac7033aSchristos
506*e0ea3921Schristos	lvsl	29,0,16
507*e0ea3921Schristos	vspltisb	30,3
508*e0ea3921Schristos	vxor	29,29,30
509*e0ea3921Schristos	vxor	25,25,30
510*e0ea3921Schristos	vperm	24,24,24,29
5112ac7033aSchristos
512*e0ea3921Schristos	li	0,10
5132ac7033aSchristos	b	.Loop_outer_vmx
5142ac7033aSchristos
5152ac7033aSchristos.align	4
5162ac7033aSchristos.Loop_outer_vmx:
5172ac7033aSchristos	lis	16,0x6170
5182ac7033aSchristos	lis	17,0x3320
519*e0ea3921Schristos	vor	0,12,12
5202ac7033aSchristos	lis	18,0x7962
5212ac7033aSchristos	lis	19,0x6b20
522*e0ea3921Schristos	vor	4,12,12
5232ac7033aSchristos	ori	16,16,0x7865
5242ac7033aSchristos	ori	17,17,0x646e
525*e0ea3921Schristos	vor	8,12,12
5262ac7033aSchristos	ori	18,18,0x2d32
5272ac7033aSchristos	ori	19,19,0x6574
528*e0ea3921Schristos	vor	1,13,13
5292ac7033aSchristos
5302ac7033aSchristos	lwz	20,0(6)
531*e0ea3921Schristos	vor	5,13,13
5322ac7033aSchristos	lwz	21,4(6)
533*e0ea3921Schristos	vor	9,13,13
5342ac7033aSchristos	lwz	22,8(6)
535*e0ea3921Schristos	vor	2,14,14
5362ac7033aSchristos	lwz	23,12(6)
537*e0ea3921Schristos	vor	6,14,14
5382ac7033aSchristos	lwz	24,16(6)
539*e0ea3921Schristos	vor	10,14,14
5402ac7033aSchristos	mr	28,11
5412ac7033aSchristos	lwz	25,20(6)
542*e0ea3921Schristos	vor	3,15,15
5432ac7033aSchristos	mr	29,12
5442ac7033aSchristos	lwz	26,24(6)
545*e0ea3921Schristos	vor	7,16,16
5462ac7033aSchristos	mr	30,14
5472ac7033aSchristos	lwz	27,28(6)
548*e0ea3921Schristos	vor	11,17,17
5492ac7033aSchristos	mr	31,15
5502ac7033aSchristos
5512ac7033aSchristos	mr	7,20
5522ac7033aSchristos	mr	8,21
5532ac7033aSchristos	mr	9,22
5542ac7033aSchristos	mr	10,23
555*e0ea3921Schristos
556*e0ea3921Schristos	vspltisw	27,12
557*e0ea3921Schristos	vspltisw	28,7
5582ac7033aSchristos
5592ac7033aSchristos	mtctr	0
5602ac7033aSchristos	nop
5612ac7033aSchristos.Loop_vmx:
5622ac7033aSchristos	vadduwm	0,0,1
5632ac7033aSchristos	vadduwm	4,4,5
5642ac7033aSchristos	vadduwm	8,8,9
565*e0ea3921Schristos	add	16,16,20
566*e0ea3921Schristos	add	17,17,21
5672ac7033aSchristos	add	18,18,22
5682ac7033aSchristos	vxor	3,3,0
5692ac7033aSchristos	vxor	7,7,4
5702ac7033aSchristos	vxor	11,11,8
571*e0ea3921Schristos	add	19,19,23
572*e0ea3921Schristos	xor	28,28,16
5732ac7033aSchristos	xor	29,29,17
574*e0ea3921Schristos	vperm	3,3,3,19
575*e0ea3921Schristos	vperm	7,7,7,19
576*e0ea3921Schristos	vperm	11,11,11,19
5772ac7033aSchristos	xor	30,30,18
5782ac7033aSchristos	xor	31,31,19
5792ac7033aSchristos	rotlwi	28,28,16
5802ac7033aSchristos	vadduwm	2,2,3
581*e0ea3921Schristos	vadduwm	6,6,7
582*e0ea3921Schristos	vadduwm	10,10,11
5832ac7033aSchristos	rotlwi	29,29,16
5842ac7033aSchristos	rotlwi	30,30,16
5852ac7033aSchristos	rotlwi	31,31,16
586*e0ea3921Schristos	vxor	1,1,2
587*e0ea3921Schristos	vxor	5,5,6
588*e0ea3921Schristos	vxor	9,9,10
5892ac7033aSchristos	add	24,24,28
5902ac7033aSchristos	add	25,25,29
5912ac7033aSchristos	add	26,26,30
592*e0ea3921Schristos	vrlw	1,1,27
593*e0ea3921Schristos	vrlw	5,5,27
594*e0ea3921Schristos	vrlw	9,9,27
5952ac7033aSchristos	add	27,27,31
5962ac7033aSchristos	xor	20,20,24
5972ac7033aSchristos	xor	21,21,25
5982ac7033aSchristos	vadduwm	0,0,1
5992ac7033aSchristos	vadduwm	4,4,5
6002ac7033aSchristos	vadduwm	8,8,9
6012ac7033aSchristos	xor	22,22,26
6022ac7033aSchristos	xor	23,23,27
603*e0ea3921Schristos	rotlwi	20,20,12
604*e0ea3921Schristos	vxor	3,3,0
605*e0ea3921Schristos	vxor	7,7,4
606*e0ea3921Schristos	vxor	11,11,8
607*e0ea3921Schristos	rotlwi	21,21,12
608*e0ea3921Schristos	rotlwi	22,22,12
609*e0ea3921Schristos	rotlwi	23,23,12
610*e0ea3921Schristos	vperm	3,3,3,23
611*e0ea3921Schristos	vperm	7,7,7,23
612*e0ea3921Schristos	vperm	11,11,11,23
613*e0ea3921Schristos	add	16,16,20
614*e0ea3921Schristos	add	17,17,21
615*e0ea3921Schristos	add	18,18,22
616*e0ea3921Schristos	vadduwm	2,2,3
617*e0ea3921Schristos	vadduwm	6,6,7
618*e0ea3921Schristos	vadduwm	10,10,11
619*e0ea3921Schristos	add	19,19,23
620*e0ea3921Schristos	xor	28,28,16
621*e0ea3921Schristos	xor	29,29,17
622*e0ea3921Schristos	vxor	1,1,2
623*e0ea3921Schristos	vxor	5,5,6
624*e0ea3921Schristos	vxor	9,9,10
625*e0ea3921Schristos	xor	30,30,18
626*e0ea3921Schristos	xor	31,31,19
627*e0ea3921Schristos	rotlwi	28,28,8
628*e0ea3921Schristos	vrlw	1,1,28
629*e0ea3921Schristos	vrlw	5,5,28
630*e0ea3921Schristos	vrlw	9,9,28
631*e0ea3921Schristos	rotlwi	29,29,8
632*e0ea3921Schristos	rotlwi	30,30,8
633*e0ea3921Schristos	rotlwi	31,31,8
6342ac7033aSchristos	vsldoi	2,2,2, 16-8
6352ac7033aSchristos	vsldoi	6,6,6, 16-8
6362ac7033aSchristos	vsldoi	10,10,10, 16-8
637*e0ea3921Schristos	add	24,24,28
638*e0ea3921Schristos	add	25,25,29
639*e0ea3921Schristos	add	26,26,30
6402ac7033aSchristos	vsldoi	1,1,1, 16-12
6412ac7033aSchristos	vsldoi	5,5,5, 16-12
6422ac7033aSchristos	vsldoi	9,9,9, 16-12
643*e0ea3921Schristos	add	27,27,31
644*e0ea3921Schristos	xor	20,20,24
645*e0ea3921Schristos	xor	21,21,25
6462ac7033aSchristos	vsldoi	3,3,3, 16-4
6472ac7033aSchristos	vsldoi	7,7,7, 16-4
6482ac7033aSchristos	vsldoi	11,11,11, 16-4
649*e0ea3921Schristos	xor	22,22,26
650*e0ea3921Schristos	xor	23,23,27
651*e0ea3921Schristos	rotlwi	20,20,7
652*e0ea3921Schristos	rotlwi	21,21,7
653*e0ea3921Schristos	rotlwi	22,22,7
654*e0ea3921Schristos	rotlwi	23,23,7
6552ac7033aSchristos	vadduwm	0,0,1
6562ac7033aSchristos	vadduwm	4,4,5
6572ac7033aSchristos	vadduwm	8,8,9
658*e0ea3921Schristos	add	16,16,21
659*e0ea3921Schristos	add	17,17,22
6602ac7033aSchristos	add	18,18,23
6612ac7033aSchristos	vxor	3,3,0
6622ac7033aSchristos	vxor	7,7,4
6632ac7033aSchristos	vxor	11,11,8
664*e0ea3921Schristos	add	19,19,20
665*e0ea3921Schristos	xor	31,31,16
6662ac7033aSchristos	xor	28,28,17
667*e0ea3921Schristos	vperm	3,3,3,19
668*e0ea3921Schristos	vperm	7,7,7,19
669*e0ea3921Schristos	vperm	11,11,11,19
6702ac7033aSchristos	xor	29,29,18
6712ac7033aSchristos	xor	30,30,19
6722ac7033aSchristos	rotlwi	31,31,16
6732ac7033aSchristos	vadduwm	2,2,3
674*e0ea3921Schristos	vadduwm	6,6,7
675*e0ea3921Schristos	vadduwm	10,10,11
6762ac7033aSchristos	rotlwi	28,28,16
6772ac7033aSchristos	rotlwi	29,29,16
6782ac7033aSchristos	rotlwi	30,30,16
679*e0ea3921Schristos	vxor	1,1,2
680*e0ea3921Schristos	vxor	5,5,6
681*e0ea3921Schristos	vxor	9,9,10
6822ac7033aSchristos	add	26,26,31
6832ac7033aSchristos	add	27,27,28
6842ac7033aSchristos	add	24,24,29
685*e0ea3921Schristos	vrlw	1,1,27
686*e0ea3921Schristos	vrlw	5,5,27
687*e0ea3921Schristos	vrlw	9,9,27
6882ac7033aSchristos	add	25,25,30
6892ac7033aSchristos	xor	21,21,26
6902ac7033aSchristos	xor	22,22,27
6912ac7033aSchristos	vadduwm	0,0,1
6922ac7033aSchristos	vadduwm	4,4,5
6932ac7033aSchristos	vadduwm	8,8,9
6942ac7033aSchristos	xor	23,23,24
6952ac7033aSchristos	xor	20,20,25
696*e0ea3921Schristos	rotlwi	21,21,12
697*e0ea3921Schristos	vxor	3,3,0
698*e0ea3921Schristos	vxor	7,7,4
699*e0ea3921Schristos	vxor	11,11,8
700*e0ea3921Schristos	rotlwi	22,22,12
701*e0ea3921Schristos	rotlwi	23,23,12
702*e0ea3921Schristos	rotlwi	20,20,12
703*e0ea3921Schristos	vperm	3,3,3,23
704*e0ea3921Schristos	vperm	7,7,7,23
705*e0ea3921Schristos	vperm	11,11,11,23
706*e0ea3921Schristos	add	16,16,21
707*e0ea3921Schristos	add	17,17,22
708*e0ea3921Schristos	add	18,18,23
709*e0ea3921Schristos	vadduwm	2,2,3
710*e0ea3921Schristos	vadduwm	6,6,7
711*e0ea3921Schristos	vadduwm	10,10,11
712*e0ea3921Schristos	add	19,19,20
713*e0ea3921Schristos	xor	31,31,16
714*e0ea3921Schristos	xor	28,28,17
715*e0ea3921Schristos	vxor	1,1,2
716*e0ea3921Schristos	vxor	5,5,6
717*e0ea3921Schristos	vxor	9,9,10
718*e0ea3921Schristos	xor	29,29,18
719*e0ea3921Schristos	xor	30,30,19
720*e0ea3921Schristos	rotlwi	31,31,8
721*e0ea3921Schristos	vrlw	1,1,28
722*e0ea3921Schristos	vrlw	5,5,28
723*e0ea3921Schristos	vrlw	9,9,28
724*e0ea3921Schristos	rotlwi	28,28,8
725*e0ea3921Schristos	rotlwi	29,29,8
726*e0ea3921Schristos	rotlwi	30,30,8
7272ac7033aSchristos	vsldoi	2,2,2, 16-8
7282ac7033aSchristos	vsldoi	6,6,6, 16-8
7292ac7033aSchristos	vsldoi	10,10,10, 16-8
730*e0ea3921Schristos	add	26,26,31
731*e0ea3921Schristos	add	27,27,28
732*e0ea3921Schristos	add	24,24,29
7332ac7033aSchristos	vsldoi	1,1,1, 16-4
7342ac7033aSchristos	vsldoi	5,5,5, 16-4
7352ac7033aSchristos	vsldoi	9,9,9, 16-4
736*e0ea3921Schristos	add	25,25,30
737*e0ea3921Schristos	xor	21,21,26
738*e0ea3921Schristos	xor	22,22,27
7392ac7033aSchristos	vsldoi	3,3,3, 16-12
7402ac7033aSchristos	vsldoi	7,7,7, 16-12
7412ac7033aSchristos	vsldoi	11,11,11, 16-12
742*e0ea3921Schristos	xor	23,23,24
743*e0ea3921Schristos	xor	20,20,25
744*e0ea3921Schristos	rotlwi	21,21,7
745*e0ea3921Schristos	rotlwi	22,22,7
746*e0ea3921Schristos	rotlwi	23,23,7
747*e0ea3921Schristos	rotlwi	20,20,7
7482ac7033aSchristos	bc	16,0,.Loop_vmx
7492ac7033aSchristos
7502ac7033aSchristos	subi	5,5,256
7512ac7033aSchristos	addi	16,16,0x7865
7522ac7033aSchristos	addi	17,17,0x646e
7532ac7033aSchristos	addi	18,18,0x2d32
7542ac7033aSchristos	addi	19,19,0x6574
7552ac7033aSchristos	addis	16,16,0x6170
7562ac7033aSchristos	addis	17,17,0x3320
7572ac7033aSchristos	addis	18,18,0x7962
7582ac7033aSchristos	addis	19,19,0x6b20
7592ac7033aSchristos	add	20,20,7
7602ac7033aSchristos	lwz	7,16(6)
7612ac7033aSchristos	add	21,21,8
7622ac7033aSchristos	lwz	8,20(6)
7632ac7033aSchristos	add	22,22,9
7642ac7033aSchristos	lwz	9,24(6)
7652ac7033aSchristos	add	23,23,10
7662ac7033aSchristos	lwz	10,28(6)
7672ac7033aSchristos	add	24,24,7
7682ac7033aSchristos	add	25,25,8
7692ac7033aSchristos	add	26,26,9
7702ac7033aSchristos	add	27,27,10
7712ac7033aSchristos	add	28,28,11
7722ac7033aSchristos	add	29,29,12
7732ac7033aSchristos	add	30,30,14
7742ac7033aSchristos	add	31,31,15
7752ac7033aSchristos
776*e0ea3921Schristos	vadduwm	0,0,12
777*e0ea3921Schristos	vadduwm	4,4,12
778*e0ea3921Schristos	vadduwm	8,8,12
779*e0ea3921Schristos	vadduwm	1,1,13
780*e0ea3921Schristos	vadduwm	5,5,13
781*e0ea3921Schristos	vadduwm	9,9,13
782*e0ea3921Schristos	vadduwm	2,2,14
783*e0ea3921Schristos	vadduwm	6,6,14
784*e0ea3921Schristos	vadduwm	10,10,14
785*e0ea3921Schristos	vadduwm	3,3,15
786*e0ea3921Schristos	vadduwm	7,7,16
787*e0ea3921Schristos	vadduwm	11,11,17
7882ac7033aSchristos
7892ac7033aSchristos	addi	11,11,4
790*e0ea3921Schristos	vadduwm	15,15,18
791*e0ea3921Schristos	vadduwm	16,16,18
792*e0ea3921Schristos	vadduwm	17,17,18
7932ac7033aSchristos
7942ac7033aSchristos	mr	7,16
7952ac7033aSchristos	rotlwi	16,16,8
7962ac7033aSchristos	rlwimi	16,7,24,0,7
7972ac7033aSchristos	rlwimi	16,7,24,16,23
7982ac7033aSchristos	mr	8,17
7992ac7033aSchristos	rotlwi	17,17,8
8002ac7033aSchristos	rlwimi	17,8,24,0,7
8012ac7033aSchristos	rlwimi	17,8,24,16,23
8022ac7033aSchristos	mr	9,18
8032ac7033aSchristos	rotlwi	18,18,8
8042ac7033aSchristos	rlwimi	18,9,24,0,7
8052ac7033aSchristos	rlwimi	18,9,24,16,23
8062ac7033aSchristos	mr	10,19
8072ac7033aSchristos	rotlwi	19,19,8
8082ac7033aSchristos	rlwimi	19,10,24,0,7
8092ac7033aSchristos	rlwimi	19,10,24,16,23
8102ac7033aSchristos	mr	7,20
8112ac7033aSchristos	rotlwi	20,20,8
8122ac7033aSchristos	rlwimi	20,7,24,0,7
8132ac7033aSchristos	rlwimi	20,7,24,16,23
8142ac7033aSchristos	mr	8,21
8152ac7033aSchristos	rotlwi	21,21,8
8162ac7033aSchristos	rlwimi	21,8,24,0,7
8172ac7033aSchristos	rlwimi	21,8,24,16,23
8182ac7033aSchristos	mr	9,22
8192ac7033aSchristos	rotlwi	22,22,8
8202ac7033aSchristos	rlwimi	22,9,24,0,7
8212ac7033aSchristos	rlwimi	22,9,24,16,23
8222ac7033aSchristos	mr	10,23
8232ac7033aSchristos	rotlwi	23,23,8
8242ac7033aSchristos	rlwimi	23,10,24,0,7
8252ac7033aSchristos	rlwimi	23,10,24,16,23
8262ac7033aSchristos	mr	7,24
8272ac7033aSchristos	rotlwi	24,24,8
8282ac7033aSchristos	rlwimi	24,7,24,0,7
8292ac7033aSchristos	rlwimi	24,7,24,16,23
8302ac7033aSchristos	mr	8,25
8312ac7033aSchristos	rotlwi	25,25,8
8322ac7033aSchristos	rlwimi	25,8,24,0,7
8332ac7033aSchristos	rlwimi	25,8,24,16,23
8342ac7033aSchristos	mr	9,26
8352ac7033aSchristos	rotlwi	26,26,8
8362ac7033aSchristos	rlwimi	26,9,24,0,7
8372ac7033aSchristos	rlwimi	26,9,24,16,23
8382ac7033aSchristos	mr	10,27
8392ac7033aSchristos	rotlwi	27,27,8
8402ac7033aSchristos	rlwimi	27,10,24,0,7
8412ac7033aSchristos	rlwimi	27,10,24,16,23
8422ac7033aSchristos	mr	7,28
8432ac7033aSchristos	rotlwi	28,28,8
8442ac7033aSchristos	rlwimi	28,7,24,0,7
8452ac7033aSchristos	rlwimi	28,7,24,16,23
8462ac7033aSchristos	mr	8,29
8472ac7033aSchristos	rotlwi	29,29,8
8482ac7033aSchristos	rlwimi	29,8,24,0,7
8492ac7033aSchristos	rlwimi	29,8,24,16,23
8502ac7033aSchristos	mr	9,30
8512ac7033aSchristos	rotlwi	30,30,8
8522ac7033aSchristos	rlwimi	30,9,24,0,7
8532ac7033aSchristos	rlwimi	30,9,24,16,23
8542ac7033aSchristos	mr	10,31
8552ac7033aSchristos	rotlwi	31,31,8
8562ac7033aSchristos	rlwimi	31,10,24,0,7
8572ac7033aSchristos	rlwimi	31,10,24,16,23
8582ac7033aSchristos	lwz	7,0(4)
8592ac7033aSchristos	lwz	8,4(4)
8602ac7033aSchristos	lwz	9,8(4)
8612ac7033aSchristos	lwz	10,12(4)
8622ac7033aSchristos	xor	16,16,7
8632ac7033aSchristos	lwz	7,16(4)
8642ac7033aSchristos	xor	17,17,8
8652ac7033aSchristos	lwz	8,20(4)
8662ac7033aSchristos	xor	18,18,9
8672ac7033aSchristos	lwz	9,24(4)
8682ac7033aSchristos	xor	19,19,10
8692ac7033aSchristos	lwz	10,28(4)
8702ac7033aSchristos	xor	20,20,7
8712ac7033aSchristos	lwz	7,32(4)
8722ac7033aSchristos	xor	21,21,8
8732ac7033aSchristos	lwz	8,36(4)
8742ac7033aSchristos	xor	22,22,9
8752ac7033aSchristos	lwz	9,40(4)
8762ac7033aSchristos	xor	23,23,10
8772ac7033aSchristos	lwz	10,44(4)
8782ac7033aSchristos	xor	24,24,7
8792ac7033aSchristos	lwz	7,48(4)
8802ac7033aSchristos	xor	25,25,8
8812ac7033aSchristos	lwz	8,52(4)
8822ac7033aSchristos	xor	26,26,9
8832ac7033aSchristos	lwz	9,56(4)
8842ac7033aSchristos	xor	27,27,10
8852ac7033aSchristos	lwz	10,60(4)
8862ac7033aSchristos	xor	28,28,7
8872ac7033aSchristos	stw	16,0(3)
8882ac7033aSchristos	xor	29,29,8
8892ac7033aSchristos	stw	17,4(3)
8902ac7033aSchristos	xor	30,30,9
8912ac7033aSchristos	stw	18,8(3)
8922ac7033aSchristos	xor	31,31,10
8932ac7033aSchristos	stw	19,12(3)
8942ac7033aSchristos	addi	4,4,64
8952ac7033aSchristos	stw	20,16(3)
8962ac7033aSchristos	li	7,16
8972ac7033aSchristos	stw	21,20(3)
8982ac7033aSchristos	li	8,32
8992ac7033aSchristos	stw	22,24(3)
9002ac7033aSchristos	li	9,48
9012ac7033aSchristos	stw	23,28(3)
9022ac7033aSchristos	li	10,64
9032ac7033aSchristos	stw	24,32(3)
9042ac7033aSchristos	stw	25,36(3)
9052ac7033aSchristos	stw	26,40(3)
9062ac7033aSchristos	stw	27,44(3)
9072ac7033aSchristos	stw	28,48(3)
9082ac7033aSchristos	stw	29,52(3)
9092ac7033aSchristos	stw	30,56(3)
9102ac7033aSchristos	stw	31,60(3)
9112ac7033aSchristos	addi	3,3,64
9122ac7033aSchristos
913*e0ea3921Schristos	lvx	27,0,4
914*e0ea3921Schristos	lvx	28,7,4
915*e0ea3921Schristos	lvx	29,8,4
916*e0ea3921Schristos	lvx	30,9,4
9172ac7033aSchristos	lvx	31,10,4
9182ac7033aSchristos	addi	4,4,64
9192ac7033aSchristos
920*e0ea3921Schristos	vperm	27,27,28,24
921*e0ea3921Schristos	vperm	28,28,29,24
922*e0ea3921Schristos	vperm	29,29,30,24
923*e0ea3921Schristos	vperm	30,30,31,24
924*e0ea3921Schristos	vxor	0,0,27
925*e0ea3921Schristos	vxor	1,1,28
926*e0ea3921Schristos	lvx	28,7,4
927*e0ea3921Schristos	vxor	2,2,29
928*e0ea3921Schristos	lvx	29,8,4
929*e0ea3921Schristos	vxor	3,3,30
930*e0ea3921Schristos	lvx	30,9,4
931*e0ea3921Schristos	lvx	27,10,4
9322ac7033aSchristos	addi	4,4,64
933*e0ea3921Schristos	li	10,63
934*e0ea3921Schristos	vperm	0,0,0,25
935*e0ea3921Schristos	vperm	1,1,1,25
936*e0ea3921Schristos	vperm	2,2,2,25
937*e0ea3921Schristos	vperm	3,3,3,25
9382ac7033aSchristos
939*e0ea3921Schristos	vperm	31,31,28,24
940*e0ea3921Schristos	vperm	28,28,29,24
941*e0ea3921Schristos	vperm	29,29,30,24
942*e0ea3921Schristos	vperm	30,30,27,24
943*e0ea3921Schristos	vxor	4,4,31
944*e0ea3921Schristos	vxor	5,5,28
945*e0ea3921Schristos	lvx	28,7,4
946*e0ea3921Schristos	vxor	6,6,29
947*e0ea3921Schristos	lvx	29,8,4
948*e0ea3921Schristos	vxor	7,7,30
949*e0ea3921Schristos	lvx	30,9,4
950*e0ea3921Schristos	lvx	31,10,4
951*e0ea3921Schristos	addi	4,4,64
952*e0ea3921Schristos	vperm	4,4,4,25
953*e0ea3921Schristos	vperm	5,5,5,25
954*e0ea3921Schristos	vperm	6,6,6,25
955*e0ea3921Schristos	vperm	7,7,7,25
956*e0ea3921Schristos
957*e0ea3921Schristos	vperm	27,27,28,24
958*e0ea3921Schristos	vperm	28,28,29,24
959*e0ea3921Schristos	vperm	29,29,30,24
960*e0ea3921Schristos	vperm	30,30,31,24
961*e0ea3921Schristos	vxor	8,8,27
962*e0ea3921Schristos	vxor	9,9,28
963*e0ea3921Schristos	vxor	10,10,29
964*e0ea3921Schristos	vxor	11,11,30
965*e0ea3921Schristos	vperm	8,8,8,25
966*e0ea3921Schristos	vperm	9,9,9,25
967*e0ea3921Schristos	vperm	10,10,10,25
968*e0ea3921Schristos	vperm	11,11,11,25
9692ac7033aSchristos
9702ac7033aSchristos	andi.	17,3,15
9712ac7033aSchristos	mr	16,3
9722ac7033aSchristos
973*e0ea3921Schristos	vsel	27,0,1,26
974*e0ea3921Schristos	vsel	28,1,2,26
975*e0ea3921Schristos	vsel	29,2,3,26
976*e0ea3921Schristos	vsel	30,3,4,26
977*e0ea3921Schristos	vsel	1,4,5,26
978*e0ea3921Schristos	vsel	2,5,6,26
979*e0ea3921Schristos	vsel	3,6,7,26
980*e0ea3921Schristos	vsel	4,7,8,26
981*e0ea3921Schristos	vsel	5,8,9,26
982*e0ea3921Schristos	vsel	6,9,10,26
983*e0ea3921Schristos	vsel	7,10,11,26
9842ac7033aSchristos
9852ac7033aSchristos
986*e0ea3921Schristos	stvx	27,7,3
987*e0ea3921Schristos	stvx	28,8,3
988*e0ea3921Schristos	stvx	29,9,3
9892ac7033aSchristos	addi	3,3,64
990*e0ea3921Schristos	stvx	30,0,3
9912ac7033aSchristos	stvx	1,7,3
9922ac7033aSchristos	stvx	2,8,3
9932ac7033aSchristos	stvx	3,9,3
9942ac7033aSchristos	addi	3,3,64
9952ac7033aSchristos	stvx	4,0,3
9962ac7033aSchristos	stvx	5,7,3
9972ac7033aSchristos	stvx	6,8,3
9982ac7033aSchristos	stvx	7,9,3
9992ac7033aSchristos	addi	3,3,64
10002ac7033aSchristos
10012ac7033aSchristos	beq	.Laligned_vmx
10022ac7033aSchristos
10032ac7033aSchristos	sub	18,3,17
10042ac7033aSchristos	li	19,0
10052ac7033aSchristos.Lunaligned_tail_vmx:
10062ac7033aSchristos	stvebx	11,19,18
10072ac7033aSchristos	addi	19,19,1
10082ac7033aSchristos	cmpw	19,17
10092ac7033aSchristos	bne	.Lunaligned_tail_vmx
10102ac7033aSchristos
10112ac7033aSchristos	sub	18,16,17
10122ac7033aSchristos.Lunaligned_head_vmx:
10132ac7033aSchristos	stvebx	0,17,18
10142ac7033aSchristos	cmpwi	17,15
10152ac7033aSchristos	addi	17,17,1
10162ac7033aSchristos	bne	.Lunaligned_head_vmx
10172ac7033aSchristos
10182ac7033aSchristos	cmpldi	5,255
10192ac7033aSchristos	bgt	.Loop_outer_vmx
10202ac7033aSchristos
10212ac7033aSchristos	b	.Ldone_vmx
10222ac7033aSchristos
10232ac7033aSchristos.align	4
10242ac7033aSchristos.Laligned_vmx:
10252ac7033aSchristos	stvx	0,0,16
10262ac7033aSchristos
10272ac7033aSchristos	cmpldi	5,255
10282ac7033aSchristos	bgt	.Loop_outer_vmx
10292ac7033aSchristos	nop
10302ac7033aSchristos
10312ac7033aSchristos.Ldone_vmx:
10322ac7033aSchristos	cmpldi	5,0
10332ac7033aSchristos	bnel	__ChaCha20_1x
10342ac7033aSchristos
1035*e0ea3921Schristos	lwz	12,268(1)
10362ac7033aSchristos	li	10,127
10372ac7033aSchristos	li	11,143
10382ac7033aSchristos	mtspr	256,12
1039*e0ea3921Schristos	lvx	23,10,1
10402ac7033aSchristos	addi	10,10,32
1041*e0ea3921Schristos	lvx	24,11,1
10422ac7033aSchristos	addi	11,11,32
1043*e0ea3921Schristos	lvx	25,10,1
10442ac7033aSchristos	addi	10,10,32
1045*e0ea3921Schristos	lvx	26,11,1
10462ac7033aSchristos	addi	11,11,32
1047*e0ea3921Schristos	lvx	27,10,1
10482ac7033aSchristos	addi	10,10,32
1049*e0ea3921Schristos	lvx	28,11,1
10502ac7033aSchristos	addi	11,11,32
1051*e0ea3921Schristos	lvx	29,10,1
1052*e0ea3921Schristos	addi	10,10,32
1053*e0ea3921Schristos	lvx	30,11,1
1054*e0ea3921Schristos	lvx	31,10,1
1055*e0ea3921Schristos	ld	0, 432(1)
1056*e0ea3921Schristos	ld	14,272(1)
1057*e0ea3921Schristos	ld	15,280(1)
1058*e0ea3921Schristos	ld	16,288(1)
1059*e0ea3921Schristos	ld	17,296(1)
1060*e0ea3921Schristos	ld	18,304(1)
1061*e0ea3921Schristos	ld	19,312(1)
1062*e0ea3921Schristos	ld	20,320(1)
1063*e0ea3921Schristos	ld	21,328(1)
1064*e0ea3921Schristos	ld	22,336(1)
1065*e0ea3921Schristos	ld	23,344(1)
1066*e0ea3921Schristos	ld	24,352(1)
1067*e0ea3921Schristos	ld	25,360(1)
1068*e0ea3921Schristos	ld	26,368(1)
1069*e0ea3921Schristos	ld	27,376(1)
1070*e0ea3921Schristos	ld	28,384(1)
1071*e0ea3921Schristos	ld	29,392(1)
1072*e0ea3921Schristos	ld	30,400(1)
1073*e0ea3921Schristos	ld	31,408(1)
1074*e0ea3921Schristos	mtlr	0
1075*e0ea3921Schristos	addi	1,1,416
1076*e0ea3921Schristos	blr
1077*e0ea3921Schristos.long	0
1078*e0ea3921Schristos.byte	0,12,0x04,1,0x80,18,5,0
1079*e0ea3921Schristos.long	0
1080*e0ea3921Schristos
1081*e0ea3921Schristos
1082*e0ea3921Schristos.globl	ChaCha20_ctr32_vsx
1083*e0ea3921Schristos.type	ChaCha20_ctr32_vsx,@function
1084*e0ea3921Schristos.section	".opd","aw"
1085*e0ea3921Schristos.align	3
1086*e0ea3921SchristosChaCha20_ctr32_vsx:
1087*e0ea3921Schristos.quad	.ChaCha20_ctr32_vsx,.TOC.@tocbase,0
1088*e0ea3921Schristos.previous
1089*e0ea3921Schristos.align	5
1090*e0ea3921Schristos.ChaCha20_ctr32_vsx:
1091*e0ea3921Schristos	stdu	1,-224(1)
1092*e0ea3921Schristos	mflr	0
1093*e0ea3921Schristos	li	10,127
1094*e0ea3921Schristos	li	11,143
1095*e0ea3921Schristos	mfspr	12,256
1096*e0ea3921Schristos	stvx	26,10,1
1097*e0ea3921Schristos	addi	10,10,32
1098*e0ea3921Schristos	stvx	27,11,1
1099*e0ea3921Schristos	addi	11,11,32
1100*e0ea3921Schristos	stvx	28,10,1
1101*e0ea3921Schristos	addi	10,10,32
1102*e0ea3921Schristos	stvx	29,11,1
1103*e0ea3921Schristos	addi	11,11,32
1104*e0ea3921Schristos	stvx	30,10,1
1105*e0ea3921Schristos	stvx	31,11,1
1106*e0ea3921Schristos	stw	12,220(1)
1107*e0ea3921Schristos	li	12,-4096+63
1108*e0ea3921Schristos	std	0, 240(1)
1109*e0ea3921Schristos	mtspr	256,12
1110*e0ea3921Schristos
1111*e0ea3921Schristos	bl	.Lconsts
1112*e0ea3921Schristos.long	0x7E006619
1113*e0ea3921Schristos	addi	12,12,0x50
1114*e0ea3921Schristos	li	8,16
1115*e0ea3921Schristos	li	9,32
1116*e0ea3921Schristos	li	10,48
1117*e0ea3921Schristos	li	11,64
1118*e0ea3921Schristos
1119*e0ea3921Schristos.long	0x7E203619
1120*e0ea3921Schristos.long	0x7E483619
1121*e0ea3921Schristos.long	0x7E603E19
1122*e0ea3921Schristos
1123*e0ea3921Schristos	vxor	27,27,27
1124*e0ea3921Schristos.long	0x7F8B6619
1125*e0ea3921Schristos	vspltw	26,19,0
1126*e0ea3921Schristos	vsldoi	19,19,27,4
1127*e0ea3921Schristos	vsldoi	19,27,19,12
1128*e0ea3921Schristos	vadduwm	26,26,28
1129*e0ea3921Schristos
1130*e0ea3921Schristos	lvsl	31,0,8
1131*e0ea3921Schristos	vspltisb	27,3
1132*e0ea3921Schristos	vxor	31,31,27
1133*e0ea3921Schristos
1134*e0ea3921Schristos	li	0,10
1135*e0ea3921Schristos	mtctr	0
1136*e0ea3921Schristos	b	.Loop_outer_vsx
1137*e0ea3921Schristos
1138*e0ea3921Schristos.align	5
1139*e0ea3921Schristos.Loop_outer_vsx:
1140*e0ea3921Schristos	lvx	0,0,12
1141*e0ea3921Schristos	lvx	1,8,12
1142*e0ea3921Schristos	lvx	2,9,12
1143*e0ea3921Schristos	lvx	3,10,12
1144*e0ea3921Schristos
1145*e0ea3921Schristos	vspltw	4,17,0
1146*e0ea3921Schristos	vspltw	5,17,1
1147*e0ea3921Schristos	vspltw	6,17,2
1148*e0ea3921Schristos	vspltw	7,17,3
1149*e0ea3921Schristos
1150*e0ea3921Schristos	vspltw	8,18,0
1151*e0ea3921Schristos	vspltw	9,18,1
1152*e0ea3921Schristos	vspltw	10,18,2
1153*e0ea3921Schristos	vspltw	11,18,3
1154*e0ea3921Schristos
1155*e0ea3921Schristos	vor	12,26,26
1156*e0ea3921Schristos	vspltw	13,19,1
1157*e0ea3921Schristos	vspltw	14,19,2
1158*e0ea3921Schristos	vspltw	15,19,3
1159*e0ea3921Schristos
1160*e0ea3921Schristos	vspltisw	27,-16
1161*e0ea3921Schristos	vspltisw	28,12
1162*e0ea3921Schristos	vspltisw	29,8
1163*e0ea3921Schristos	vspltisw	30,7
1164*e0ea3921Schristos
1165*e0ea3921Schristos.Loop_vsx:
1166*e0ea3921Schristos	vadduwm	0,0,4
1167*e0ea3921Schristos	vadduwm	1,1,5
1168*e0ea3921Schristos	vadduwm	2,2,6
1169*e0ea3921Schristos	vadduwm	3,3,7
1170*e0ea3921Schristos	vxor	12,12,0
1171*e0ea3921Schristos	vxor	13,13,1
1172*e0ea3921Schristos	vxor	14,14,2
1173*e0ea3921Schristos	vxor	15,15,3
1174*e0ea3921Schristos	vrlw	12,12,27
1175*e0ea3921Schristos	vrlw	13,13,27
1176*e0ea3921Schristos	vrlw	14,14,27
1177*e0ea3921Schristos	vrlw	15,15,27
1178*e0ea3921Schristos	vadduwm	8,8,12
1179*e0ea3921Schristos	vadduwm	9,9,13
1180*e0ea3921Schristos	vadduwm	10,10,14
1181*e0ea3921Schristos	vadduwm	11,11,15
1182*e0ea3921Schristos	vxor	4,4,8
1183*e0ea3921Schristos	vxor	5,5,9
1184*e0ea3921Schristos	vxor	6,6,10
1185*e0ea3921Schristos	vxor	7,7,11
1186*e0ea3921Schristos	vrlw	4,4,28
1187*e0ea3921Schristos	vrlw	5,5,28
1188*e0ea3921Schristos	vrlw	6,6,28
1189*e0ea3921Schristos	vrlw	7,7,28
1190*e0ea3921Schristos	vadduwm	0,0,4
1191*e0ea3921Schristos	vadduwm	1,1,5
1192*e0ea3921Schristos	vadduwm	2,2,6
1193*e0ea3921Schristos	vadduwm	3,3,7
1194*e0ea3921Schristos	vxor	12,12,0
1195*e0ea3921Schristos	vxor	13,13,1
1196*e0ea3921Schristos	vxor	14,14,2
1197*e0ea3921Schristos	vxor	15,15,3
1198*e0ea3921Schristos	vrlw	12,12,29
1199*e0ea3921Schristos	vrlw	13,13,29
1200*e0ea3921Schristos	vrlw	14,14,29
1201*e0ea3921Schristos	vrlw	15,15,29
1202*e0ea3921Schristos	vadduwm	8,8,12
1203*e0ea3921Schristos	vadduwm	9,9,13
1204*e0ea3921Schristos	vadduwm	10,10,14
1205*e0ea3921Schristos	vadduwm	11,11,15
1206*e0ea3921Schristos	vxor	4,4,8
1207*e0ea3921Schristos	vxor	5,5,9
1208*e0ea3921Schristos	vxor	6,6,10
1209*e0ea3921Schristos	vxor	7,7,11
1210*e0ea3921Schristos	vrlw	4,4,30
1211*e0ea3921Schristos	vrlw	5,5,30
1212*e0ea3921Schristos	vrlw	6,6,30
1213*e0ea3921Schristos	vrlw	7,7,30
1214*e0ea3921Schristos	vadduwm	0,0,5
1215*e0ea3921Schristos	vadduwm	1,1,6
1216*e0ea3921Schristos	vadduwm	2,2,7
1217*e0ea3921Schristos	vadduwm	3,3,4
1218*e0ea3921Schristos	vxor	15,15,0
1219*e0ea3921Schristos	vxor	12,12,1
1220*e0ea3921Schristos	vxor	13,13,2
1221*e0ea3921Schristos	vxor	14,14,3
1222*e0ea3921Schristos	vrlw	15,15,27
1223*e0ea3921Schristos	vrlw	12,12,27
1224*e0ea3921Schristos	vrlw	13,13,27
1225*e0ea3921Schristos	vrlw	14,14,27
1226*e0ea3921Schristos	vadduwm	10,10,15
1227*e0ea3921Schristos	vadduwm	11,11,12
1228*e0ea3921Schristos	vadduwm	8,8,13
1229*e0ea3921Schristos	vadduwm	9,9,14
1230*e0ea3921Schristos	vxor	5,5,10
1231*e0ea3921Schristos	vxor	6,6,11
1232*e0ea3921Schristos	vxor	7,7,8
1233*e0ea3921Schristos	vxor	4,4,9
1234*e0ea3921Schristos	vrlw	5,5,28
1235*e0ea3921Schristos	vrlw	6,6,28
1236*e0ea3921Schristos	vrlw	7,7,28
1237*e0ea3921Schristos	vrlw	4,4,28
1238*e0ea3921Schristos	vadduwm	0,0,5
1239*e0ea3921Schristos	vadduwm	1,1,6
1240*e0ea3921Schristos	vadduwm	2,2,7
1241*e0ea3921Schristos	vadduwm	3,3,4
1242*e0ea3921Schristos	vxor	15,15,0
1243*e0ea3921Schristos	vxor	12,12,1
1244*e0ea3921Schristos	vxor	13,13,2
1245*e0ea3921Schristos	vxor	14,14,3
1246*e0ea3921Schristos	vrlw	15,15,29
1247*e0ea3921Schristos	vrlw	12,12,29
1248*e0ea3921Schristos	vrlw	13,13,29
1249*e0ea3921Schristos	vrlw	14,14,29
1250*e0ea3921Schristos	vadduwm	10,10,15
1251*e0ea3921Schristos	vadduwm	11,11,12
1252*e0ea3921Schristos	vadduwm	8,8,13
1253*e0ea3921Schristos	vadduwm	9,9,14
1254*e0ea3921Schristos	vxor	5,5,10
1255*e0ea3921Schristos	vxor	6,6,11
1256*e0ea3921Schristos	vxor	7,7,8
1257*e0ea3921Schristos	vxor	4,4,9
1258*e0ea3921Schristos	vrlw	5,5,30
1259*e0ea3921Schristos	vrlw	6,6,30
1260*e0ea3921Schristos	vrlw	7,7,30
1261*e0ea3921Schristos	vrlw	4,4,30
1262*e0ea3921Schristos	bc	16,0,.Loop_vsx
1263*e0ea3921Schristos
1264*e0ea3921Schristos	vadduwm	12,12,26
1265*e0ea3921Schristos
1266*e0ea3921Schristos.long	0x13600F8C
1267*e0ea3921Schristos.long	0x13821F8C
1268*e0ea3921Schristos.long	0x10000E8C
1269*e0ea3921Schristos.long	0x10421E8C
1270*e0ea3921Schristos.long	0x13A42F8C
1271*e0ea3921Schristos.long	0x13C63F8C
1272*e0ea3921Schristos.long	0xF0201057
1273*e0ea3921Schristos.long	0xF0601357
1274*e0ea3921Schristos.long	0xF01BE057
1275*e0ea3921Schristos.long	0xF05BE357
1276*e0ea3921Schristos
1277*e0ea3921Schristos.long	0x10842E8C
1278*e0ea3921Schristos.long	0x10C63E8C
1279*e0ea3921Schristos.long	0x13684F8C
1280*e0ea3921Schristos.long	0x138A5F8C
1281*e0ea3921Schristos.long	0xF0A43057
1282*e0ea3921Schristos.long	0xF0E43357
1283*e0ea3921Schristos.long	0xF09DF057
1284*e0ea3921Schristos.long	0xF0DDF357
1285*e0ea3921Schristos
1286*e0ea3921Schristos.long	0x11084E8C
1287*e0ea3921Schristos.long	0x114A5E8C
1288*e0ea3921Schristos.long	0x13AC6F8C
1289*e0ea3921Schristos.long	0x13CE7F8C
1290*e0ea3921Schristos.long	0xF1285057
1291*e0ea3921Schristos.long	0xF1685357
1292*e0ea3921Schristos.long	0xF11BE057
1293*e0ea3921Schristos.long	0xF15BE357
1294*e0ea3921Schristos
1295*e0ea3921Schristos.long	0x118C6E8C
1296*e0ea3921Schristos.long	0x11CE7E8C
1297*e0ea3921Schristos	vspltisw	27,4
1298*e0ea3921Schristos	vadduwm	26,26,27
1299*e0ea3921Schristos.long	0xF1AC7057
1300*e0ea3921Schristos.long	0xF1EC7357
1301*e0ea3921Schristos.long	0xF19DF057
1302*e0ea3921Schristos.long	0xF1DDF357
1303*e0ea3921Schristos
1304*e0ea3921Schristos	vadduwm	0,0,16
1305*e0ea3921Schristos	vadduwm	4,4,17
1306*e0ea3921Schristos	vadduwm	8,8,18
1307*e0ea3921Schristos	vadduwm	12,12,19
1308*e0ea3921Schristos
1309*e0ea3921Schristos	vperm	0,0,0,31
1310*e0ea3921Schristos	vperm	4,4,4,31
1311*e0ea3921Schristos	vperm	8,8,8,31
1312*e0ea3921Schristos	vperm	12,12,12,31
1313*e0ea3921Schristos
1314*e0ea3921Schristos	cmpldi	5,0x40
1315*e0ea3921Schristos	blt	.Ltail_vsx
1316*e0ea3921Schristos
1317*e0ea3921Schristos.long	0x7F602619
1318*e0ea3921Schristos.long	0x7F882619
1319*e0ea3921Schristos.long	0x7FA92619
1320*e0ea3921Schristos.long	0x7FCA2619
1321*e0ea3921Schristos
1322*e0ea3921Schristos	vxor	27,27,0
1323*e0ea3921Schristos	vxor	28,28,4
1324*e0ea3921Schristos	vxor	29,29,8
1325*e0ea3921Schristos	vxor	30,30,12
1326*e0ea3921Schristos
1327*e0ea3921Schristos.long	0x7F601F19
1328*e0ea3921Schristos.long	0x7F881F19
1329*e0ea3921Schristos	addi	4,4,0x40
1330*e0ea3921Schristos.long	0x7FA91F19
1331*e0ea3921Schristos	subi	5,5,0x40
1332*e0ea3921Schristos.long	0x7FCA1F19
1333*e0ea3921Schristos	addi	3,3,0x40
1334*e0ea3921Schristos	beq	.Ldone_vsx
1335*e0ea3921Schristos
1336*e0ea3921Schristos	vadduwm	0,1,16
1337*e0ea3921Schristos	vadduwm	4,5,17
1338*e0ea3921Schristos	vadduwm	8,9,18
1339*e0ea3921Schristos	vadduwm	12,13,19
1340*e0ea3921Schristos
1341*e0ea3921Schristos	vperm	0,0,0,31
1342*e0ea3921Schristos	vperm	4,4,4,31
1343*e0ea3921Schristos	vperm	8,8,8,31
1344*e0ea3921Schristos	vperm	12,12,12,31
1345*e0ea3921Schristos
1346*e0ea3921Schristos	cmpldi	5,0x40
1347*e0ea3921Schristos	blt	.Ltail_vsx
1348*e0ea3921Schristos
1349*e0ea3921Schristos.long	0x7F602619
1350*e0ea3921Schristos.long	0x7F882619
1351*e0ea3921Schristos.long	0x7FA92619
1352*e0ea3921Schristos.long	0x7FCA2619
1353*e0ea3921Schristos
1354*e0ea3921Schristos	vxor	27,27,0
1355*e0ea3921Schristos	vxor	28,28,4
1356*e0ea3921Schristos	vxor	29,29,8
1357*e0ea3921Schristos	vxor	30,30,12
1358*e0ea3921Schristos
1359*e0ea3921Schristos.long	0x7F601F19
1360*e0ea3921Schristos.long	0x7F881F19
1361*e0ea3921Schristos	addi	4,4,0x40
1362*e0ea3921Schristos.long	0x7FA91F19
1363*e0ea3921Schristos	subi	5,5,0x40
1364*e0ea3921Schristos.long	0x7FCA1F19
1365*e0ea3921Schristos	addi	3,3,0x40
1366*e0ea3921Schristos	beq	.Ldone_vsx
1367*e0ea3921Schristos
1368*e0ea3921Schristos	vadduwm	0,2,16
1369*e0ea3921Schristos	vadduwm	4,6,17
1370*e0ea3921Schristos	vadduwm	8,10,18
1371*e0ea3921Schristos	vadduwm	12,14,19
1372*e0ea3921Schristos
1373*e0ea3921Schristos	vperm	0,0,0,31
1374*e0ea3921Schristos	vperm	4,4,4,31
1375*e0ea3921Schristos	vperm	8,8,8,31
1376*e0ea3921Schristos	vperm	12,12,12,31
1377*e0ea3921Schristos
1378*e0ea3921Schristos	cmpldi	5,0x40
1379*e0ea3921Schristos	blt	.Ltail_vsx
1380*e0ea3921Schristos
1381*e0ea3921Schristos.long	0x7F602619
1382*e0ea3921Schristos.long	0x7F882619
1383*e0ea3921Schristos.long	0x7FA92619
1384*e0ea3921Schristos.long	0x7FCA2619
1385*e0ea3921Schristos
1386*e0ea3921Schristos	vxor	27,27,0
1387*e0ea3921Schristos	vxor	28,28,4
1388*e0ea3921Schristos	vxor	29,29,8
1389*e0ea3921Schristos	vxor	30,30,12
1390*e0ea3921Schristos
1391*e0ea3921Schristos.long	0x7F601F19
1392*e0ea3921Schristos.long	0x7F881F19
1393*e0ea3921Schristos	addi	4,4,0x40
1394*e0ea3921Schristos.long	0x7FA91F19
1395*e0ea3921Schristos	subi	5,5,0x40
1396*e0ea3921Schristos.long	0x7FCA1F19
1397*e0ea3921Schristos	addi	3,3,0x40
1398*e0ea3921Schristos	beq	.Ldone_vsx
1399*e0ea3921Schristos
1400*e0ea3921Schristos	vadduwm	0,3,16
1401*e0ea3921Schristos	vadduwm	4,7,17
1402*e0ea3921Schristos	vadduwm	8,11,18
1403*e0ea3921Schristos	vadduwm	12,15,19
1404*e0ea3921Schristos
1405*e0ea3921Schristos	vperm	0,0,0,31
1406*e0ea3921Schristos	vperm	4,4,4,31
1407*e0ea3921Schristos	vperm	8,8,8,31
1408*e0ea3921Schristos	vperm	12,12,12,31
1409*e0ea3921Schristos
1410*e0ea3921Schristos	cmpldi	5,0x40
1411*e0ea3921Schristos	blt	.Ltail_vsx
1412*e0ea3921Schristos
1413*e0ea3921Schristos.long	0x7F602619
1414*e0ea3921Schristos.long	0x7F882619
1415*e0ea3921Schristos.long	0x7FA92619
1416*e0ea3921Schristos.long	0x7FCA2619
1417*e0ea3921Schristos
1418*e0ea3921Schristos	vxor	27,27,0
1419*e0ea3921Schristos	vxor	28,28,4
1420*e0ea3921Schristos	vxor	29,29,8
1421*e0ea3921Schristos	vxor	30,30,12
1422*e0ea3921Schristos
1423*e0ea3921Schristos.long	0x7F601F19
1424*e0ea3921Schristos.long	0x7F881F19
1425*e0ea3921Schristos	addi	4,4,0x40
1426*e0ea3921Schristos.long	0x7FA91F19
1427*e0ea3921Schristos	subi	5,5,0x40
1428*e0ea3921Schristos.long	0x7FCA1F19
1429*e0ea3921Schristos	addi	3,3,0x40
1430*e0ea3921Schristos	mtctr	0
1431*e0ea3921Schristos	bne	.Loop_outer_vsx
1432*e0ea3921Schristos
1433*e0ea3921Schristos.Ldone_vsx:
1434*e0ea3921Schristos	lwz	12,220(1)
1435*e0ea3921Schristos	li	10,127
1436*e0ea3921Schristos	li	11,143
1437*e0ea3921Schristos	ld	0, 240(1)
1438*e0ea3921Schristos	mtspr	256,12
14392ac7033aSchristos	lvx	26,10,1
14402ac7033aSchristos	addi	10,10,32
14412ac7033aSchristos	lvx	27,11,1
14422ac7033aSchristos	addi	11,11,32
14432ac7033aSchristos	lvx	28,10,1
14442ac7033aSchristos	addi	10,10,32
14452ac7033aSchristos	lvx	29,11,1
14462ac7033aSchristos	addi	11,11,32
14472ac7033aSchristos	lvx	30,10,1
14482ac7033aSchristos	lvx	31,11,1
14492ac7033aSchristos	mtlr	0
1450*e0ea3921Schristos	addi	1,1,224
14512ac7033aSchristos	blr
14522ac7033aSchristos
1453*e0ea3921Schristos.align	4
1454*e0ea3921Schristos.Ltail_vsx:
1455*e0ea3921Schristos	addi	11,1,48
1456*e0ea3921Schristos	mtctr	5
1457*e0ea3921Schristos.long	0x7C005F19
1458*e0ea3921Schristos.long	0x7C885F19
1459*e0ea3921Schristos.long	0x7D095F19
1460*e0ea3921Schristos.long	0x7D8A5F19
1461*e0ea3921Schristos	subi	12,11,1
1462*e0ea3921Schristos	subi	4,4,1
1463*e0ea3921Schristos	subi	3,3,1
1464*e0ea3921Schristos
1465*e0ea3921Schristos.Loop_tail_vsx:
1466*e0ea3921Schristos	lbzu	6,1(12)
1467*e0ea3921Schristos	lbzu	7,1(4)
1468*e0ea3921Schristos	xor	6,6,7
1469*e0ea3921Schristos	stbu	6,1(3)
1470*e0ea3921Schristos	bc	16,0,.Loop_tail_vsx
1471*e0ea3921Schristos
1472*e0ea3921Schristos.long	0x7E005F19
1473*e0ea3921Schristos.long	0x7E085F19
1474*e0ea3921Schristos.long	0x7E095F19
1475*e0ea3921Schristos.long	0x7E0A5F19
1476*e0ea3921Schristos
1477*e0ea3921Schristos	b	.Ldone_vsx
1478*e0ea3921Schristos.long	0
1479*e0ea3921Schristos.byte	0,12,0x04,1,0x80,0,5,0
1480*e0ea3921Schristos.long	0
14812ac7033aSchristos
14822ac7033aSchristos.align	5
14832ac7033aSchristos.Lconsts:
14842ac7033aSchristos	mflr	0
14852ac7033aSchristos	bcl	20,31,$+4
14862ac7033aSchristos	mflr	12
14872ac7033aSchristos	addi	12,12,56
14882ac7033aSchristos	mtlr	0
14892ac7033aSchristos	blr
14902ac7033aSchristos.long	0
14912ac7033aSchristos.byte	0,12,0x14,0,0,0,0,0
14922ac7033aSchristos.space	28
14932ac7033aSchristos.Lsigma:
14942ac7033aSchristos.long	0x61707865,0x3320646e,0x79622d32,0x6b206574
14952ac7033aSchristos.long	1,0,0,0
14962ac7033aSchristos.long	4,0,0,0
14972ac7033aSchristos.long	0x02030001,0x06070405,0x0a0b0809,0x0e0f0c0d
14982ac7033aSchristos.long	0x01020300,0x05060704,0x090a0b08,0x0d0e0f0c
1499*e0ea3921Schristos.long	0x61707865,0x61707865,0x61707865,0x61707865
1500*e0ea3921Schristos.long	0x3320646e,0x3320646e,0x3320646e,0x3320646e
1501*e0ea3921Schristos.long	0x79622d32,0x79622d32,0x79622d32,0x79622d32
1502*e0ea3921Schristos.long	0x6b206574,0x6b206574,0x6b206574,0x6b206574
1503*e0ea3921Schristos.long	0,1,2,3
1504*e0ea3921Schristos.byte	67,104,97,67,104,97,50,48,32,102,111,114,32,80,111,119,101,114,80,67,47,65,108,116,105,86,101,99,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
15052ac7033aSchristos.align	2
15062ac7033aSchristos.align	2
1507