xref: /netbsd-src/crypto/external/bsd/openssl.old/lib/libcrypto/arch/powerpc/aesp8-ppc.S (revision 627f7eb200a4419d89b531d55fccd2ee3ffdcde0)
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,32,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	.Lcbc_dec8x_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	.Lcbc_dec8x_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