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