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