1.machine	"any"
2
3.text
4
5.align	7
6rcon:
7.byte	0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00
8.byte	0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00
9.byte	0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c
10.byte	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
11.Lconsts:
12	mflr	0
13	bcl	20,31,$+4
14	mflr	6
15	addi	6,6,-0x48
16	mtlr	0
17	blr
18.long	0
19.byte	0,12,0x14,0,0,0,0,0
20.byte	65,69,83,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,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
21.align	2
22
23.globl	aes_p8_set_encrypt_key
24.type	aes_p8_set_encrypt_key,@function
25.section	".opd","aw"
26.align	3
27aes_p8_set_encrypt_key:
28.quad	.aes_p8_set_encrypt_key,.TOC.@tocbase,0
29.previous
30.align	5
31.aes_p8_set_encrypt_key:
32.Lset_encrypt_key:
33	mflr	11
34	std	11,16(1)
35
36	li	6,-1
37	cmpldi	3,0
38	beq-	.Lenc_key_abort
39	cmpldi	5,0
40	beq-	.Lenc_key_abort
41	li	6,-2
42	cmpwi	4,128
43	blt-	.Lenc_key_abort
44	cmpwi	4,256
45	bgt-	.Lenc_key_abort
46	andi.	0,4,0x3f
47	bne-	.Lenc_key_abort
48
49	lis	0,0xfff0
50	mfspr	12,256
51	mtspr	256,0
52
53	bl	.Lconsts
54	mtlr	11
55
56	neg	9,3
57	lvx	1,0,3
58	addi	3,3,15
59	lvsr	3,0,9
60	li	8,0x20
61	cmpwi	4,192
62	lvx	2,0,3
63
64	lvx	4,0,6
65
66	lvx	5,8,6
67	addi	6,6,0x10
68	vperm	1,1,2,3
69	li	7,8
70	vxor	0,0,0
71	mtctr	7
72
73	lvsr	8,0,5
74	vspltisb	9,-1
75	lvx	10,0,5
76	vperm	9,0,9,8
77
78	blt	.Loop128
79	addi	3,3,8
80	beq	.L192
81	addi	3,3,8
82	b	.L256
83
84.align	4
85.Loop128:
86	vperm	3,1,1,5
87	vsldoi	6,0,1,12
88	vperm	11,1,1,8
89	vsel	7,10,11,9
90	vor	10,11,11
91.long	0x10632509
92	stvx	7,0,5
93	addi	5,5,16
94
95	vxor	1,1,6
96	vsldoi	6,0,6,12
97	vxor	1,1,6
98	vsldoi	6,0,6,12
99	vxor	1,1,6
100	vadduwm	4,4,4
101	vxor	1,1,3
102	bc	16,0,.Loop128
103
104	lvx	4,0,6
105
106	vperm	3,1,1,5
107	vsldoi	6,0,1,12
108	vperm	11,1,1,8
109	vsel	7,10,11,9
110	vor	10,11,11
111.long	0x10632509
112	stvx	7,0,5
113	addi	5,5,16
114
115	vxor	1,1,6
116	vsldoi	6,0,6,12
117	vxor	1,1,6
118	vsldoi	6,0,6,12
119	vxor	1,1,6
120	vadduwm	4,4,4
121	vxor	1,1,3
122
123	vperm	3,1,1,5
124	vsldoi	6,0,1,12
125	vperm	11,1,1,8
126	vsel	7,10,11,9
127	vor	10,11,11
128.long	0x10632509
129	stvx	7,0,5
130	addi	5,5,16
131
132	vxor	1,1,6
133	vsldoi	6,0,6,12
134	vxor	1,1,6
135	vsldoi	6,0,6,12
136	vxor	1,1,6
137	vxor	1,1,3
138	vperm	11,1,1,8
139	vsel	7,10,11,9
140	vor	10,11,11
141	stvx	7,0,5
142
143	addi	3,5,15
144	addi	5,5,0x50
145
146	li	8,10
147	b	.Ldone
148
149.align	4
150.L192:
151	lvx	6,0,3
152	li	7,4
153	vperm	11,1,1,8
154	vsel	7,10,11,9
155	vor	10,11,11
156	stvx	7,0,5
157	addi	5,5,16
158	vperm	2,2,6,3
159	vspltisb	3,8
160	mtctr	7
161	vsububm	5,5,3
162
163.Loop192:
164	vperm	3,2,2,5
165	vsldoi	6,0,1,12
166.long	0x10632509
167
168	vxor	1,1,6
169	vsldoi	6,0,6,12
170	vxor	1,1,6
171	vsldoi	6,0,6,12
172	vxor	1,1,6
173
174	vsldoi	7,0,2,8
175	vspltw	6,1,3
176	vxor	6,6,2
177	vsldoi	2,0,2,12
178	vadduwm	4,4,4
179	vxor	2,2,6
180	vxor	1,1,3
181	vxor	2,2,3
182	vsldoi	7,7,1,8
183
184	vperm	3,2,2,5
185	vsldoi	6,0,1,12
186	vperm	11,7,7,8
187	vsel	7,10,11,9
188	vor	10,11,11
189.long	0x10632509
190	stvx	7,0,5
191	addi	5,5,16
192
193	vsldoi	7,1,2,8
194	vxor	1,1,6
195	vsldoi	6,0,6,12
196	vperm	11,7,7,8
197	vsel	7,10,11,9
198	vor	10,11,11
199	vxor	1,1,6
200	vsldoi	6,0,6,12
201	vxor	1,1,6
202	stvx	7,0,5
203	addi	5,5,16
204
205	vspltw	6,1,3
206	vxor	6,6,2
207	vsldoi	2,0,2,12
208	vadduwm	4,4,4
209	vxor	2,2,6
210	vxor	1,1,3
211	vxor	2,2,3
212	vperm	11,1,1,8
213	vsel	7,10,11,9
214	vor	10,11,11
215	stvx	7,0,5
216	addi	3,5,15
217	addi	5,5,16
218	bc	16,0,.Loop192
219
220	li	8,12
221	addi	5,5,0x20
222	b	.Ldone
223
224.align	4
225.L256:
226	lvx	6,0,3
227	li	7,7
228	li	8,14
229	vperm	11,1,1,8
230	vsel	7,10,11,9
231	vor	10,11,11
232	stvx	7,0,5
233	addi	5,5,16
234	vperm	2,2,6,3
235	mtctr	7
236
237.Loop256:
238	vperm	3,2,2,5
239	vsldoi	6,0,1,12
240	vperm	11,2,2,8
241	vsel	7,10,11,9
242	vor	10,11,11
243.long	0x10632509
244	stvx	7,0,5
245	addi	5,5,16
246
247	vxor	1,1,6
248	vsldoi	6,0,6,12
249	vxor	1,1,6
250	vsldoi	6,0,6,12
251	vxor	1,1,6
252	vadduwm	4,4,4
253	vxor	1,1,3
254	vperm	11,1,1,8
255	vsel	7,10,11,9
256	vor	10,11,11
257	stvx	7,0,5
258	addi	3,5,15
259	addi	5,5,16
260	bdz	.Ldone
261
262	vspltw	3,1,3
263	vsldoi	6,0,2,12
264.long	0x106305C8
265
266	vxor	2,2,6
267	vsldoi	6,0,6,12
268	vxor	2,2,6
269	vsldoi	6,0,6,12
270	vxor	2,2,6
271
272	vxor	2,2,3
273	b	.Loop256
274
275.align	4
276.Ldone:
277	lvx	2,0,3
278	vsel	2,10,2,9
279	stvx	2,0,3
280	li	6,0
281	mtspr	256,12
282	stw	8,0(5)
283
284.Lenc_key_abort:
285	mr	3,6
286	blr
287.long	0
288.byte	0,12,0x14,1,0,0,3,0
289.long	0
290
291
292.globl	aes_p8_set_decrypt_key
293.type	aes_p8_set_decrypt_key,@function
294.section	".opd","aw"
295.align	3
296aes_p8_set_decrypt_key:
297.quad	.aes_p8_set_decrypt_key,.TOC.@tocbase,0
298.previous
299.align	5
300.aes_p8_set_decrypt_key:
301	stdu	1,-64(1)
302	mflr	10
303	std	10,64+16(1)
304	bl	.Lset_encrypt_key
305	mtlr	10
306
307	cmpwi	3,0
308	bne-	.Ldec_key_abort
309
310	slwi	7,8,4
311	subi	3,5,240
312	srwi	8,8,1
313	add	5,3,7
314	mtctr	8
315
316.Ldeckey:
317	lwz	0, 0(3)
318	lwz	6, 4(3)
319	lwz	7, 8(3)
320	lwz	8, 12(3)
321	addi	3,3,16
322	lwz	9, 0(5)
323	lwz	10,4(5)
324	lwz	11,8(5)
325	lwz	12,12(5)
326	stw	0, 0(5)
327	stw	6, 4(5)
328	stw	7, 8(5)
329	stw	8, 12(5)
330	subi	5,5,16
331	stw	9, -16(3)
332	stw	10,-12(3)
333	stw	11,-8(3)
334	stw	12,-4(3)
335	bc	16,0,.Ldeckey
336
337	xor	3,3,3
338.Ldec_key_abort:
339	addi	1,1,64
340	blr
341.long	0
342.byte	0,12,4,1,0x80,0,3,0
343.long	0
344
345.globl	aes_p8_encrypt
346.type	aes_p8_encrypt,@function
347.section	".opd","aw"
348.align	3
349aes_p8_encrypt:
350.quad	.aes_p8_encrypt,.TOC.@tocbase,0
351.previous
352.align	5
353.aes_p8_encrypt:
354	lwz	6,240(5)
355	lis	0,0xfc00
356	mfspr	12,256
357	li	7,15
358	mtspr	256,0
359
360	lvx	0,0,3
361	neg	11,4
362	lvx	1,7,3
363	lvsl	2,0,3
364
365	lvsl	3,0,11
366
367	li	7,16
368	vperm	0,0,1,2
369	lvx	1,0,5
370	lvsl	5,0,5
371	srwi	6,6,1
372	lvx	2,7,5
373	addi	7,7,16
374	subi	6,6,1
375	vperm	1,1,2,5
376
377	vxor	0,0,1
378	lvx	1,7,5
379	addi	7,7,16
380	mtctr	6
381
382.Loop_enc:
383	vperm	2,2,1,5
384.long	0x10001508
385	lvx	2,7,5
386	addi	7,7,16
387	vperm	1,1,2,5
388.long	0x10000D08
389	lvx	1,7,5
390	addi	7,7,16
391	bc	16,0,.Loop_enc
392
393	vperm	2,2,1,5
394.long	0x10001508
395	lvx	2,7,5
396	vperm	1,1,2,5
397.long	0x10000D09
398
399	vspltisb	2,-1
400	vxor	1,1,1
401	li	7,15
402	vperm	2,1,2,3
403
404	lvx	1,0,4
405	vperm	0,0,0,3
406	vsel	1,1,0,2
407	lvx	4,7,4
408	stvx	1,0,4
409	vsel	0,0,4,2
410	stvx	0,7,4
411
412	mtspr	256,12
413	blr
414.long	0
415.byte	0,12,0x14,0,0,0,3,0
416.long	0
417
418.globl	aes_p8_decrypt
419.type	aes_p8_decrypt,@function
420.section	".opd","aw"
421.align	3
422aes_p8_decrypt:
423.quad	.aes_p8_decrypt,.TOC.@tocbase,0
424.previous
425.align	5
426.aes_p8_decrypt:
427	lwz	6,240(5)
428	lis	0,0xfc00
429	mfspr	12,256
430	li	7,15
431	mtspr	256,0
432
433	lvx	0,0,3
434	neg	11,4
435	lvx	1,7,3
436	lvsl	2,0,3
437
438	lvsl	3,0,11
439
440	li	7,16
441	vperm	0,0,1,2
442	lvx	1,0,5
443	lvsl	5,0,5
444	srwi	6,6,1
445	lvx	2,7,5
446	addi	7,7,16
447	subi	6,6,1
448	vperm	1,1,2,5
449
450	vxor	0,0,1
451	lvx	1,7,5
452	addi	7,7,16
453	mtctr	6
454
455.Loop_dec:
456	vperm	2,2,1,5
457.long	0x10001548
458	lvx	2,7,5
459	addi	7,7,16
460	vperm	1,1,2,5
461.long	0x10000D48
462	lvx	1,7,5
463	addi	7,7,16
464	bc	16,0,.Loop_dec
465
466	vperm	2,2,1,5
467.long	0x10001548
468	lvx	2,7,5
469	vperm	1,1,2,5
470.long	0x10000D49
471
472	vspltisb	2,-1
473	vxor	1,1,1
474	li	7,15
475	vperm	2,1,2,3
476
477	lvx	1,0,4
478	vperm	0,0,0,3
479	vsel	1,1,0,2
480	lvx	4,7,4
481	stvx	1,0,4
482	vsel	0,0,4,2
483	stvx	0,7,4
484
485	mtspr	256,12
486	blr
487.long	0
488.byte	0,12,0x14,0,0,0,3,0
489.long	0
490
491.globl	aes_p8_cbc_encrypt
492.type	aes_p8_cbc_encrypt,@function
493.section	".opd","aw"
494.align	3
495aes_p8_cbc_encrypt:
496.quad	.aes_p8_cbc_encrypt,.TOC.@tocbase,0
497.previous
498.align	5
499.aes_p8_cbc_encrypt:
500	cmpldi	5,16
501	bltlr
502
503	cmpwi	8,0
504	lis	0,0xffe0
505	mfspr	12,256
506	mtspr	256,0
507
508	li	10,15
509	vxor	0,0,0
510
511
512	lvx	4,0,7
513	lvsl	6,0,7
514	lvx	5,10,7
515
516	vperm	4,4,5,6
517
518	neg	11,3
519	lvsl	10,0,6
520	lwz	9,240(6)
521
522	lvsr	6,0,11
523	lvx	5,0,3
524	addi	3,3,15
525
526
527	lvsr	8,0,4
528	vspltisb	9,-1
529	lvx	7,0,4
530	vperm	9,0,9,8
531
532
533	srwi	9,9,1
534	li	10,16
535	subi	9,9,1
536	beq	.Lcbc_dec
537
538.Lcbc_enc:
539	vor	2,5,5
540	lvx	5,0,3
541	addi	3,3,16
542	mtctr	9
543	subi	5,5,16
544
545	lvx	0,0,6
546	vperm	2,2,5,6
547	lvx	1,10,6
548	addi	10,10,16
549	vperm	0,0,1,10
550	vxor	2,2,0
551	lvx	0,10,6
552	addi	10,10,16
553	vxor	2,2,4
554
555.Loop_cbc_enc:
556	vperm	1,1,0,10
557.long	0x10420D08
558	lvx	1,10,6
559	addi	10,10,16
560	vperm	0,0,1,10
561.long	0x10420508
562	lvx	0,10,6
563	addi	10,10,16
564	bc	16,0,.Loop_cbc_enc
565
566	vperm	1,1,0,10
567.long	0x10420D08
568	lvx	1,10,6
569	li	10,16
570	vperm	0,0,1,10
571.long	0x10820509
572	cmpldi	5,16
573
574	vperm	3,4,4,8
575	vsel	2,7,3,9
576	vor	7,3,3
577	stvx	2,0,4
578	addi	4,4,16
579	bge	.Lcbc_enc
580
581	b	.Lcbc_done
582
583.align	4
584.Lcbc_dec:
585	cmpldi	5,128
586	bge	_aesp8_cbc_decrypt8x
587	vor	3,5,5
588	lvx	5,0,3
589	addi	3,3,16
590	mtctr	9
591	subi	5,5,16
592
593	lvx	0,0,6
594	vperm	3,3,5,6
595	lvx	1,10,6
596	addi	10,10,16
597	vperm	0,0,1,10
598	vxor	2,3,0
599	lvx	0,10,6
600	addi	10,10,16
601
602.Loop_cbc_dec:
603	vperm	1,1,0,10
604.long	0x10420D48
605	lvx	1,10,6
606	addi	10,10,16
607	vperm	0,0,1,10
608.long	0x10420548
609	lvx	0,10,6
610	addi	10,10,16
611	bc	16,0,.Loop_cbc_dec
612
613	vperm	1,1,0,10
614.long	0x10420D48
615	lvx	1,10,6
616	li	10,16
617	vperm	0,0,1,10
618.long	0x10420549
619	cmpldi	5,16
620
621	vxor	2,2,4
622	vor	4,3,3
623	vperm	3,2,2,8
624	vsel	2,7,3,9
625	vor	7,3,3
626	stvx	2,0,4
627	addi	4,4,16
628	bge	.Lcbc_dec
629
630.Lcbc_done:
631	addi	4,4,-1
632	lvx	2,0,4
633	vsel	2,7,2,9
634	stvx	2,0,4
635
636	neg	8,7
637	li	10,15
638	vxor	0,0,0
639	vspltisb	9,-1
640
641	lvsl	8,0,8
642	vperm	9,0,9,8
643
644	lvx	7,0,7
645	vperm	4,4,4,8
646	vsel	2,7,4,9
647	lvx	5,10,7
648	stvx	2,0,7
649	vsel	2,4,5,9
650	stvx	2,10,7
651
652	mtspr	256,12
653	blr
654.long	0
655.byte	0,12,0x14,0,0,0,6,0
656.long	0
657.align	5
658_aesp8_cbc_decrypt8x:
659	stdu	1,-448(1)
660	li	10,207
661	li	11,223
662	stvx	20,10,1
663	addi	10,10,32
664	stvx	21,11,1
665	addi	11,11,32
666	stvx	22,10,1
667	addi	10,10,32
668	stvx	23,11,1
669	addi	11,11,32
670	stvx	24,10,1
671	addi	10,10,32
672	stvx	25,11,1
673	addi	11,11,32
674	stvx	26,10,1
675	addi	10,10,32
676	stvx	27,11,1
677	addi	11,11,32
678	stvx	28,10,1
679	addi	10,10,32
680	stvx	29,11,1
681	addi	11,11,32
682	stvx	30,10,1
683	stvx	31,11,1
684	li	0,-1
685	stw	12,396(1)
686	li	8,0x10
687	std	26,400(1)
688	li	26,0x20
689	std	27,408(1)
690	li	27,0x30
691	std	28,416(1)
692	li	28,0x40
693	std	29,424(1)
694	li	29,0x50
695	std	30,432(1)
696	li	30,0x60
697	std	31,440(1)
698	li	31,0x70
699	mtspr	256,0
700
701	subi	9,9,3
702	subi	5,5,128
703
704	lvx	23,0,6
705	lvx	30,8,6
706	addi	6,6,0x20
707	lvx	31,0,6
708	vperm	23,23,30,10
709	addi	11,1,64+15
710	mtctr	9
711
712.Load_cbc_dec_key:
713	vperm	24,30,31,10
714	lvx	30,8,6
715	addi	6,6,0x20
716	stvx	24,0,11
717	vperm	25,31,30,10
718	lvx	31,0,6
719	stvx	25,8,11
720	addi	11,11,0x20
721	bc	16,0,.Load_cbc_dec_key
722
723	lvx	26,8,6
724	vperm	24,30,31,10
725	lvx	27,26,6
726	stvx	24,0,11
727	vperm	25,31,26,10
728	lvx	28,27,6
729	stvx	25,8,11
730	addi	11,1,64+15
731	vperm	26,26,27,10
732	lvx	29,28,6
733	vperm	27,27,28,10
734	lvx	30,29,6
735	vperm	28,28,29,10
736	lvx	31,30,6
737	vperm	29,29,30,10
738	lvx	14,31,6
739	vperm	30,30,31,10
740	lvx	24,0,11
741	vperm	31,31,14,10
742	lvx	25,8,11
743
744
745
746	subi	3,3,15
747
748
749.long	0x7C001E99
750
751
752.long	0x7C281E99
753
754.long	0x7C5A1E99
755
756.long	0x7C7B1E99
757
758.long	0x7D5C1E99
759
760	vxor	14,0,23
761.long	0x7D7D1E99
762
763	vxor	15,1,23
764.long	0x7D9E1E99
765
766	vxor	16,2,23
767.long	0x7DBF1E99
768	addi	3,3,0x80
769
770	vxor	17,3,23
771
772	vxor	18,10,23
773
774	vxor	19,11,23
775	vxor	20,12,23
776	vxor	21,13,23
777
778	mtctr	9
779	b	.Loop_cbc_dec8x
780.align	5
781.Loop_cbc_dec8x:
782.long	0x11CEC548
783.long	0x11EFC548
784.long	0x1210C548
785.long	0x1231C548
786.long	0x1252C548
787.long	0x1273C548
788.long	0x1294C548
789.long	0x12B5C548
790	lvx	24,26,11
791	addi	11,11,0x20
792
793.long	0x11CECD48
794.long	0x11EFCD48
795.long	0x1210CD48
796.long	0x1231CD48
797.long	0x1252CD48
798.long	0x1273CD48
799.long	0x1294CD48
800.long	0x12B5CD48
801	lvx	25,8,11
802	bc	16,0,.Loop_cbc_dec8x
803
804	subic	5,5,128
805.long	0x11CEC548
806.long	0x11EFC548
807.long	0x1210C548
808.long	0x1231C548
809.long	0x1252C548
810.long	0x1273C548
811.long	0x1294C548
812.long	0x12B5C548
813
814	subfe.	0,0,0
815.long	0x11CECD48
816.long	0x11EFCD48
817.long	0x1210CD48
818.long	0x1231CD48
819.long	0x1252CD48
820.long	0x1273CD48
821.long	0x1294CD48
822.long	0x12B5CD48
823
824	and	0,0,5
825.long	0x11CED548
826.long	0x11EFD548
827.long	0x1210D548
828.long	0x1231D548
829.long	0x1252D548
830.long	0x1273D548
831.long	0x1294D548
832.long	0x12B5D548
833
834	add	3,3,0
835
836
837
838.long	0x11CEDD48
839.long	0x11EFDD48
840.long	0x1210DD48
841.long	0x1231DD48
842.long	0x1252DD48
843.long	0x1273DD48
844.long	0x1294DD48
845.long	0x12B5DD48
846
847	addi	11,1,64+15
848.long	0x11CEE548
849.long	0x11EFE548
850.long	0x1210E548
851.long	0x1231E548
852.long	0x1252E548
853.long	0x1273E548
854.long	0x1294E548
855.long	0x12B5E548
856	lvx	24,0,11
857
858.long	0x11CEED48
859.long	0x11EFED48
860.long	0x1210ED48
861.long	0x1231ED48
862.long	0x1252ED48
863.long	0x1273ED48
864.long	0x1294ED48
865.long	0x12B5ED48
866	lvx	25,8,11
867
868.long	0x11CEF548
869	vxor	4,4,31
870.long	0x11EFF548
871	vxor	0,0,31
872.long	0x1210F548
873	vxor	1,1,31
874.long	0x1231F548
875	vxor	2,2,31
876.long	0x1252F548
877	vxor	3,3,31
878.long	0x1273F548
879	vxor	10,10,31
880.long	0x1294F548
881	vxor	11,11,31
882.long	0x12B5F548
883	vxor	12,12,31
884
885.long	0x11CE2549
886.long	0x11EF0549
887.long	0x7C001E99
888.long	0x12100D49
889.long	0x7C281E99
890.long	0x12311549
891
892.long	0x7C5A1E99
893.long	0x12521D49
894
895.long	0x7C7B1E99
896.long	0x12735549
897
898.long	0x7D5C1E99
899.long	0x12945D49
900
901.long	0x7D7D1E99
902.long	0x12B56549
903
904.long	0x7D9E1E99
905	vor	4,13,13
906
907.long	0x7DBF1E99
908	addi	3,3,0x80
909
910
911
912.long	0x7DC02799
913
914	vxor	14,0,23
915
916.long	0x7DE82799
917
918	vxor	15,1,23
919
920.long	0x7E1A2799
921	vxor	16,2,23
922
923.long	0x7E3B2799
924	vxor	17,3,23
925
926.long	0x7E5C2799
927	vxor	18,10,23
928
929.long	0x7E7D2799
930	vxor	19,11,23
931
932.long	0x7E9E2799
933	vxor	20,12,23
934.long	0x7EBF2799
935	addi	4,4,0x80
936	vxor	21,13,23
937
938	mtctr	9
939	beq	.Loop_cbc_dec8x
940
941	addic.	5,5,128
942	beq	.Lcbc_dec8x_done
943	nop
944	nop
945
946.Loop_cbc_dec8x_tail:
947.long	0x11EFC548
948.long	0x1210C548
949.long	0x1231C548
950.long	0x1252C548
951.long	0x1273C548
952.long	0x1294C548
953.long	0x12B5C548
954	lvx	24,26,11
955	addi	11,11,0x20
956
957.long	0x11EFCD48
958.long	0x1210CD48
959.long	0x1231CD48
960.long	0x1252CD48
961.long	0x1273CD48
962.long	0x1294CD48
963.long	0x12B5CD48
964	lvx	25,8,11
965	bc	16,0,.Loop_cbc_dec8x_tail
966
967.long	0x11EFC548
968.long	0x1210C548
969.long	0x1231C548
970.long	0x1252C548
971.long	0x1273C548
972.long	0x1294C548
973.long	0x12B5C548
974
975.long	0x11EFCD48
976.long	0x1210CD48
977.long	0x1231CD48
978.long	0x1252CD48
979.long	0x1273CD48
980.long	0x1294CD48
981.long	0x12B5CD48
982
983.long	0x11EFD548
984.long	0x1210D548
985.long	0x1231D548
986.long	0x1252D548
987.long	0x1273D548
988.long	0x1294D548
989.long	0x12B5D548
990
991.long	0x11EFDD48
992.long	0x1210DD48
993.long	0x1231DD48
994.long	0x1252DD48
995.long	0x1273DD48
996.long	0x1294DD48
997.long	0x12B5DD48
998
999.long	0x11EFE548
1000.long	0x1210E548
1001.long	0x1231E548
1002.long	0x1252E548
1003.long	0x1273E548
1004.long	0x1294E548
1005.long	0x12B5E548
1006
1007.long	0x11EFED48
1008.long	0x1210ED48
1009.long	0x1231ED48
1010.long	0x1252ED48
1011.long	0x1273ED48
1012.long	0x1294ED48
1013.long	0x12B5ED48
1014
1015.long	0x11EFF548
1016	vxor	4,4,31
1017.long	0x1210F548
1018	vxor	1,1,31
1019.long	0x1231F548
1020	vxor	2,2,31
1021.long	0x1252F548
1022	vxor	3,3,31
1023.long	0x1273F548
1024	vxor	10,10,31
1025.long	0x1294F548
1026	vxor	11,11,31
1027.long	0x12B5F548
1028	vxor	12,12,31
1029
1030	cmplwi	5,32
1031	blt	.Lcbc_dec8x_one
1032	nop
1033	beq	.Lcbc_dec8x_two
1034	cmplwi	5,64
1035	blt	.Lcbc_dec8x_three
1036	nop
1037	beq	.Lcbc_dec8x_four
1038	cmplwi	5,96
1039	blt	.Lcbc_dec8x_five
1040	nop
1041	beq	.Lcbc_dec8x_six
1042
1043.Lcbc_dec8x_seven:
1044.long	0x11EF2549
1045.long	0x12100D49
1046.long	0x12311549
1047.long	0x12521D49
1048.long	0x12735549
1049.long	0x12945D49
1050.long	0x12B56549
1051	vor	4,13,13
1052
1053
1054
1055.long	0x7DE02799
1056
1057.long	0x7E082799
1058
1059.long	0x7E3A2799
1060
1061.long	0x7E5B2799
1062
1063.long	0x7E7C2799
1064
1065.long	0x7E9D2799
1066.long	0x7EBE2799
1067	addi	4,4,0x70
1068	b	.Lcbc_dec8x_done
1069
1070.align	5
1071.Lcbc_dec8x_six:
1072.long	0x12102549
1073.long	0x12311549
1074.long	0x12521D49
1075.long	0x12735549
1076.long	0x12945D49
1077.long	0x12B56549
1078	vor	4,13,13
1079
1080
1081
1082.long	0x7E002799
1083
1084.long	0x7E282799
1085
1086.long	0x7E5A2799
1087
1088.long	0x7E7B2799
1089
1090.long	0x7E9C2799
1091.long	0x7EBD2799
1092	addi	4,4,0x60
1093	b	.Lcbc_dec8x_done
1094
1095.align	5
1096.Lcbc_dec8x_five:
1097.long	0x12312549
1098.long	0x12521D49
1099.long	0x12735549
1100.long	0x12945D49
1101.long	0x12B56549
1102	vor	4,13,13
1103
1104
1105
1106.long	0x7E202799
1107
1108.long	0x7E482799
1109
1110.long	0x7E7A2799
1111
1112.long	0x7E9B2799
1113.long	0x7EBC2799
1114	addi	4,4,0x50
1115	b	.Lcbc_dec8x_done
1116
1117.align	5
1118.Lcbc_dec8x_four:
1119.long	0x12522549
1120.long	0x12735549
1121.long	0x12945D49
1122.long	0x12B56549
1123	vor	4,13,13
1124
1125
1126
1127.long	0x7E402799
1128
1129.long	0x7E682799
1130
1131.long	0x7E9A2799
1132.long	0x7EBB2799
1133	addi	4,4,0x40
1134	b	.Lcbc_dec8x_done
1135
1136.align	5
1137.Lcbc_dec8x_three:
1138.long	0x12732549
1139.long	0x12945D49
1140.long	0x12B56549
1141	vor	4,13,13
1142
1143
1144
1145.long	0x7E602799
1146
1147.long	0x7E882799
1148.long	0x7EBA2799
1149	addi	4,4,0x30
1150	b	.Lcbc_dec8x_done
1151
1152.align	5
1153.Lcbc_dec8x_two:
1154.long	0x12942549
1155.long	0x12B56549
1156	vor	4,13,13
1157
1158
1159
1160.long	0x7E802799
1161.long	0x7EA82799
1162	addi	4,4,0x20
1163	b	.Lcbc_dec8x_done
1164
1165.align	5
1166.Lcbc_dec8x_one:
1167.long	0x12B52549
1168	vor	4,13,13
1169
1170
1171.long	0x7EA02799
1172	addi	4,4,0x10
1173
1174.Lcbc_dec8x_done:
1175
1176.long	0x7C803F99
1177
1178	li	10,79
1179	li	11,95
1180	stvx	6,10,1
1181	addi	10,10,32
1182	stvx	6,11,1
1183	addi	11,11,32
1184	stvx	6,10,1
1185	addi	10,10,32
1186	stvx	6,11,1
1187	addi	11,11,32
1188	stvx	6,10,1
1189	addi	10,10,32
1190	stvx	6,11,1
1191	addi	11,11,32
1192	stvx	6,10,1
1193	addi	10,10,32
1194	stvx	6,11,1
1195	addi	11,11,32
1196
1197	mtspr	256,12
1198	lvx	20,10,1
1199	addi	10,10,32
1200	lvx	21,11,1
1201	addi	11,11,32
1202	lvx	22,10,1
1203	addi	10,10,32
1204	lvx	23,11,1
1205	addi	11,11,32
1206	lvx	24,10,1
1207	addi	10,10,32
1208	lvx	25,11,1
1209	addi	11,11,32
1210	lvx	26,10,1
1211	addi	10,10,32
1212	lvx	27,11,1
1213	addi	11,11,32
1214	lvx	28,10,1
1215	addi	10,10,32
1216	lvx	29,11,1
1217	addi	11,11,32
1218	lvx	30,10,1
1219	lvx	31,11,1
1220	ld	26,400(1)
1221	ld	27,408(1)
1222	ld	28,416(1)
1223	ld	29,424(1)
1224	ld	30,432(1)
1225	ld	31,440(1)
1226	addi	1,1,448
1227	blr
1228.long	0
1229.byte	0,12,0x04,0,0x80,6,6,0
1230.long	0
1231
1232.globl	aes_p8_ctr32_encrypt_blocks
1233.type	aes_p8_ctr32_encrypt_blocks,@function
1234.section	".opd","aw"
1235.align	3
1236aes_p8_ctr32_encrypt_blocks:
1237.quad	.aes_p8_ctr32_encrypt_blocks,.TOC.@tocbase,0
1238.previous
1239.align	5
1240.aes_p8_ctr32_encrypt_blocks:
1241	cmpldi	5,1
1242	bltlr
1243
1244	lis	0,0xfff0
1245	mfspr	12,256
1246	mtspr	256,0
1247
1248	li	10,15
1249	vxor	0,0,0
1250
1251
1252	lvx	4,0,7
1253	lvsl	6,0,7
1254	lvx	5,10,7
1255	vspltisb	11,1
1256
1257	vperm	4,4,5,6
1258	vsldoi	11,0,11,1
1259
1260	neg	11,3
1261	lvsl	10,0,6
1262	lwz	9,240(6)
1263
1264	lvsr	6,0,11
1265	lvx	5,0,3
1266	addi	3,3,15
1267
1268
1269	srwi	9,9,1
1270	li	10,16
1271	subi	9,9,1
1272
1273	cmpldi	5,8
1274	bge	_aesp8_ctr32_encrypt8x
1275
1276	lvsr	8,0,4
1277	vspltisb	9,-1
1278	lvx	7,0,4
1279	vperm	9,0,9,8
1280
1281
1282	lvx	0,0,6
1283	mtctr	9
1284	lvx	1,10,6
1285	addi	10,10,16
1286	vperm	0,0,1,10
1287	vxor	2,4,0
1288	lvx	0,10,6
1289	addi	10,10,16
1290	b	.Loop_ctr32_enc
1291
1292.align	5
1293.Loop_ctr32_enc:
1294	vperm	1,1,0,10
1295.long	0x10420D08
1296	lvx	1,10,6
1297	addi	10,10,16
1298	vperm	0,0,1,10
1299.long	0x10420508
1300	lvx	0,10,6
1301	addi	10,10,16
1302	bc	16,0,.Loop_ctr32_enc
1303
1304	vadduwm	4,4,11
1305	vor	3,5,5
1306	lvx	5,0,3
1307	addi	3,3,16
1308	subic.	5,5,1
1309
1310	vperm	1,1,0,10
1311.long	0x10420D08
1312	lvx	1,10,6
1313	vperm	3,3,5,6
1314	li	10,16
1315	vperm	1,0,1,10
1316	lvx	0,0,6
1317	vxor	3,3,1
1318.long	0x10421D09
1319
1320	lvx	1,10,6
1321	addi	10,10,16
1322	vperm	2,2,2,8
1323	vsel	3,7,2,9
1324	mtctr	9
1325	vperm	0,0,1,10
1326	vor	7,2,2
1327	vxor	2,4,0
1328	lvx	0,10,6
1329	addi	10,10,16
1330	stvx	3,0,4
1331	addi	4,4,16
1332	bne	.Loop_ctr32_enc
1333
1334	addi	4,4,-1
1335	lvx	2,0,4
1336	vsel	2,7,2,9
1337	stvx	2,0,4
1338
1339	mtspr	256,12
1340	blr
1341.long	0
1342.byte	0,12,0x14,0,0,0,6,0
1343.long	0
1344.align	5
1345_aesp8_ctr32_encrypt8x:
1346	stdu	1,-448(1)
1347	li	10,207
1348	li	11,223
1349	stvx	20,10,1
1350	addi	10,10,32
1351	stvx	21,11,1
1352	addi	11,11,32
1353	stvx	22,10,1
1354	addi	10,10,32
1355	stvx	23,11,1
1356	addi	11,11,32
1357	stvx	24,10,1
1358	addi	10,10,32
1359	stvx	25,11,1
1360	addi	11,11,32
1361	stvx	26,10,1
1362	addi	10,10,32
1363	stvx	27,11,1
1364	addi	11,11,32
1365	stvx	28,10,1
1366	addi	10,10,32
1367	stvx	29,11,1
1368	addi	11,11,32
1369	stvx	30,10,1
1370	stvx	31,11,1
1371	li	0,-1
1372	stw	12,396(1)
1373	li	8,0x10
1374	std	26,400(1)
1375	li	26,0x20
1376	std	27,408(1)
1377	li	27,0x30
1378	std	28,416(1)
1379	li	28,0x40
1380	std	29,424(1)
1381	li	29,0x50
1382	std	30,432(1)
1383	li	30,0x60
1384	std	31,440(1)
1385	li	31,0x70
1386	mtspr	256,0
1387
1388	subi	9,9,3
1389
1390	lvx	23,0,6
1391	lvx	30,8,6
1392	addi	6,6,0x20
1393	lvx	31,0,6
1394	vperm	23,23,30,10
1395	addi	11,1,64+15
1396	mtctr	9
1397
1398.Load_ctr32_enc_key:
1399	vperm	24,30,31,10
1400	lvx	30,8,6
1401	addi	6,6,0x20
1402	stvx	24,0,11
1403	vperm	25,31,30,10
1404	lvx	31,0,6
1405	stvx	25,8,11
1406	addi	11,11,0x20
1407	bc	16,0,.Load_ctr32_enc_key
1408
1409	lvx	26,8,6
1410	vperm	24,30,31,10
1411	lvx	27,26,6
1412	stvx	24,0,11
1413	vperm	25,31,26,10
1414	lvx	28,27,6
1415	stvx	25,8,11
1416	addi	11,1,64+15
1417	vperm	26,26,27,10
1418	lvx	29,28,6
1419	vperm	27,27,28,10
1420	lvx	30,29,6
1421	vperm	28,28,29,10
1422	lvx	31,30,6
1423	vperm	29,29,30,10
1424	lvx	15,31,6
1425	vperm	30,30,31,10
1426	lvx	24,0,11
1427	vperm	31,31,15,10
1428	lvx	25,8,11
1429
1430	vadduwm	7,11,11
1431	subi	3,3,15
1432	sldi	5,5,4
1433
1434	vadduwm	16,4,11
1435	vadduwm	17,4,7
1436	vxor	15,4,23
1437
1438	vadduwm	18,16,7
1439	vxor	16,16,23
1440
1441	vadduwm	19,17,7
1442	vxor	17,17,23
1443
1444	vadduwm	20,18,7
1445	vxor	18,18,23
1446
1447	vadduwm	21,19,7
1448	vxor	19,19,23
1449	vadduwm	22,20,7
1450	vxor	20,20,23
1451	vadduwm	4,21,7
1452	vxor	21,21,23
1453	vxor	22,22,23
1454
1455	mtctr	9
1456	b	.Loop_ctr32_enc8x
1457.align	5
1458.Loop_ctr32_enc8x:
1459.long	0x11EFC508
1460.long	0x1210C508
1461.long	0x1231C508
1462.long	0x1252C508
1463.long	0x1273C508
1464.long	0x1294C508
1465.long	0x12B5C508
1466.long	0x12D6C508
1467.Loop_ctr32_enc8x_middle:
1468	lvx	24,26,11
1469	addi	11,11,0x20
1470
1471.long	0x11EFCD08
1472.long	0x1210CD08
1473.long	0x1231CD08
1474.long	0x1252CD08
1475.long	0x1273CD08
1476.long	0x1294CD08
1477.long	0x12B5CD08
1478.long	0x12D6CD08
1479	lvx	25,8,11
1480	bc	16,0,.Loop_ctr32_enc8x
1481
1482	subic	11,5,256
1483.long	0x11EFC508
1484.long	0x1210C508
1485.long	0x1231C508
1486.long	0x1252C508
1487.long	0x1273C508
1488.long	0x1294C508
1489.long	0x12B5C508
1490.long	0x12D6C508
1491
1492	subfe	0,0,0
1493.long	0x11EFCD08
1494.long	0x1210CD08
1495.long	0x1231CD08
1496.long	0x1252CD08
1497.long	0x1273CD08
1498.long	0x1294CD08
1499.long	0x12B5CD08
1500.long	0x12D6CD08
1501
1502	and	0,0,11
1503	addi	11,1,64+15
1504.long	0x11EFD508
1505.long	0x1210D508
1506.long	0x1231D508
1507.long	0x1252D508
1508.long	0x1273D508
1509.long	0x1294D508
1510.long	0x12B5D508
1511.long	0x12D6D508
1512	lvx	24,0,11
1513
1514	subic	5,5,129
1515.long	0x11EFDD08
1516	addi	5,5,1
1517.long	0x1210DD08
1518.long	0x1231DD08
1519.long	0x1252DD08
1520.long	0x1273DD08
1521.long	0x1294DD08
1522.long	0x12B5DD08
1523.long	0x12D6DD08
1524	lvx	25,8,11
1525
1526.long	0x11EFE508
1527.long	0x7C001E99
1528.long	0x1210E508
1529.long	0x7C281E99
1530.long	0x1231E508
1531.long	0x7C5A1E99
1532.long	0x1252E508
1533.long	0x7C7B1E99
1534.long	0x1273E508
1535.long	0x7D5C1E99
1536.long	0x1294E508
1537.long	0x7D9D1E99
1538.long	0x12B5E508
1539.long	0x7DBE1E99
1540.long	0x12D6E508
1541.long	0x7DDF1E99
1542	addi	3,3,0x80
1543
1544.long	0x11EFED08
1545
1546.long	0x1210ED08
1547
1548.long	0x1231ED08
1549
1550.long	0x1252ED08
1551
1552.long	0x1273ED08
1553
1554.long	0x1294ED08
1555
1556.long	0x12B5ED08
1557
1558.long	0x12D6ED08
1559
1560
1561	add	3,3,0
1562
1563
1564
1565	subfe.	0,0,0
1566.long	0x11EFF508
1567	vxor	0,0,31
1568.long	0x1210F508
1569	vxor	1,1,31
1570.long	0x1231F508
1571	vxor	2,2,31
1572.long	0x1252F508
1573	vxor	3,3,31
1574.long	0x1273F508
1575	vxor	10,10,31
1576.long	0x1294F508
1577	vxor	12,12,31
1578.long	0x12B5F508
1579	vxor	13,13,31
1580.long	0x12D6F508
1581	vxor	14,14,31
1582
1583	bne	.Lctr32_enc8x_break
1584
1585.long	0x100F0509
1586.long	0x10300D09
1587	vadduwm	16,4,11
1588.long	0x10511509
1589	vadduwm	17,4,7
1590	vxor	15,4,23
1591.long	0x10721D09
1592	vadduwm	18,16,7
1593	vxor	16,16,23
1594.long	0x11535509
1595	vadduwm	19,17,7
1596	vxor	17,17,23
1597.long	0x11946509
1598	vadduwm	20,18,7
1599	vxor	18,18,23
1600.long	0x11B56D09
1601	vadduwm	21,19,7
1602	vxor	19,19,23
1603.long	0x11D67509
1604	vadduwm	22,20,7
1605	vxor	20,20,23
1606
1607	vadduwm	4,21,7
1608	vxor	21,21,23
1609
1610	vxor	22,22,23
1611	mtctr	9
1612
1613.long	0x11EFC508
1614.long	0x7C002799
1615
1616.long	0x1210C508
1617.long	0x7C282799
1618
1619.long	0x1231C508
1620.long	0x7C5A2799
1621
1622.long	0x1252C508
1623.long	0x7C7B2799
1624
1625.long	0x1273C508
1626.long	0x7D5C2799
1627
1628.long	0x1294C508
1629.long	0x7D9D2799
1630
1631.long	0x12B5C508
1632.long	0x7DBE2799
1633.long	0x12D6C508
1634.long	0x7DDF2799
1635	addi	4,4,0x80
1636
1637	b	.Loop_ctr32_enc8x_middle
1638
1639.align	5
1640.Lctr32_enc8x_break:
1641	cmpwi	5,-0x60
1642	blt	.Lctr32_enc8x_one
1643	nop
1644	beq	.Lctr32_enc8x_two
1645	cmpwi	5,-0x40
1646	blt	.Lctr32_enc8x_three
1647	nop
1648	beq	.Lctr32_enc8x_four
1649	cmpwi	5,-0x20
1650	blt	.Lctr32_enc8x_five
1651	nop
1652	beq	.Lctr32_enc8x_six
1653	cmpwi	5,0x00
1654	blt	.Lctr32_enc8x_seven
1655
1656.Lctr32_enc8x_eight:
1657.long	0x11EF0509
1658.long	0x12100D09
1659.long	0x12311509
1660.long	0x12521D09
1661.long	0x12735509
1662.long	0x12946509
1663.long	0x12B56D09
1664.long	0x12D67509
1665
1666
1667
1668.long	0x7DE02799
1669
1670.long	0x7E082799
1671
1672.long	0x7E3A2799
1673
1674.long	0x7E5B2799
1675
1676.long	0x7E7C2799
1677
1678.long	0x7E9D2799
1679
1680.long	0x7EBE2799
1681.long	0x7EDF2799
1682	addi	4,4,0x80
1683	b	.Lctr32_enc8x_done
1684
1685.align	5
1686.Lctr32_enc8x_seven:
1687.long	0x11EF0D09
1688.long	0x12101509
1689.long	0x12311D09
1690.long	0x12525509
1691.long	0x12736509
1692.long	0x12946D09
1693.long	0x12B57509
1694
1695
1696
1697.long	0x7DE02799
1698
1699.long	0x7E082799
1700
1701.long	0x7E3A2799
1702
1703.long	0x7E5B2799
1704
1705.long	0x7E7C2799
1706
1707.long	0x7E9D2799
1708.long	0x7EBE2799
1709	addi	4,4,0x70
1710	b	.Lctr32_enc8x_done
1711
1712.align	5
1713.Lctr32_enc8x_six:
1714.long	0x11EF1509
1715.long	0x12101D09
1716.long	0x12315509
1717.long	0x12526509
1718.long	0x12736D09
1719.long	0x12947509
1720
1721
1722
1723.long	0x7DE02799
1724
1725.long	0x7E082799
1726
1727.long	0x7E3A2799
1728
1729.long	0x7E5B2799
1730
1731.long	0x7E7C2799
1732.long	0x7E9D2799
1733	addi	4,4,0x60
1734	b	.Lctr32_enc8x_done
1735
1736.align	5
1737.Lctr32_enc8x_five:
1738.long	0x11EF1D09
1739.long	0x12105509
1740.long	0x12316509
1741.long	0x12526D09
1742.long	0x12737509
1743
1744
1745
1746.long	0x7DE02799
1747
1748.long	0x7E082799
1749
1750.long	0x7E3A2799
1751
1752.long	0x7E5B2799
1753.long	0x7E7C2799
1754	addi	4,4,0x50
1755	b	.Lctr32_enc8x_done
1756
1757.align	5
1758.Lctr32_enc8x_four:
1759.long	0x11EF5509
1760.long	0x12106509
1761.long	0x12316D09
1762.long	0x12527509
1763
1764
1765
1766.long	0x7DE02799
1767
1768.long	0x7E082799
1769
1770.long	0x7E3A2799
1771.long	0x7E5B2799
1772	addi	4,4,0x40
1773	b	.Lctr32_enc8x_done
1774
1775.align	5
1776.Lctr32_enc8x_three:
1777.long	0x11EF6509
1778.long	0x12106D09
1779.long	0x12317509
1780
1781
1782
1783.long	0x7DE02799
1784
1785.long	0x7E082799
1786.long	0x7E3A2799
1787	addi	4,4,0x30
1788	b	.Lctr32_enc8x_done
1789
1790.align	5
1791.Lctr32_enc8x_two:
1792.long	0x11EF6D09
1793.long	0x12107509
1794
1795
1796
1797.long	0x7DE02799
1798.long	0x7E082799
1799	addi	4,4,0x20
1800	b	.Lctr32_enc8x_done
1801
1802.align	5
1803.Lctr32_enc8x_one:
1804.long	0x11EF7509
1805
1806
1807.long	0x7DE02799
1808	addi	4,4,0x10
1809
1810.Lctr32_enc8x_done:
1811	li	10,79
1812	li	11,95
1813	stvx	6,10,1
1814	addi	10,10,32
1815	stvx	6,11,1
1816	addi	11,11,32
1817	stvx	6,10,1
1818	addi	10,10,32
1819	stvx	6,11,1
1820	addi	11,11,32
1821	stvx	6,10,1
1822	addi	10,10,32
1823	stvx	6,11,1
1824	addi	11,11,32
1825	stvx	6,10,1
1826	addi	10,10,32
1827	stvx	6,11,1
1828	addi	11,11,32
1829
1830	mtspr	256,12
1831	lvx	20,10,1
1832	addi	10,10,32
1833	lvx	21,11,1
1834	addi	11,11,32
1835	lvx	22,10,1
1836	addi	10,10,32
1837	lvx	23,11,1
1838	addi	11,11,32
1839	lvx	24,10,1
1840	addi	10,10,32
1841	lvx	25,11,1
1842	addi	11,11,32
1843	lvx	26,10,1
1844	addi	10,10,32
1845	lvx	27,11,1
1846	addi	11,11,32
1847	lvx	28,10,1
1848	addi	10,10,32
1849	lvx	29,11,1
1850	addi	11,11,32
1851	lvx	30,10,1
1852	lvx	31,11,1
1853	ld	26,400(1)
1854	ld	27,408(1)
1855	ld	28,416(1)
1856	ld	29,424(1)
1857	ld	30,432(1)
1858	ld	31,440(1)
1859	addi	1,1,448
1860	blr
1861.long	0
1862.byte	0,12,0x04,0,0x80,6,6,0
1863.long	0
1864
1865.globl	aes_p8_xts_encrypt
1866.type	aes_p8_xts_encrypt,@function
1867.section	".opd","aw"
1868.align	3
1869aes_p8_xts_encrypt:
1870.quad	.aes_p8_xts_encrypt,.TOC.@tocbase,0
1871.previous
1872.align	5
1873.aes_p8_xts_encrypt:
1874	mr	10,3
1875	li	3,-1
1876	cmpldi	5,16
1877	bltlr
1878
1879	lis	0,0xfff0
1880	mfspr	12,256
1881	li	11,0
1882	mtspr	256,0
1883
1884	vspltisb	9,0x07
1885
1886
1887
1888
1889	li	3,15
1890	lvx	8,0,8
1891	lvsl	5,0,8
1892	lvx	4,3,8
1893
1894	vperm	8,8,4,5
1895
1896	neg	11,10
1897	lvsr	5,0,11
1898	lvx	2,0,10
1899	addi	10,10,15
1900
1901
1902	cmpldi	7,0
1903	beq	.Lxts_enc_no_key2
1904
1905	lvsl	7,0,7
1906	lwz	9,240(7)
1907	srwi	9,9,1
1908	subi	9,9,1
1909	li	3,16
1910
1911	lvx	0,0,7
1912	lvx	1,3,7
1913	addi	3,3,16
1914	vperm	0,0,1,7
1915	vxor	8,8,0
1916	lvx	0,3,7
1917	addi	3,3,16
1918	mtctr	9
1919
1920.Ltweak_xts_enc:
1921	vperm	1,1,0,7
1922.long	0x11080D08
1923	lvx	1,3,7
1924	addi	3,3,16
1925	vperm	0,0,1,7
1926.long	0x11080508
1927	lvx	0,3,7
1928	addi	3,3,16
1929	bc	16,0,.Ltweak_xts_enc
1930
1931	vperm	1,1,0,7
1932.long	0x11080D08
1933	lvx	1,3,7
1934	vperm	0,0,1,7
1935.long	0x11080509
1936
1937	li	8,0
1938	b	.Lxts_enc
1939
1940.Lxts_enc_no_key2:
1941	li	3,-16
1942	and	5,5,3
1943
1944
1945.Lxts_enc:
1946	lvx	4,0,10
1947	addi	10,10,16
1948
1949	lvsl	7,0,6
1950	lwz	9,240(6)
1951	srwi	9,9,1
1952	subi	9,9,1
1953	li	3,16
1954
1955	vslb	10,9,9
1956	vor	10,10,9
1957	vspltisb	11,1
1958	vsldoi	10,10,11,15
1959
1960	cmpldi	5,96
1961	bge	_aesp8_xts_encrypt6x
1962
1963	andi.	7,5,15
1964	subic	0,5,32
1965	subi	7,7,16
1966	subfe	0,0,0
1967	and	0,0,7
1968	add	10,10,0
1969
1970	lvx	0,0,6
1971	lvx	1,3,6
1972	addi	3,3,16
1973	vperm	2,2,4,5
1974	vperm	0,0,1,7
1975	vxor	2,2,8
1976	vxor	2,2,0
1977	lvx	0,3,6
1978	addi	3,3,16
1979	mtctr	9
1980	b	.Loop_xts_enc
1981
1982.align	5
1983.Loop_xts_enc:
1984	vperm	1,1,0,7
1985.long	0x10420D08
1986	lvx	1,3,6
1987	addi	3,3,16
1988	vperm	0,0,1,7
1989.long	0x10420508
1990	lvx	0,3,6
1991	addi	3,3,16
1992	bc	16,0,.Loop_xts_enc
1993
1994	vperm	1,1,0,7
1995.long	0x10420D08
1996	lvx	1,3,6
1997	li	3,16
1998	vperm	0,0,1,7
1999	vxor	0,0,8
2000.long	0x10620509
2001
2002
2003	nop
2004
2005.long	0x7C602799
2006	addi	4,4,16
2007
2008	subic.	5,5,16
2009	beq	.Lxts_enc_done
2010
2011	vor	2,4,4
2012	lvx	4,0,10
2013	addi	10,10,16
2014	lvx	0,0,6
2015	lvx	1,3,6
2016	addi	3,3,16
2017
2018	subic	0,5,32
2019	subfe	0,0,0
2020	and	0,0,7
2021	add	10,10,0
2022
2023	vsrab	11,8,9
2024	vaddubm	8,8,8
2025	vsldoi	11,11,11,15
2026	vand	11,11,10
2027	vxor	8,8,11
2028
2029	vperm	2,2,4,5
2030	vperm	0,0,1,7
2031	vxor	2,2,8
2032	vxor	3,3,0
2033	vxor	2,2,0
2034	lvx	0,3,6
2035	addi	3,3,16
2036
2037	mtctr	9
2038	cmpldi	5,16
2039	bge	.Loop_xts_enc
2040
2041	vxor	3,3,8
2042	lvsr	5,0,5
2043	vxor	4,4,4
2044	vspltisb	11,-1
2045	vperm	4,4,11,5
2046	vsel	2,2,3,4
2047
2048	subi	11,4,17
2049	subi	4,4,16
2050	mtctr	5
2051	li	5,16
2052.Loop_xts_enc_steal:
2053	lbzu	0,1(11)
2054	stb	0,16(11)
2055	bc	16,0,.Loop_xts_enc_steal
2056
2057	mtctr	9
2058	b	.Loop_xts_enc
2059
2060.Lxts_enc_done:
2061	cmpldi	8,0
2062	beq	.Lxts_enc_ret
2063
2064	vsrab	11,8,9
2065	vaddubm	8,8,8
2066	vsldoi	11,11,11,15
2067	vand	11,11,10
2068	vxor	8,8,11
2069
2070
2071.long	0x7D004799
2072
2073.Lxts_enc_ret:
2074	mtspr	256,12
2075	li	3,0
2076	blr
2077.long	0
2078.byte	0,12,0x04,0,0x80,6,6,0
2079.long	0
2080
2081
2082.globl	aes_p8_xts_decrypt
2083.type	aes_p8_xts_decrypt,@function
2084.section	".opd","aw"
2085.align	3
2086aes_p8_xts_decrypt:
2087.quad	.aes_p8_xts_decrypt,.TOC.@tocbase,0
2088.previous
2089.align	5
2090.aes_p8_xts_decrypt:
2091	mr	10,3
2092	li	3,-1
2093	cmpldi	5,16
2094	bltlr
2095
2096	lis	0,0xfff8
2097	mfspr	12,256
2098	li	11,0
2099	mtspr	256,0
2100
2101	andi.	0,5,15
2102	neg	0,0
2103	andi.	0,0,16
2104	sub	5,5,0
2105
2106	vspltisb	9,0x07
2107
2108
2109
2110
2111	li	3,15
2112	lvx	8,0,8
2113	lvsl	5,0,8
2114	lvx	4,3,8
2115
2116	vperm	8,8,4,5
2117
2118	neg	11,10
2119	lvsr	5,0,11
2120	lvx	2,0,10
2121	addi	10,10,15
2122
2123
2124	cmpldi	7,0
2125	beq	.Lxts_dec_no_key2
2126
2127	lvsl	7,0,7
2128	lwz	9,240(7)
2129	srwi	9,9,1
2130	subi	9,9,1
2131	li	3,16
2132
2133	lvx	0,0,7
2134	lvx	1,3,7
2135	addi	3,3,16
2136	vperm	0,0,1,7
2137	vxor	8,8,0
2138	lvx	0,3,7
2139	addi	3,3,16
2140	mtctr	9
2141
2142.Ltweak_xts_dec:
2143	vperm	1,1,0,7
2144.long	0x11080D08
2145	lvx	1,3,7
2146	addi	3,3,16
2147	vperm	0,0,1,7
2148.long	0x11080508
2149	lvx	0,3,7
2150	addi	3,3,16
2151	bc	16,0,.Ltweak_xts_dec
2152
2153	vperm	1,1,0,7
2154.long	0x11080D08
2155	lvx	1,3,7
2156	vperm	0,0,1,7
2157.long	0x11080509
2158
2159	li	8,0
2160	b	.Lxts_dec
2161
2162.Lxts_dec_no_key2:
2163	neg	3,5
2164	andi.	3,3,15
2165	add	5,5,3
2166
2167
2168.Lxts_dec:
2169	lvx	4,0,10
2170	addi	10,10,16
2171
2172	lvsl	7,0,6
2173	lwz	9,240(6)
2174	srwi	9,9,1
2175	subi	9,9,1
2176	li	3,16
2177
2178	vslb	10,9,9
2179	vor	10,10,9
2180	vspltisb	11,1
2181	vsldoi	10,10,11,15
2182
2183	cmpldi	5,96
2184	bge	_aesp8_xts_decrypt6x
2185
2186	lvx	0,0,6
2187	lvx	1,3,6
2188	addi	3,3,16
2189	vperm	2,2,4,5
2190	vperm	0,0,1,7
2191	vxor	2,2,8
2192	vxor	2,2,0
2193	lvx	0,3,6
2194	addi	3,3,16
2195	mtctr	9
2196
2197	cmpldi	5,16
2198	blt	.Ltail_xts_dec
2199	b	.Loop_xts_dec
2200
2201.align	5
2202.Loop_xts_dec:
2203	vperm	1,1,0,7
2204.long	0x10420D48
2205	lvx	1,3,6
2206	addi	3,3,16
2207	vperm	0,0,1,7
2208.long	0x10420548
2209	lvx	0,3,6
2210	addi	3,3,16
2211	bc	16,0,.Loop_xts_dec
2212
2213	vperm	1,1,0,7
2214.long	0x10420D48
2215	lvx	1,3,6
2216	li	3,16
2217	vperm	0,0,1,7
2218	vxor	0,0,8
2219.long	0x10620549
2220
2221
2222	nop
2223
2224.long	0x7C602799
2225	addi	4,4,16
2226
2227	subic.	5,5,16
2228	beq	.Lxts_dec_done
2229
2230	vor	2,4,4
2231	lvx	4,0,10
2232	addi	10,10,16
2233	lvx	0,0,6
2234	lvx	1,3,6
2235	addi	3,3,16
2236
2237	vsrab	11,8,9
2238	vaddubm	8,8,8
2239	vsldoi	11,11,11,15
2240	vand	11,11,10
2241	vxor	8,8,11
2242
2243	vperm	2,2,4,5
2244	vperm	0,0,1,7
2245	vxor	2,2,8
2246	vxor	2,2,0
2247	lvx	0,3,6
2248	addi	3,3,16
2249
2250	mtctr	9
2251	cmpldi	5,16
2252	bge	.Loop_xts_dec
2253
2254.Ltail_xts_dec:
2255	vsrab	11,8,9
2256	vaddubm	12,8,8
2257	vsldoi	11,11,11,15
2258	vand	11,11,10
2259	vxor	12,12,11
2260
2261	subi	10,10,16
2262	add	10,10,5
2263
2264	vxor	2,2,8
2265	vxor	2,2,12
2266
2267.Loop_xts_dec_short:
2268	vperm	1,1,0,7
2269.long	0x10420D48
2270	lvx	1,3,6
2271	addi	3,3,16
2272	vperm	0,0,1,7
2273.long	0x10420548
2274	lvx	0,3,6
2275	addi	3,3,16
2276	bc	16,0,.Loop_xts_dec_short
2277
2278	vperm	1,1,0,7
2279.long	0x10420D48
2280	lvx	1,3,6
2281	li	3,16
2282	vperm	0,0,1,7
2283	vxor	0,0,12
2284.long	0x10620549
2285
2286
2287	nop
2288
2289.long	0x7C602799
2290
2291	vor	2,4,4
2292	lvx	4,0,10
2293
2294	lvx	0,0,6
2295	lvx	1,3,6
2296	addi	3,3,16
2297	vperm	2,2,4,5
2298	vperm	0,0,1,7
2299
2300	lvsr	5,0,5
2301	vxor	4,4,4
2302	vspltisb	11,-1
2303	vperm	4,4,11,5
2304	vsel	2,2,3,4
2305
2306	vxor	0,0,8
2307	vxor	2,2,0
2308	lvx	0,3,6
2309	addi	3,3,16
2310
2311	subi	11,4,1
2312	mtctr	5
2313	li	5,16
2314.Loop_xts_dec_steal:
2315	lbzu	0,1(11)
2316	stb	0,16(11)
2317	bc	16,0,.Loop_xts_dec_steal
2318
2319	mtctr	9
2320	b	.Loop_xts_dec
2321
2322.Lxts_dec_done:
2323	cmpldi	8,0
2324	beq	.Lxts_dec_ret
2325
2326	vsrab	11,8,9
2327	vaddubm	8,8,8
2328	vsldoi	11,11,11,15
2329	vand	11,11,10
2330	vxor	8,8,11
2331
2332
2333.long	0x7D004799
2334
2335.Lxts_dec_ret:
2336	mtspr	256,12
2337	li	3,0
2338	blr
2339.long	0
2340.byte	0,12,0x04,0,0x80,6,6,0
2341.long	0
2342
2343.align	5
2344_aesp8_xts_encrypt6x:
2345	stdu	1,-448(1)
2346	mflr	11
2347	li	7,207
2348	li	3,223
2349	std	11,464(1)
2350	stvx	20,7,1
2351	addi	7,7,32
2352	stvx	21,3,1
2353	addi	3,3,32
2354	stvx	22,7,1
2355	addi	7,7,32
2356	stvx	23,3,1
2357	addi	3,3,32
2358	stvx	24,7,1
2359	addi	7,7,32
2360	stvx	25,3,1
2361	addi	3,3,32
2362	stvx	26,7,1
2363	addi	7,7,32
2364	stvx	27,3,1
2365	addi	3,3,32
2366	stvx	28,7,1
2367	addi	7,7,32
2368	stvx	29,3,1
2369	addi	3,3,32
2370	stvx	30,7,1
2371	stvx	31,3,1
2372	li	0,-1
2373	stw	12,396(1)
2374	li	3,0x10
2375	std	26,400(1)
2376	li	26,0x20
2377	std	27,408(1)
2378	li	27,0x30
2379	std	28,416(1)
2380	li	28,0x40
2381	std	29,424(1)
2382	li	29,0x50
2383	std	30,432(1)
2384	li	30,0x60
2385	std	31,440(1)
2386	li	31,0x70
2387	mtspr	256,0
2388
2389	subi	9,9,3
2390
2391	lvx	23,0,6
2392	lvx	30,3,6
2393	addi	6,6,0x20
2394	lvx	31,0,6
2395	vperm	23,23,30,7
2396	addi	7,1,64+15
2397	mtctr	9
2398
2399.Load_xts_enc_key:
2400	vperm	24,30,31,7
2401	lvx	30,3,6
2402	addi	6,6,0x20
2403	stvx	24,0,7
2404	vperm	25,31,30,7
2405	lvx	31,0,6
2406	stvx	25,3,7
2407	addi	7,7,0x20
2408	bc	16,0,.Load_xts_enc_key
2409
2410	lvx	26,3,6
2411	vperm	24,30,31,7
2412	lvx	27,26,6
2413	stvx	24,0,7
2414	vperm	25,31,26,7
2415	lvx	28,27,6
2416	stvx	25,3,7
2417	addi	7,1,64+15
2418	vperm	26,26,27,7
2419	lvx	29,28,6
2420	vperm	27,27,28,7
2421	lvx	30,29,6
2422	vperm	28,28,29,7
2423	lvx	31,30,6
2424	vperm	29,29,30,7
2425	lvx	22,31,6
2426	vperm	30,30,31,7
2427	lvx	24,0,7
2428	vperm	31,31,22,7
2429	lvx	25,3,7
2430
2431	vperm	0,2,4,5
2432	subi	10,10,31
2433	vxor	17,8,23
2434	vsrab	11,8,9
2435	vaddubm	8,8,8
2436	vsldoi	11,11,11,15
2437	vand	11,11,10
2438	vxor	7,0,17
2439	vxor	8,8,11
2440
2441.long	0x7C235699
2442	vxor	18,8,23
2443	vsrab	11,8,9
2444	vaddubm	8,8,8
2445	vsldoi	11,11,11,15
2446
2447	vand	11,11,10
2448	vxor	12,1,18
2449	vxor	8,8,11
2450
2451.long	0x7C5A5699
2452	andi.	31,5,15
2453	vxor	19,8,23
2454	vsrab	11,8,9
2455	vaddubm	8,8,8
2456	vsldoi	11,11,11,15
2457
2458	vand	11,11,10
2459	vxor	13,2,19
2460	vxor	8,8,11
2461
2462.long	0x7C7B5699
2463	sub	5,5,31
2464	vxor	20,8,23
2465	vsrab	11,8,9
2466	vaddubm	8,8,8
2467	vsldoi	11,11,11,15
2468
2469	vand	11,11,10
2470	vxor	14,3,20
2471	vxor	8,8,11
2472
2473.long	0x7C9C5699
2474	subi	5,5,0x60
2475	vxor	21,8,23
2476	vsrab	11,8,9
2477	vaddubm	8,8,8
2478	vsldoi	11,11,11,15
2479
2480	vand	11,11,10
2481	vxor	15,4,21
2482	vxor	8,8,11
2483
2484.long	0x7CBD5699
2485	addi	10,10,0x60
2486	vxor	22,8,23
2487	vsrab	11,8,9
2488	vaddubm	8,8,8
2489	vsldoi	11,11,11,15
2490
2491	vand	11,11,10
2492	vxor	16,5,22
2493	vxor	8,8,11
2494
2495	vxor	31,31,23
2496	mtctr	9
2497	b	.Loop_xts_enc6x
2498
2499.align	5
2500.Loop_xts_enc6x:
2501.long	0x10E7C508
2502.long	0x118CC508
2503.long	0x11ADC508
2504.long	0x11CEC508
2505.long	0x11EFC508
2506.long	0x1210C508
2507	lvx	24,26,7
2508	addi	7,7,0x20
2509
2510.long	0x10E7CD08
2511.long	0x118CCD08
2512.long	0x11ADCD08
2513.long	0x11CECD08
2514.long	0x11EFCD08
2515.long	0x1210CD08
2516	lvx	25,3,7
2517	bc	16,0,.Loop_xts_enc6x
2518
2519	subic	5,5,96
2520	vxor	0,17,31
2521.long	0x10E7C508
2522.long	0x118CC508
2523	vsrab	11,8,9
2524	vxor	17,8,23
2525	vaddubm	8,8,8
2526.long	0x11ADC508
2527.long	0x11CEC508
2528	vsldoi	11,11,11,15
2529.long	0x11EFC508
2530.long	0x1210C508
2531
2532	subfe.	0,0,0
2533	vand	11,11,10
2534.long	0x10E7CD08
2535.long	0x118CCD08
2536	vxor	8,8,11
2537.long	0x11ADCD08
2538.long	0x11CECD08
2539	vxor	1,18,31
2540	vsrab	11,8,9
2541	vxor	18,8,23
2542.long	0x11EFCD08
2543.long	0x1210CD08
2544
2545	and	0,0,5
2546	vaddubm	8,8,8
2547	vsldoi	11,11,11,15
2548.long	0x10E7D508
2549.long	0x118CD508
2550	vand	11,11,10
2551.long	0x11ADD508
2552.long	0x11CED508
2553	vxor	8,8,11
2554.long	0x11EFD508
2555.long	0x1210D508
2556
2557	add	10,10,0
2558
2559
2560
2561	vxor	2,19,31
2562	vsrab	11,8,9
2563	vxor	19,8,23
2564	vaddubm	8,8,8
2565.long	0x10E7DD08
2566.long	0x118CDD08
2567	vsldoi	11,11,11,15
2568.long	0x11ADDD08
2569.long	0x11CEDD08
2570	vand	11,11,10
2571.long	0x11EFDD08
2572.long	0x1210DD08
2573
2574	addi	7,1,64+15
2575	vxor	8,8,11
2576.long	0x10E7E508
2577.long	0x118CE508
2578	vxor	3,20,31
2579	vsrab	11,8,9
2580	vxor	20,8,23
2581.long	0x11ADE508
2582.long	0x11CEE508
2583	vaddubm	8,8,8
2584	vsldoi	11,11,11,15
2585.long	0x11EFE508
2586.long	0x1210E508
2587	lvx	24,0,7
2588	vand	11,11,10
2589
2590.long	0x10E7ED08
2591.long	0x118CED08
2592	vxor	8,8,11
2593.long	0x11ADED08
2594.long	0x11CEED08
2595	vxor	4,21,31
2596	vsrab	11,8,9
2597	vxor	21,8,23
2598.long	0x11EFED08
2599.long	0x1210ED08
2600	lvx	25,3,7
2601	vaddubm	8,8,8
2602	vsldoi	11,11,11,15
2603
2604.long	0x10E7F508
2605.long	0x118CF508
2606	vand	11,11,10
2607.long	0x11ADF508
2608.long	0x11CEF508
2609	vxor	8,8,11
2610.long	0x11EFF508
2611.long	0x1210F508
2612	vxor	5,22,31
2613	vsrab	11,8,9
2614	vxor	22,8,23
2615
2616.long	0x10E70509
2617.long	0x7C005699
2618	vaddubm	8,8,8
2619	vsldoi	11,11,11,15
2620.long	0x118C0D09
2621.long	0x7C235699
2622.long	0x11AD1509
2623
2624.long	0x7C5A5699
2625	vand	11,11,10
2626.long	0x11CE1D09
2627
2628.long	0x7C7B5699
2629.long	0x11EF2509
2630
2631.long	0x7C9C5699
2632	vxor	8,8,11
2633.long	0x11702D09
2634
2635
2636.long	0x7CBD5699
2637	addi	10,10,0x60
2638
2639
2640
2641
2642
2643.long	0x7CE02799
2644	vxor	7,0,17
2645
2646.long	0x7D832799
2647	vxor	12,1,18
2648
2649.long	0x7DBA2799
2650	vxor	13,2,19
2651
2652.long	0x7DDB2799
2653	vxor	14,3,20
2654
2655.long	0x7DFC2799
2656	vxor	15,4,21
2657
2658.long	0x7D7D2799
2659	vxor	16,5,22
2660	addi	4,4,0x60
2661
2662	mtctr	9
2663	beq	.Loop_xts_enc6x
2664
2665	addic.	5,5,0x60
2666	beq	.Lxts_enc6x_zero
2667	cmpwi	5,0x20
2668	blt	.Lxts_enc6x_one
2669	nop
2670	beq	.Lxts_enc6x_two
2671	cmpwi	5,0x40
2672	blt	.Lxts_enc6x_three
2673	nop
2674	beq	.Lxts_enc6x_four
2675
2676.Lxts_enc6x_five:
2677	vxor	7,1,17
2678	vxor	12,2,18
2679	vxor	13,3,19
2680	vxor	14,4,20
2681	vxor	15,5,21
2682
2683	bl	_aesp8_xts_enc5x
2684
2685
2686	vor	17,22,22
2687
2688.long	0x7CE02799
2689
2690.long	0x7D832799
2691
2692.long	0x7DBA2799
2693	vxor	11,15,22
2694
2695.long	0x7DDB2799
2696.long	0x7DFC2799
2697	addi	4,4,0x50
2698	bne	.Lxts_enc6x_steal
2699	b	.Lxts_enc6x_done
2700
2701.align	4
2702.Lxts_enc6x_four:
2703	vxor	7,2,17
2704	vxor	12,3,18
2705	vxor	13,4,19
2706	vxor	14,5,20
2707	vxor	15,15,15
2708
2709	bl	_aesp8_xts_enc5x
2710
2711
2712	vor	17,21,21
2713
2714.long	0x7CE02799
2715
2716.long	0x7D832799
2717	vxor	11,14,21
2718
2719.long	0x7DBA2799
2720.long	0x7DDB2799
2721	addi	4,4,0x40
2722	bne	.Lxts_enc6x_steal
2723	b	.Lxts_enc6x_done
2724
2725.align	4
2726.Lxts_enc6x_three:
2727	vxor	7,3,17
2728	vxor	12,4,18
2729	vxor	13,5,19
2730	vxor	14,14,14
2731	vxor	15,15,15
2732
2733	bl	_aesp8_xts_enc5x
2734
2735
2736	vor	17,20,20
2737
2738.long	0x7CE02799
2739	vxor	11,13,20
2740
2741.long	0x7D832799
2742.long	0x7DBA2799
2743	addi	4,4,0x30
2744	bne	.Lxts_enc6x_steal
2745	b	.Lxts_enc6x_done
2746
2747.align	4
2748.Lxts_enc6x_two:
2749	vxor	7,4,17
2750	vxor	12,5,18
2751	vxor	13,13,13
2752	vxor	14,14,14
2753	vxor	15,15,15
2754
2755	bl	_aesp8_xts_enc5x
2756
2757
2758	vor	17,19,19
2759	vxor	11,12,19
2760
2761.long	0x7CE02799
2762.long	0x7D832799
2763	addi	4,4,0x20
2764	bne	.Lxts_enc6x_steal
2765	b	.Lxts_enc6x_done
2766
2767.align	4
2768.Lxts_enc6x_one:
2769	vxor	7,5,17
2770	nop
2771.Loop_xts_enc1x:
2772.long	0x10E7C508
2773	lvx	24,26,7
2774	addi	7,7,0x20
2775
2776.long	0x10E7CD08
2777	lvx	25,3,7
2778	bc	16,0,.Loop_xts_enc1x
2779
2780	add	10,10,31
2781	cmpwi	31,0
2782.long	0x10E7C508
2783
2784	subi	10,10,16
2785.long	0x10E7CD08
2786
2787	lvsr	5,0,31
2788.long	0x10E7D508
2789
2790.long	0x7C005699
2791.long	0x10E7DD08
2792
2793	addi	7,1,64+15
2794.long	0x10E7E508
2795	lvx	24,0,7
2796
2797.long	0x10E7ED08
2798	lvx	25,3,7
2799	vxor	17,17,31
2800
2801
2802.long	0x10E7F508
2803
2804	vperm	0,0,0,5
2805.long	0x10E78D09
2806
2807	vor	17,18,18
2808	vxor	11,7,18
2809
2810.long	0x7CE02799
2811	addi	4,4,0x10
2812	bne	.Lxts_enc6x_steal
2813	b	.Lxts_enc6x_done
2814
2815.align	4
2816.Lxts_enc6x_zero:
2817	cmpwi	31,0
2818	beq	.Lxts_enc6x_done
2819
2820	add	10,10,31
2821	subi	10,10,16
2822.long	0x7C005699
2823	lvsr	5,0,31
2824
2825	vperm	0,0,0,5
2826	vxor	11,11,17
2827.Lxts_enc6x_steal:
2828	vxor	0,0,17
2829	vxor	7,7,7
2830	vspltisb	12,-1
2831	vperm	7,7,12,5
2832	vsel	7,0,11,7
2833
2834	subi	30,4,17
2835	subi	4,4,16
2836	mtctr	31
2837.Loop_xts_enc6x_steal:
2838	lbzu	0,1(30)
2839	stb	0,16(30)
2840	bc	16,0,.Loop_xts_enc6x_steal
2841
2842	li	31,0
2843	mtctr	9
2844	b	.Loop_xts_enc1x
2845
2846.align	4
2847.Lxts_enc6x_done:
2848	cmpldi	8,0
2849	beq	.Lxts_enc6x_ret
2850
2851	vxor	8,17,23
2852
2853.long	0x7D004799
2854
2855.Lxts_enc6x_ret:
2856	mtlr	11
2857	li	10,79
2858	li	11,95
2859	stvx	9,10,1
2860	addi	10,10,32
2861	stvx	9,11,1
2862	addi	11,11,32
2863	stvx	9,10,1
2864	addi	10,10,32
2865	stvx	9,11,1
2866	addi	11,11,32
2867	stvx	9,10,1
2868	addi	10,10,32
2869	stvx	9,11,1
2870	addi	11,11,32
2871	stvx	9,10,1
2872	addi	10,10,32
2873	stvx	9,11,1
2874	addi	11,11,32
2875
2876	mtspr	256,12
2877	lvx	20,10,1
2878	addi	10,10,32
2879	lvx	21,11,1
2880	addi	11,11,32
2881	lvx	22,10,1
2882	addi	10,10,32
2883	lvx	23,11,1
2884	addi	11,11,32
2885	lvx	24,10,1
2886	addi	10,10,32
2887	lvx	25,11,1
2888	addi	11,11,32
2889	lvx	26,10,1
2890	addi	10,10,32
2891	lvx	27,11,1
2892	addi	11,11,32
2893	lvx	28,10,1
2894	addi	10,10,32
2895	lvx	29,11,1
2896	addi	11,11,32
2897	lvx	30,10,1
2898	lvx	31,11,1
2899	ld	26,400(1)
2900	ld	27,408(1)
2901	ld	28,416(1)
2902	ld	29,424(1)
2903	ld	30,432(1)
2904	ld	31,440(1)
2905	addi	1,1,448
2906	blr
2907.long	0
2908.byte	0,12,0x04,1,0x80,6,6,0
2909.long	0
2910
2911.align	5
2912_aesp8_xts_enc5x:
2913.long	0x10E7C508
2914.long	0x118CC508
2915.long	0x11ADC508
2916.long	0x11CEC508
2917.long	0x11EFC508
2918	lvx	24,26,7
2919	addi	7,7,0x20
2920
2921.long	0x10E7CD08
2922.long	0x118CCD08
2923.long	0x11ADCD08
2924.long	0x11CECD08
2925.long	0x11EFCD08
2926	lvx	25,3,7
2927	bc	16,0,_aesp8_xts_enc5x
2928
2929	add	10,10,31
2930	cmpwi	31,0
2931.long	0x10E7C508
2932.long	0x118CC508
2933.long	0x11ADC508
2934.long	0x11CEC508
2935.long	0x11EFC508
2936
2937	subi	10,10,16
2938.long	0x10E7CD08
2939.long	0x118CCD08
2940.long	0x11ADCD08
2941.long	0x11CECD08
2942.long	0x11EFCD08
2943	vxor	17,17,31
2944
2945.long	0x10E7D508
2946	lvsr	5,0,31
2947.long	0x118CD508
2948.long	0x11ADD508
2949.long	0x11CED508
2950.long	0x11EFD508
2951	vxor	1,18,31
2952
2953.long	0x10E7DD08
2954.long	0x7C005699
2955.long	0x118CDD08
2956.long	0x11ADDD08
2957.long	0x11CEDD08
2958.long	0x11EFDD08
2959	vxor	2,19,31
2960
2961	addi	7,1,64+15
2962.long	0x10E7E508
2963.long	0x118CE508
2964.long	0x11ADE508
2965.long	0x11CEE508
2966.long	0x11EFE508
2967	lvx	24,0,7
2968	vxor	3,20,31
2969
2970.long	0x10E7ED08
2971
2972.long	0x118CED08
2973.long	0x11ADED08
2974.long	0x11CEED08
2975.long	0x11EFED08
2976	lvx	25,3,7
2977	vxor	4,21,31
2978
2979.long	0x10E7F508
2980	vperm	0,0,0,5
2981.long	0x118CF508
2982.long	0x11ADF508
2983.long	0x11CEF508
2984.long	0x11EFF508
2985
2986.long	0x10E78D09
2987.long	0x118C0D09
2988.long	0x11AD1509
2989.long	0x11CE1D09
2990.long	0x11EF2509
2991	blr
2992.long	0
2993.byte	0,12,0x14,0,0,0,0,0
2994
2995.align	5
2996_aesp8_xts_decrypt6x:
2997	stdu	1,-448(1)
2998	mflr	11
2999	li	7,207
3000	li	3,223
3001	std	11,464(1)
3002	stvx	20,7,1
3003	addi	7,7,32
3004	stvx	21,3,1
3005	addi	3,3,32
3006	stvx	22,7,1
3007	addi	7,7,32
3008	stvx	23,3,1
3009	addi	3,3,32
3010	stvx	24,7,1
3011	addi	7,7,32
3012	stvx	25,3,1
3013	addi	3,3,32
3014	stvx	26,7,1
3015	addi	7,7,32
3016	stvx	27,3,1
3017	addi	3,3,32
3018	stvx	28,7,1
3019	addi	7,7,32
3020	stvx	29,3,1
3021	addi	3,3,32
3022	stvx	30,7,1
3023	stvx	31,3,1
3024	li	0,-1
3025	stw	12,396(1)
3026	li	3,0x10
3027	std	26,400(1)
3028	li	26,0x20
3029	std	27,408(1)
3030	li	27,0x30
3031	std	28,416(1)
3032	li	28,0x40
3033	std	29,424(1)
3034	li	29,0x50
3035	std	30,432(1)
3036	li	30,0x60
3037	std	31,440(1)
3038	li	31,0x70
3039	mtspr	256,0
3040
3041	subi	9,9,3
3042
3043	lvx	23,0,6
3044	lvx	30,3,6
3045	addi	6,6,0x20
3046	lvx	31,0,6
3047	vperm	23,23,30,7
3048	addi	7,1,64+15
3049	mtctr	9
3050
3051.Load_xts_dec_key:
3052	vperm	24,30,31,7
3053	lvx	30,3,6
3054	addi	6,6,0x20
3055	stvx	24,0,7
3056	vperm	25,31,30,7
3057	lvx	31,0,6
3058	stvx	25,3,7
3059	addi	7,7,0x20
3060	bc	16,0,.Load_xts_dec_key
3061
3062	lvx	26,3,6
3063	vperm	24,30,31,7
3064	lvx	27,26,6
3065	stvx	24,0,7
3066	vperm	25,31,26,7
3067	lvx	28,27,6
3068	stvx	25,3,7
3069	addi	7,1,64+15
3070	vperm	26,26,27,7
3071	lvx	29,28,6
3072	vperm	27,27,28,7
3073	lvx	30,29,6
3074	vperm	28,28,29,7
3075	lvx	31,30,6
3076	vperm	29,29,30,7
3077	lvx	22,31,6
3078	vperm	30,30,31,7
3079	lvx	24,0,7
3080	vperm	31,31,22,7
3081	lvx	25,3,7
3082
3083	vperm	0,2,4,5
3084	subi	10,10,31
3085	vxor	17,8,23
3086	vsrab	11,8,9
3087	vaddubm	8,8,8
3088	vsldoi	11,11,11,15
3089	vand	11,11,10
3090	vxor	7,0,17
3091	vxor	8,8,11
3092
3093.long	0x7C235699
3094	vxor	18,8,23
3095	vsrab	11,8,9
3096	vaddubm	8,8,8
3097	vsldoi	11,11,11,15
3098
3099	vand	11,11,10
3100	vxor	12,1,18
3101	vxor	8,8,11
3102
3103.long	0x7C5A5699
3104	andi.	31,5,15
3105	vxor	19,8,23
3106	vsrab	11,8,9
3107	vaddubm	8,8,8
3108	vsldoi	11,11,11,15
3109
3110	vand	11,11,10
3111	vxor	13,2,19
3112	vxor	8,8,11
3113
3114.long	0x7C7B5699
3115	sub	5,5,31
3116	vxor	20,8,23
3117	vsrab	11,8,9
3118	vaddubm	8,8,8
3119	vsldoi	11,11,11,15
3120
3121	vand	11,11,10
3122	vxor	14,3,20
3123	vxor	8,8,11
3124
3125.long	0x7C9C5699
3126	subi	5,5,0x60
3127	vxor	21,8,23
3128	vsrab	11,8,9
3129	vaddubm	8,8,8
3130	vsldoi	11,11,11,15
3131
3132	vand	11,11,10
3133	vxor	15,4,21
3134	vxor	8,8,11
3135
3136.long	0x7CBD5699
3137	addi	10,10,0x60
3138	vxor	22,8,23
3139	vsrab	11,8,9
3140	vaddubm	8,8,8
3141	vsldoi	11,11,11,15
3142
3143	vand	11,11,10
3144	vxor	16,5,22
3145	vxor	8,8,11
3146
3147	vxor	31,31,23
3148	mtctr	9
3149	b	.Loop_xts_dec6x
3150
3151.align	5
3152.Loop_xts_dec6x:
3153.long	0x10E7C548
3154.long	0x118CC548
3155.long	0x11ADC548
3156.long	0x11CEC548
3157.long	0x11EFC548
3158.long	0x1210C548
3159	lvx	24,26,7
3160	addi	7,7,0x20
3161
3162.long	0x10E7CD48
3163.long	0x118CCD48
3164.long	0x11ADCD48
3165.long	0x11CECD48
3166.long	0x11EFCD48
3167.long	0x1210CD48
3168	lvx	25,3,7
3169	bc	16,0,.Loop_xts_dec6x
3170
3171	subic	5,5,96
3172	vxor	0,17,31
3173.long	0x10E7C548
3174.long	0x118CC548
3175	vsrab	11,8,9
3176	vxor	17,8,23
3177	vaddubm	8,8,8
3178.long	0x11ADC548
3179.long	0x11CEC548
3180	vsldoi	11,11,11,15
3181.long	0x11EFC548
3182.long	0x1210C548
3183
3184	subfe.	0,0,0
3185	vand	11,11,10
3186.long	0x10E7CD48
3187.long	0x118CCD48
3188	vxor	8,8,11
3189.long	0x11ADCD48
3190.long	0x11CECD48
3191	vxor	1,18,31
3192	vsrab	11,8,9
3193	vxor	18,8,23
3194.long	0x11EFCD48
3195.long	0x1210CD48
3196
3197	and	0,0,5
3198	vaddubm	8,8,8
3199	vsldoi	11,11,11,15
3200.long	0x10E7D548
3201.long	0x118CD548
3202	vand	11,11,10
3203.long	0x11ADD548
3204.long	0x11CED548
3205	vxor	8,8,11
3206.long	0x11EFD548
3207.long	0x1210D548
3208
3209	add	10,10,0
3210
3211
3212
3213	vxor	2,19,31
3214	vsrab	11,8,9
3215	vxor	19,8,23
3216	vaddubm	8,8,8
3217.long	0x10E7DD48
3218.long	0x118CDD48
3219	vsldoi	11,11,11,15
3220.long	0x11ADDD48
3221.long	0x11CEDD48
3222	vand	11,11,10
3223.long	0x11EFDD48
3224.long	0x1210DD48
3225
3226	addi	7,1,64+15
3227	vxor	8,8,11
3228.long	0x10E7E548
3229.long	0x118CE548
3230	vxor	3,20,31
3231	vsrab	11,8,9
3232	vxor	20,8,23
3233.long	0x11ADE548
3234.long	0x11CEE548
3235	vaddubm	8,8,8
3236	vsldoi	11,11,11,15
3237.long	0x11EFE548
3238.long	0x1210E548
3239	lvx	24,0,7
3240	vand	11,11,10
3241
3242.long	0x10E7ED48
3243.long	0x118CED48
3244	vxor	8,8,11
3245.long	0x11ADED48
3246.long	0x11CEED48
3247	vxor	4,21,31
3248	vsrab	11,8,9
3249	vxor	21,8,23
3250.long	0x11EFED48
3251.long	0x1210ED48
3252	lvx	25,3,7
3253	vaddubm	8,8,8
3254	vsldoi	11,11,11,15
3255
3256.long	0x10E7F548
3257.long	0x118CF548
3258	vand	11,11,10
3259.long	0x11ADF548
3260.long	0x11CEF548
3261	vxor	8,8,11
3262.long	0x11EFF548
3263.long	0x1210F548
3264	vxor	5,22,31
3265	vsrab	11,8,9
3266	vxor	22,8,23
3267
3268.long	0x10E70549
3269.long	0x7C005699
3270	vaddubm	8,8,8
3271	vsldoi	11,11,11,15
3272.long	0x118C0D49
3273.long	0x7C235699
3274.long	0x11AD1549
3275
3276.long	0x7C5A5699
3277	vand	11,11,10
3278.long	0x11CE1D49
3279
3280.long	0x7C7B5699
3281.long	0x11EF2549
3282
3283.long	0x7C9C5699
3284	vxor	8,8,11
3285.long	0x12102D49
3286
3287.long	0x7CBD5699
3288	addi	10,10,0x60
3289
3290
3291
3292
3293
3294.long	0x7CE02799
3295	vxor	7,0,17
3296
3297.long	0x7D832799
3298	vxor	12,1,18
3299
3300.long	0x7DBA2799
3301	vxor	13,2,19
3302
3303.long	0x7DDB2799
3304	vxor	14,3,20
3305
3306.long	0x7DFC2799
3307	vxor	15,4,21
3308.long	0x7E1D2799
3309	vxor	16,5,22
3310	addi	4,4,0x60
3311
3312	mtctr	9
3313	beq	.Loop_xts_dec6x
3314
3315	addic.	5,5,0x60
3316	beq	.Lxts_dec6x_zero
3317	cmpwi	5,0x20
3318	blt	.Lxts_dec6x_one
3319	nop
3320	beq	.Lxts_dec6x_two
3321	cmpwi	5,0x40
3322	blt	.Lxts_dec6x_three
3323	nop
3324	beq	.Lxts_dec6x_four
3325
3326.Lxts_dec6x_five:
3327	vxor	7,1,17
3328	vxor	12,2,18
3329	vxor	13,3,19
3330	vxor	14,4,20
3331	vxor	15,5,21
3332
3333	bl	_aesp8_xts_dec5x
3334
3335
3336	vor	17,22,22
3337	vxor	18,8,23
3338
3339.long	0x7CE02799
3340	vxor	7,0,18
3341
3342.long	0x7D832799
3343
3344.long	0x7DBA2799
3345
3346.long	0x7DDB2799
3347.long	0x7DFC2799
3348	addi	4,4,0x50
3349	bne	.Lxts_dec6x_steal
3350	b	.Lxts_dec6x_done
3351
3352.align	4
3353.Lxts_dec6x_four:
3354	vxor	7,2,17
3355	vxor	12,3,18
3356	vxor	13,4,19
3357	vxor	14,5,20
3358	vxor	15,15,15
3359
3360	bl	_aesp8_xts_dec5x
3361
3362
3363	vor	17,21,21
3364	vor	18,22,22
3365
3366.long	0x7CE02799
3367	vxor	7,0,22
3368
3369.long	0x7D832799
3370
3371.long	0x7DBA2799
3372.long	0x7DDB2799
3373	addi	4,4,0x40
3374	bne	.Lxts_dec6x_steal
3375	b	.Lxts_dec6x_done
3376
3377.align	4
3378.Lxts_dec6x_three:
3379	vxor	7,3,17
3380	vxor	12,4,18
3381	vxor	13,5,19
3382	vxor	14,14,14
3383	vxor	15,15,15
3384
3385	bl	_aesp8_xts_dec5x
3386
3387
3388	vor	17,20,20
3389	vor	18,21,21
3390
3391.long	0x7CE02799
3392	vxor	7,0,21
3393
3394.long	0x7D832799
3395.long	0x7DBA2799
3396	addi	4,4,0x30
3397	bne	.Lxts_dec6x_steal
3398	b	.Lxts_dec6x_done
3399
3400.align	4
3401.Lxts_dec6x_two:
3402	vxor	7,4,17
3403	vxor	12,5,18
3404	vxor	13,13,13
3405	vxor	14,14,14
3406	vxor	15,15,15
3407
3408	bl	_aesp8_xts_dec5x
3409
3410
3411	vor	17,19,19
3412	vor	18,20,20
3413
3414.long	0x7CE02799
3415	vxor	7,0,20
3416.long	0x7D832799
3417	addi	4,4,0x20
3418	bne	.Lxts_dec6x_steal
3419	b	.Lxts_dec6x_done
3420
3421.align	4
3422.Lxts_dec6x_one:
3423	vxor	7,5,17
3424	nop
3425.Loop_xts_dec1x:
3426.long	0x10E7C548
3427	lvx	24,26,7
3428	addi	7,7,0x20
3429
3430.long	0x10E7CD48
3431	lvx	25,3,7
3432	bc	16,0,.Loop_xts_dec1x
3433
3434	subi	0,31,1
3435.long	0x10E7C548
3436
3437	andi.	0,0,16
3438	cmpwi	31,0
3439.long	0x10E7CD48
3440
3441	sub	10,10,0
3442.long	0x10E7D548
3443
3444.long	0x7C005699
3445.long	0x10E7DD48
3446
3447	addi	7,1,64+15
3448.long	0x10E7E548
3449	lvx	24,0,7
3450
3451.long	0x10E7ED48
3452	lvx	25,3,7
3453	vxor	17,17,31
3454
3455
3456.long	0x10E7F548
3457
3458	mtctr	9
3459.long	0x10E78D49
3460
3461	vor	17,18,18
3462	vor	18,19,19
3463
3464.long	0x7CE02799
3465	addi	4,4,0x10
3466	vxor	7,0,19
3467	bne	.Lxts_dec6x_steal
3468	b	.Lxts_dec6x_done
3469
3470.align	4
3471.Lxts_dec6x_zero:
3472	cmpwi	31,0
3473	beq	.Lxts_dec6x_done
3474
3475.long	0x7C005699
3476
3477	vxor	7,0,18
3478.Lxts_dec6x_steal:
3479.long	0x10E7C548
3480	lvx	24,26,7
3481	addi	7,7,0x20
3482
3483.long	0x10E7CD48
3484	lvx	25,3,7
3485	bc	16,0,.Lxts_dec6x_steal
3486
3487	add	10,10,31
3488.long	0x10E7C548
3489
3490	cmpwi	31,0
3491.long	0x10E7CD48
3492
3493.long	0x7C005699
3494.long	0x10E7D548
3495
3496	lvsr	5,0,31
3497.long	0x10E7DD48
3498
3499	addi	7,1,64+15
3500.long	0x10E7E548
3501	lvx	24,0,7
3502
3503.long	0x10E7ED48
3504	lvx	25,3,7
3505	vxor	18,18,31
3506
3507
3508.long	0x10E7F548
3509
3510	vperm	0,0,0,5
3511.long	0x11679549
3512
3513
3514
3515.long	0x7D602799
3516
3517	vxor	7,7,7
3518	vspltisb	12,-1
3519	vperm	7,7,12,5
3520	vsel	7,0,11,7
3521	vxor	7,7,17
3522
3523	subi	30,4,1
3524	mtctr	31
3525.Loop_xts_dec6x_steal:
3526	lbzu	0,1(30)
3527	stb	0,16(30)
3528	bc	16,0,.Loop_xts_dec6x_steal
3529
3530	li	31,0
3531	mtctr	9
3532	b	.Loop_xts_dec1x
3533
3534.align	4
3535.Lxts_dec6x_done:
3536	cmpldi	8,0
3537	beq	.Lxts_dec6x_ret
3538
3539	vxor	8,17,23
3540
3541.long	0x7D004799
3542
3543.Lxts_dec6x_ret:
3544	mtlr	11
3545	li	10,79
3546	li	11,95
3547	stvx	9,10,1
3548	addi	10,10,32
3549	stvx	9,11,1
3550	addi	11,11,32
3551	stvx	9,10,1
3552	addi	10,10,32
3553	stvx	9,11,1
3554	addi	11,11,32
3555	stvx	9,10,1
3556	addi	10,10,32
3557	stvx	9,11,1
3558	addi	11,11,32
3559	stvx	9,10,1
3560	addi	10,10,32
3561	stvx	9,11,1
3562	addi	11,11,32
3563
3564	mtspr	256,12
3565	lvx	20,10,1
3566	addi	10,10,32
3567	lvx	21,11,1
3568	addi	11,11,32
3569	lvx	22,10,1
3570	addi	10,10,32
3571	lvx	23,11,1
3572	addi	11,11,32
3573	lvx	24,10,1
3574	addi	10,10,32
3575	lvx	25,11,1
3576	addi	11,11,32
3577	lvx	26,10,1
3578	addi	10,10,32
3579	lvx	27,11,1
3580	addi	11,11,32
3581	lvx	28,10,1
3582	addi	10,10,32
3583	lvx	29,11,1
3584	addi	11,11,32
3585	lvx	30,10,1
3586	lvx	31,11,1
3587	ld	26,400(1)
3588	ld	27,408(1)
3589	ld	28,416(1)
3590	ld	29,424(1)
3591	ld	30,432(1)
3592	ld	31,440(1)
3593	addi	1,1,448
3594	blr
3595.long	0
3596.byte	0,12,0x04,1,0x80,6,6,0
3597.long	0
3598
3599.align	5
3600_aesp8_xts_dec5x:
3601.long	0x10E7C548
3602.long	0x118CC548
3603.long	0x11ADC548
3604.long	0x11CEC548
3605.long	0x11EFC548
3606	lvx	24,26,7
3607	addi	7,7,0x20
3608
3609.long	0x10E7CD48
3610.long	0x118CCD48
3611.long	0x11ADCD48
3612.long	0x11CECD48
3613.long	0x11EFCD48
3614	lvx	25,3,7
3615	bc	16,0,_aesp8_xts_dec5x
3616
3617	subi	0,31,1
3618.long	0x10E7C548
3619.long	0x118CC548
3620.long	0x11ADC548
3621.long	0x11CEC548
3622.long	0x11EFC548
3623
3624	andi.	0,0,16
3625	cmpwi	31,0
3626.long	0x10E7CD48
3627.long	0x118CCD48
3628.long	0x11ADCD48
3629.long	0x11CECD48
3630.long	0x11EFCD48
3631	vxor	17,17,31
3632
3633	sub	10,10,0
3634.long	0x10E7D548
3635.long	0x118CD548
3636.long	0x11ADD548
3637.long	0x11CED548
3638.long	0x11EFD548
3639	vxor	1,18,31
3640
3641.long	0x10E7DD48
3642.long	0x7C005699
3643.long	0x118CDD48
3644.long	0x11ADDD48
3645.long	0x11CEDD48
3646.long	0x11EFDD48
3647	vxor	2,19,31
3648
3649	addi	7,1,64+15
3650.long	0x10E7E548
3651.long	0x118CE548
3652.long	0x11ADE548
3653.long	0x11CEE548
3654.long	0x11EFE548
3655	lvx	24,0,7
3656	vxor	3,20,31
3657
3658.long	0x10E7ED48
3659
3660.long	0x118CED48
3661.long	0x11ADED48
3662.long	0x11CEED48
3663.long	0x11EFED48
3664	lvx	25,3,7
3665	vxor	4,21,31
3666
3667.long	0x10E7F548
3668.long	0x118CF548
3669.long	0x11ADF548
3670.long	0x11CEF548
3671.long	0x11EFF548
3672
3673.long	0x10E78D49
3674.long	0x118C0D49
3675.long	0x11AD1549
3676.long	0x11CE1D49
3677.long	0x11EF2549
3678	mtctr	9
3679	blr
3680.long	0
3681.byte	0,12,0x14,0,0,0,0,0
3682