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