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