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