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