xref: /freebsd/sys/crypto/openssl/powerpc/ppc-mont.S (revision 681ce946)
1/* $FreeBSD$ */
2/* Do not modify. This file is auto-generated from ppc-mont.pl. */
3.machine	"any"
4.text
5
6.globl	bn_mul_mont_int
7.type	bn_mul_mont_int,@function
8.align	5
9bn_mul_mont_int:
10	mr	9,3
11	li	3,0
12	cmpwi	8,32
13	bgelr
14	slwi	8,8,2
15	li	12,-4096
16	addi	3,8,256
17	subf	3,3,1
18	and	3,3,12
19	subf	3,1,3
20	mr	12,1
21	srwi	8,8,2
22	stwux	1,1,3
23
24	stw	20,-48(12)
25	stw	21,-44(12)
26	stw	22,-40(12)
27	stw	23,-36(12)
28	stw	24,-32(12)
29	stw	25,-28(12)
30	stw	26,-24(12)
31	stw	27,-20(12)
32	stw	28,-16(12)
33	stw	29,-12(12)
34	stw	30,-8(12)
35	stw	31,-4(12)
36
37	lwz	7,0(7)
38	addi	8,8,-2
39
40	lwz	23,0(5)
41	lwz	10,0(4)
42	addi	22,1,32
43	mullw	25,10,23
44	mulhwu	26,10,23
45
46	lwz	10,4(4)
47	lwz	11,0(6)
48
49	mullw	24,25,7
50
51	mullw	29,10,23
52	mulhwu	30,10,23
53
54	mullw	27,11,24
55	mulhwu	28,11,24
56	lwz	11,4(6)
57	addc	27,27,25
58	addze	28,28
59
60	mullw	31,11,24
61	mulhwu	0,11,24
62
63	mtctr	8
64	li	21,8
65.align	4
66.L1st:
67	lwzx	10,4,21
68	addc	25,29,26
69	lwzx	11,6,21
70	addze	26,30
71	mullw	29,10,23
72	addc	27,31,28
73	mulhwu	30,10,23
74	addze	28,0
75	mullw	31,11,24
76	addc	27,27,25
77	mulhwu	0,11,24
78	addze	28,28
79	stw	27,0(22)
80
81	addi	21,21,4
82	addi	22,22,4
83	bdnz	.L1st
84
85	addc	25,29,26
86	addze	26,30
87
88	addc	27,31,28
89	addze	28,0
90	addc	27,27,25
91	addze	28,28
92	stw	27,0(22)
93
94	li	3,0
95	addc	28,28,26
96	addze	3,3
97	stw	28,4(22)
98
99	li	20,4
100.align	4
101.Louter:
102	lwzx	23,5,20
103	lwz	10,0(4)
104	addi	22,1,32
105	lwz	12,32(1)
106	mullw	25,10,23
107	mulhwu	26,10,23
108	lwz	10,4(4)
109	lwz	11,0(6)
110	addc	25,25,12
111	mullw	29,10,23
112	addze	26,26
113	mullw	24,25,7
114	mulhwu	30,10,23
115	mullw	27,11,24
116	mulhwu	28,11,24
117	lwz	11,4(6)
118	addc	27,27,25
119	mullw	31,11,24
120	addze	28,28
121	mulhwu	0,11,24
122
123	mtctr	8
124	li	21,8
125.align	4
126.Linner:
127	lwzx	10,4,21
128	addc	25,29,26
129	lwz	12,4(22)
130	addze	26,30
131	lwzx	11,6,21
132	addc	27,31,28
133	mullw	29,10,23
134	addze	28,0
135	mulhwu	30,10,23
136	addc	25,25,12
137	mullw	31,11,24
138	addze	26,26
139	mulhwu	0,11,24
140	addc	27,27,25
141	addi	21,21,4
142	addze	28,28
143	stw	27,0(22)
144	addi	22,22,4
145	bdnz	.Linner
146
147	lwz	12,4(22)
148	addc	25,29,26
149	addze	26,30
150	addc	25,25,12
151	addze	26,26
152
153	addc	27,31,28
154	addze	28,0
155	addc	27,27,25
156	addze	28,28
157	stw	27,0(22)
158
159	addic	3,3,-1
160	li	3,0
161	adde	28,28,26
162	addze	3,3
163	stw	28,4(22)
164
165	slwi	12,8,2
166	.long	0x7c146040
167	addi	20,20,4
168	ble	.Louter
169
170	addi	8,8,2
171	subfc	21,21,21
172	addi	22,1,32
173	mtctr	8
174
175.align	4
176.Lsub:	lwzx	12,22,21
177	lwzx	11,6,21
178	subfe	10,11,12
179	stwx	10,9,21
180	addi	21,21,4
181	bdnz	.Lsub
182
183	li	21,0
184	mtctr	8
185	subfe	3,21,3
186
187.align	4
188.Lcopy:
189	lwzx	12,22,21
190	lwzx	10,9,21
191	and	12,12,3
192	andc	10,10,3
193	stwx	21,22,21
194	or	10,10,12
195	stwx	10,9,21
196	addi	21,21,4
197	bdnz	.Lcopy
198
199	lwz	12,0(1)
200	li	3,1
201	lwz	20,-48(12)
202	lwz	21,-44(12)
203	lwz	22,-40(12)
204	lwz	23,-36(12)
205	lwz	24,-32(12)
206	lwz	25,-28(12)
207	lwz	26,-24(12)
208	lwz	27,-20(12)
209	lwz	28,-16(12)
210	lwz	29,-12(12)
211	lwz	30,-8(12)
212	lwz	31,-4(12)
213	mr	1,12
214	blr
215.long	0
216.byte	0,12,4,0,0x80,12,6,0
217.long	0
218.size	bn_mul_mont_int,.-bn_mul_mont_int
219.globl	bn_mul4x_mont_int
220.type	bn_mul4x_mont_int,@function
221.align	5
222bn_mul4x_mont_int:
223	andi.	0,8,7
224	bne	.Lmul4x_do
225	.long	0x7c042840
226	bne	.Lmul4x_do
227	b	.Lsqr8x_do
228.Lmul4x_do:
229	slwi	8,8,2
230	mr	9,1
231	li	10,-32*4
232	sub	10,10,8
233	stwux	1,1,10
234
235	stw	14,-4*18(9)
236	stw	15,-4*17(9)
237	stw	16,-4*16(9)
238	stw	17,-4*15(9)
239	stw	18,-4*14(9)
240	stw	19,-4*13(9)
241	stw	20,-4*12(9)
242	stw	21,-4*11(9)
243	stw	22,-4*10(9)
244	stw	23,-4*9(9)
245	stw	24,-4*8(9)
246	stw	25,-4*7(9)
247	stw	26,-4*6(9)
248	stw	27,-4*5(9)
249	stw	28,-4*4(9)
250	stw	29,-4*3(9)
251	stw	30,-4*2(9)
252	stw	31,-4*1(9)
253
254	subi	4,4,4
255	subi	6,6,4
256	subi	3,3,4
257	lwz	7,0(7)
258
259	add	14,5,8
260	add	30,4,8
261	subi	14,14,4*4
262
263	lwz	27,4*0(5)
264	li	22,0
265	lwz	9,4*1(4)
266	li	23,0
267	lwz	10,4*2(4)
268	li	24,0
269	lwz	11,4*3(4)
270	li	25,0
271	lwzu	12,4*4(4)
272	lwz	18,4*1(6)
273	lwz	19,4*2(6)
274	lwz	20,4*3(6)
275	lwzu	21,4*4(6)
276
277	stw	3,4*6(1)
278	stw	14,4*7(1)
279	li	3,0
280	addic	29,1,4*7
281	li	31,0
282	li	0,0
283	b	.Loop_mul4x_1st_reduction
284
285.align	5
286.Loop_mul4x_1st_reduction:
287	mullw	14,9,27
288	addze	3,3
289	mullw	15,10,27
290	addi	31,31,4
291	mullw	16,11,27
292	andi.	31,31,4*4-1
293	mullw	17,12,27
294	addc	22,22,14
295	mulhwu	14,9,27
296	adde	23,23,15
297	mulhwu	15,10,27
298	adde	24,24,16
299	mullw	28,22,7
300	adde	25,25,17
301	mulhwu	16,11,27
302	addze	26,0
303	mulhwu	17,12,27
304	lwzx	27,5,31
305	addc	23,23,14
306
307	stwu	28,4(29)
308	adde	24,24,15
309	mullw	15,19,28
310	adde	25,25,16
311	mullw	16,20,28
312	adde	26,26,17
313	mullw	17,21,28
314
315
316
317
318
319
320
321
322
323
324	addic	22,22,-1
325	mulhwu	14,18,28
326	adde	22,23,15
327	mulhwu	15,19,28
328	adde	23,24,16
329	mulhwu	16,20,28
330	adde	24,25,17
331	mulhwu	17,21,28
332	adde	25,26,3
333	addze	3,0
334	addc	22,22,14
335	adde	23,23,15
336	adde	24,24,16
337	adde	25,25,17
338
339	bne	.Loop_mul4x_1st_reduction
340
341	.long	0x7c1e2040
342	beq	.Lmul4x4_post_condition
343
344	lwz	9,4*1(4)
345	lwz	10,4*2(4)
346	lwz	11,4*3(4)
347	lwzu	12,4*4(4)
348	lwz	28,4*8(1)
349	lwz	18,4*1(6)
350	lwz	19,4*2(6)
351	lwz	20,4*3(6)
352	lwzu	21,4*4(6)
353	b	.Loop_mul4x_1st_tail
354
355.align	5
356.Loop_mul4x_1st_tail:
357	mullw	14,9,27
358	addze	3,3
359	mullw	15,10,27
360	addi	31,31,4
361	mullw	16,11,27
362	andi.	31,31,4*4-1
363	mullw	17,12,27
364	addc	22,22,14
365	mulhwu	14,9,27
366	adde	23,23,15
367	mulhwu	15,10,27
368	adde	24,24,16
369	mulhwu	16,11,27
370	adde	25,25,17
371	mulhwu	17,12,27
372	addze	26,0
373	lwzx	27,5,31
374	addc	23,23,14
375	mullw	14,18,28
376	adde	24,24,15
377	mullw	15,19,28
378	adde	25,25,16
379	mullw	16,20,28
380	adde	26,26,17
381	mullw	17,21,28
382	addc	22,22,14
383	mulhwu	14,18,28
384	adde	23,23,15
385	mulhwu	15,19,28
386	adde	24,24,16
387	mulhwu	16,20,28
388	adde	25,25,17
389	adde	26,26,3
390	mulhwu	17,21,28
391	addze	3,0
392	addi	28,1,4*8
393	lwzx	28,28,31
394	stwu	22,4(29)
395	addc	22,23,14
396	adde	23,24,15
397	adde	24,25,16
398	adde	25,26,17
399
400	bne	.Loop_mul4x_1st_tail
401
402	sub	15,30,8
403	.long	0x7c1e2040
404	beq	.Lmul4x_proceed
405
406	lwz	9,4*1(4)
407	lwz	10,4*2(4)
408	lwz	11,4*3(4)
409	lwzu	12,4*4(4)
410	lwz	18,4*1(6)
411	lwz	19,4*2(6)
412	lwz	20,4*3(6)
413	lwzu	21,4*4(6)
414	b	.Loop_mul4x_1st_tail
415
416.align	5
417.Lmul4x_proceed:
418	lwzu	27,4*4(5)
419	addze	3,3
420	lwz	9,4*1(15)
421	lwz	10,4*2(15)
422	lwz	11,4*3(15)
423	lwz	12,4*4(15)
424	addi	4,15,4*4
425	sub	6,6,8
426
427	stw	22,4*1(29)
428	stw	23,4*2(29)
429	stw	24,4*3(29)
430	stw	25,4*4(29)
431	stw	3,4*5(29)
432	lwz	22,4*12(1)
433	lwz	23,4*13(1)
434	lwz	24,4*14(1)
435	lwz	25,4*15(1)
436
437	lwz	18,4*1(6)
438	lwz	19,4*2(6)
439	lwz	20,4*3(6)
440	lwzu	21,4*4(6)
441	addic	29,1,4*7
442	li	3,0
443	b	.Loop_mul4x_reduction
444
445.align	5
446.Loop_mul4x_reduction:
447	mullw	14,9,27
448	addze	3,3
449	mullw	15,10,27
450	addi	31,31,4
451	mullw	16,11,27
452	andi.	31,31,4*4-1
453	mullw	17,12,27
454	addc	22,22,14
455	mulhwu	14,9,27
456	adde	23,23,15
457	mulhwu	15,10,27
458	adde	24,24,16
459	mullw	28,22,7
460	adde	25,25,17
461	mulhwu	16,11,27
462	addze	26,0
463	mulhwu	17,12,27
464	lwzx	27,5,31
465	addc	23,23,14
466
467	stwu	28,4(29)
468	adde	24,24,15
469	mullw	15,19,28
470	adde	25,25,16
471	mullw	16,20,28
472	adde	26,26,17
473	mullw	17,21,28
474
475	addic	22,22,-1
476	mulhwu	14,18,28
477	adde	22,23,15
478	mulhwu	15,19,28
479	adde	23,24,16
480	mulhwu	16,20,28
481	adde	24,25,17
482	mulhwu	17,21,28
483	adde	25,26,3
484	addze	3,0
485	addc	22,22,14
486	adde	23,23,15
487	adde	24,24,16
488	adde	25,25,17
489
490	bne	.Loop_mul4x_reduction
491
492	lwz	14,4*5(29)
493	addze	3,3
494	lwz	15,4*6(29)
495	lwz	16,4*7(29)
496	lwz	17,4*8(29)
497	lwz	9,4*1(4)
498	lwz	10,4*2(4)
499	lwz	11,4*3(4)
500	lwzu	12,4*4(4)
501	addc	22,22,14
502	adde	23,23,15
503	adde	24,24,16
504	adde	25,25,17
505
506
507	lwz	28,4*8(1)
508	lwz	18,4*1(6)
509	lwz	19,4*2(6)
510	lwz	20,4*3(6)
511	lwzu	21,4*4(6)
512	b	.Loop_mul4x_tail
513
514.align	5
515.Loop_mul4x_tail:
516	mullw	14,9,27
517	addze	3,3
518	mullw	15,10,27
519	addi	31,31,4
520	mullw	16,11,27
521	andi.	31,31,4*4-1
522	mullw	17,12,27
523	addc	22,22,14
524	mulhwu	14,9,27
525	adde	23,23,15
526	mulhwu	15,10,27
527	adde	24,24,16
528	mulhwu	16,11,27
529	adde	25,25,17
530	mulhwu	17,12,27
531	addze	26,0
532	lwzx	27,5,31
533	addc	23,23,14
534	mullw	14,18,28
535	adde	24,24,15
536	mullw	15,19,28
537	adde	25,25,16
538	mullw	16,20,28
539	adde	26,26,17
540	mullw	17,21,28
541	addc	22,22,14
542	mulhwu	14,18,28
543	adde	23,23,15
544	mulhwu	15,19,28
545	adde	24,24,16
546	mulhwu	16,20,28
547	adde	25,25,17
548	mulhwu	17,21,28
549	adde	26,26,3
550	addi	28,1,4*8
551	lwzx	28,28,31
552	addze	3,0
553	stwu	22,4(29)
554	addc	22,23,14
555	adde	23,24,15
556	adde	24,25,16
557	adde	25,26,17
558
559	bne	.Loop_mul4x_tail
560
561	lwz	14,4*5(29)
562	sub	15,6,8
563	addze	3,3
564	.long	0x7c1e2040
565	beq	.Loop_mul4x_break
566
567	lwz	15,4*6(29)
568	lwz	16,4*7(29)
569	lwz	17,4*8(29)
570	lwz	9,4*1(4)
571	lwz	10,4*2(4)
572	lwz	11,4*3(4)
573	lwzu	12,4*4(4)
574	addc	22,22,14
575	adde	23,23,15
576	adde	24,24,16
577	adde	25,25,17
578
579
580	lwz	18,4*1(6)
581	lwz	19,4*2(6)
582	lwz	20,4*3(6)
583	lwzu	21,4*4(6)
584	b	.Loop_mul4x_tail
585
586.align	5
587.Loop_mul4x_break:
588	lwz	16,4*6(1)
589	lwz	17,4*7(1)
590	addc	9,22,14
591	lwz	22,4*12(1)
592	addze	10,23
593	lwz	23,4*13(1)
594	addze	11,24
595	lwz	24,4*14(1)
596	addze	12,25
597	lwz	25,4*15(1)
598	addze	3,3
599	stw	9,4*1(29)
600	sub	4,30,8
601	stw	10,4*2(29)
602	stw	11,4*3(29)
603	stw	12,4*4(29)
604	stw	3,4*5(29)
605
606	lwz	18,4*1(15)
607	lwz	19,4*2(15)
608	lwz	20,4*3(15)
609	lwz	21,4*4(15)
610	addi	6,15,4*4
611	.long	0x7c058840
612	beq	.Lmul4x_post
613
614	lwzu	27,4*4(5)
615	lwz	9,4*1(4)
616	lwz	10,4*2(4)
617	lwz	11,4*3(4)
618	lwzu	12,4*4(4)
619	li	3,0
620	addic	29,1,4*7
621	b	.Loop_mul4x_reduction
622
623.align	5
624.Lmul4x_post:
625
626
627
628
629	srwi	31,8,4
630	mr	5,16
631	subi	31,31,1
632	mr	30,16
633	subfc	14,18,22
634	addi	29,1,4*15
635	subfe	15,19,23
636
637	mtctr	31
638.Lmul4x_sub:
639	lwz	18,4*1(6)
640	lwz	22,4*1(29)
641	subfe	16,20,24
642	lwz	19,4*2(6)
643	lwz	23,4*2(29)
644	subfe	17,21,25
645	lwz	20,4*3(6)
646	lwz	24,4*3(29)
647	lwzu	21,4*4(6)
648	lwzu	25,4*4(29)
649	stw	14,4*1(5)
650	stw	15,4*2(5)
651	subfe	14,18,22
652	stw	16,4*3(5)
653	stwu	17,4*4(5)
654	subfe	15,19,23
655	bdnz	.Lmul4x_sub
656
657	lwz	9,4*1(30)
658	stw	14,4*1(5)
659	lwz	14,4*12(1)
660	subfe	16,20,24
661	lwz	10,4*2(30)
662	stw	15,4*2(5)
663	lwz	15,4*13(1)
664	subfe	17,21,25
665	subfe	3,0,3
666	addi	29,1,4*12
667	lwz	11,4*3(30)
668	stw	16,4*3(5)
669	lwz	16,4*14(1)
670	lwz	12,4*4(30)
671	stw	17,4*4(5)
672	lwz	17,4*15(1)
673
674	mtctr	31
675.Lmul4x_cond_copy:
676	and	14,14,3
677	andc	9,9,3
678	stw	0,4*0(29)
679	and	15,15,3
680	andc	10,10,3
681	stw	0,4*1(29)
682	and	16,16,3
683	andc	11,11,3
684	stw	0,4*2(29)
685	and	17,17,3
686	andc	12,12,3
687	stw	0,4*3(29)
688	or	22,14,9
689	lwz	9,4*5(30)
690	lwz	14,4*4(29)
691	or	23,15,10
692	lwz	10,4*6(30)
693	lwz	15,4*5(29)
694	or	24,16,11
695	lwz	11,4*7(30)
696	lwz	16,4*6(29)
697	or	25,17,12
698	lwz	12,4*8(30)
699	lwz	17,4*7(29)
700	addi	29,29,4*4
701	stw	22,4*1(30)
702	stw	23,4*2(30)
703	stw	24,4*3(30)
704	stwu	25,4*4(30)
705	bdnz	.Lmul4x_cond_copy
706
707	lwz	5,0(1)
708	and	14,14,3
709	andc	9,9,3
710	stw	0,4*0(29)
711	and	15,15,3
712	andc	10,10,3
713	stw	0,4*1(29)
714	and	16,16,3
715	andc	11,11,3
716	stw	0,4*2(29)
717	and	17,17,3
718	andc	12,12,3
719	stw	0,4*3(29)
720	or	22,14,9
721	or	23,15,10
722	stw	0,4*4(29)
723	or	24,16,11
724	or	25,17,12
725	stw	22,4*1(30)
726	stw	23,4*2(30)
727	stw	24,4*3(30)
728	stw	25,4*4(30)
729
730	b	.Lmul4x_done
731
732.align	4
733.Lmul4x4_post_condition:
734	lwz	4,4*6(1)
735	lwz	5,0(1)
736	addze	3,3
737
738	subfc	9,18,22
739	subfe	10,19,23
740	subfe	11,20,24
741	subfe	12,21,25
742	subfe	3,0,3
743
744	and	18,18,3
745	and	19,19,3
746	addc	9,9,18
747	and	20,20,3
748	adde	10,10,19
749	and	21,21,3
750	adde	11,11,20
751	adde	12,12,21
752
753	stw	9,4*1(4)
754	stw	10,4*2(4)
755	stw	11,4*3(4)
756	stw	12,4*4(4)
757
758.Lmul4x_done:
759	stw	0,4*8(1)
760	stw	0,4*9(1)
761	stw	0,4*10(1)
762	stw	0,4*11(1)
763	li	3,1
764	lwz	14,-4*18(5)
765	lwz	15,-4*17(5)
766	lwz	16,-4*16(5)
767	lwz	17,-4*15(5)
768	lwz	18,-4*14(5)
769	lwz	19,-4*13(5)
770	lwz	20,-4*12(5)
771	lwz	21,-4*11(5)
772	lwz	22,-4*10(5)
773	lwz	23,-4*9(5)
774	lwz	24,-4*8(5)
775	lwz	25,-4*7(5)
776	lwz	26,-4*6(5)
777	lwz	27,-4*5(5)
778	lwz	28,-4*4(5)
779	lwz	29,-4*3(5)
780	lwz	30,-4*2(5)
781	lwz	31,-4*1(5)
782	mr	1,5
783	blr
784.long	0
785.byte	0,12,4,0x20,0x80,18,6,0
786.long	0
787.size	bn_mul4x_mont_int,.-bn_mul4x_mont_int
788.align	5
789__bn_sqr8x_mont:
790.Lsqr8x_do:
791	mr	9,1
792	slwi	10,8,3
793	li	11,-32*4
794	sub	10,11,10
795	slwi	8,8,2
796	stwux	1,1,10
797
798	stw	14,-4*18(9)
799	stw	15,-4*17(9)
800	stw	16,-4*16(9)
801	stw	17,-4*15(9)
802	stw	18,-4*14(9)
803	stw	19,-4*13(9)
804	stw	20,-4*12(9)
805	stw	21,-4*11(9)
806	stw	22,-4*10(9)
807	stw	23,-4*9(9)
808	stw	24,-4*8(9)
809	stw	25,-4*7(9)
810	stw	26,-4*6(9)
811	stw	27,-4*5(9)
812	stw	28,-4*4(9)
813	stw	29,-4*3(9)
814	stw	30,-4*2(9)
815	stw	31,-4*1(9)
816
817	subi	4,4,4
818	subi	18,6,4
819	subi	3,3,4
820	lwz	7,0(7)
821	li	0,0
822
823	add	6,4,8
824	lwz	9,4*1(4)
825
826	lwz	10,4*2(4)
827	li	23,0
828	lwz	11,4*3(4)
829	li	24,0
830	lwz	12,4*4(4)
831	li	25,0
832	lwz	14,4*5(4)
833	li	26,0
834	lwz	15,4*6(4)
835	li	27,0
836	lwz	16,4*7(4)
837	li	28,0
838	lwzu	17,4*8(4)
839	li	29,0
840
841	addi	5,1,4*11
842	subic.	30,8,4*8
843	b	.Lsqr8x_zero_start
844
845.align	5
846.Lsqr8x_zero:
847	subic.	30,30,4*8
848	stw	0,4*1(5)
849	stw	0,4*2(5)
850	stw	0,4*3(5)
851	stw	0,4*4(5)
852	stw	0,4*5(5)
853	stw	0,4*6(5)
854	stw	0,4*7(5)
855	stw	0,4*8(5)
856.Lsqr8x_zero_start:
857	stw	0,4*9(5)
858	stw	0,4*10(5)
859	stw	0,4*11(5)
860	stw	0,4*12(5)
861	stw	0,4*13(5)
862	stw	0,4*14(5)
863	stw	0,4*15(5)
864	stwu	0,4*16(5)
865	bne	.Lsqr8x_zero
866
867	stw	3,4*6(1)
868	stw	18,4*7(1)
869	stw	7,4*8(1)
870	stw	5,4*9(1)
871	stw	0,4*10(1)
872	addi	5,1,4*11
873
874
875.align	5
876.Lsqr8x_outer_loop:
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906	mullw	18,10,9
907	mullw	19,11,9
908	mullw	20,12,9
909	mullw	21,14,9
910	addc	23,23,18
911	mullw	18,15,9
912	adde	24,24,19
913	mullw	19,16,9
914	adde	25,25,20
915	mullw	20,17,9
916	adde	26,26,21
917	mulhwu	21,10,9
918	adde	27,27,18
919	mulhwu	18,11,9
920	adde	28,28,19
921	mulhwu	19,12,9
922	adde	29,29,20
923	mulhwu	20,14,9
924	stw	22,4*1(5)
925	addze	22,0
926	stw	23,4*2(5)
927	addc	24,24,21
928	mulhwu	21,15,9
929	adde	25,25,18
930	mulhwu	18,16,9
931	adde	26,26,19
932	mulhwu	19,17,9
933	adde	27,27,20
934	mullw	20,11,10
935	adde	28,28,21
936	mullw	21,12,10
937	adde	29,29,18
938	mullw	18,14,10
939	adde	22,22,19
940
941	mullw	19,15,10
942	addc	25,25,20
943	mullw	20,16,10
944	adde	26,26,21
945	mullw	21,17,10
946	adde	27,27,18
947	mulhwu	18,11,10
948	adde	28,28,19
949	mulhwu	19,12,10
950	adde	29,29,20
951	mulhwu	20,14,10
952	adde	22,22,21
953	mulhwu	21,15,10
954	stw	24,4*3(5)
955	addze	23,0
956	stw	25,4*4(5)
957	addc	26,26,18
958	mulhwu	18,16,10
959	adde	27,27,19
960	mulhwu	19,17,10
961	adde	28,28,20
962	mullw	20,12,11
963	adde	29,29,21
964	mullw	21,14,11
965	adde	22,22,18
966	mullw	18,15,11
967	adde	23,23,19
968
969	mullw	19,16,11
970	addc	27,27,20
971	mullw	20,17,11
972	adde	28,28,21
973	mulhwu	21,12,11
974	adde	29,29,18
975	mulhwu	18,14,11
976	adde	22,22,19
977	mulhwu	19,15,11
978	adde	23,23,20
979	mulhwu	20,16,11
980	stw	26,4*5(5)
981	addze	24,0
982	stw	27,4*6(5)
983	addc	28,28,21
984	mulhwu	21,17,11
985	adde	29,29,18
986	mullw	18,14,12
987	adde	22,22,19
988	mullw	19,15,12
989	adde	23,23,20
990	mullw	20,16,12
991	adde	24,24,21
992
993	mullw	21,17,12
994	addc	29,29,18
995	mulhwu	18,14,12
996	adde	22,22,19
997	mulhwu	19,15,12
998	adde	23,23,20
999	mulhwu	20,16,12
1000	adde	24,24,21
1001	mulhwu	21,17,12
1002	stw	28,4*7(5)
1003	addze	25,0
1004	stwu	29,4*8(5)
1005	addc	22,22,18
1006	mullw	18,15,14
1007	adde	23,23,19
1008	mullw	19,16,14
1009	adde	24,24,20
1010	mullw	20,17,14
1011	adde	25,25,21
1012
1013	mulhwu	21,15,14
1014	addc	23,23,18
1015	mulhwu	18,16,14
1016	adde	24,24,19
1017	mulhwu	19,17,14
1018	adde	25,25,20
1019	mullw	20,16,15
1020	addze	26,0
1021	addc	24,24,21
1022	mullw	21,17,15
1023	adde	25,25,18
1024	mulhwu	18,16,15
1025	adde	26,26,19
1026
1027	mulhwu	19,17,15
1028	addc	25,25,20
1029	mullw	20,17,16
1030	adde	26,26,21
1031	mulhwu	21,17,16
1032	addze	27,0
1033	addc	26,26,18
1034	.long	0x7c062040
1035	adde	27,27,19
1036
1037	addc	27,27,20
1038	sub	18,6,8
1039	addze	28,0
1040	add	28,28,21
1041
1042	beq	.Lsqr8x_outer_break
1043
1044	mr	7,9
1045	lwz	9,4*1(5)
1046	lwz	10,4*2(5)
1047	lwz	11,4*3(5)
1048	lwz	12,4*4(5)
1049	lwz	14,4*5(5)
1050	lwz	15,4*6(5)
1051	lwz	16,4*7(5)
1052	lwz	17,4*8(5)
1053	addc	22,22,9
1054	lwz	9,4*1(4)
1055	adde	23,23,10
1056	lwz	10,4*2(4)
1057	adde	24,24,11
1058	lwz	11,4*3(4)
1059	adde	25,25,12
1060	lwz	12,4*4(4)
1061	adde	26,26,14
1062	lwz	14,4*5(4)
1063	adde	27,27,15
1064	lwz	15,4*6(4)
1065	adde	28,28,16
1066	lwz	16,4*7(4)
1067	subi	3,4,4*7
1068	addze	29,17
1069	lwzu	17,4*8(4)
1070
1071	li	30,0
1072	b	.Lsqr8x_mul
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096.align	5
1097.Lsqr8x_mul:
1098	mullw	18,9,7
1099	addze	31,0
1100	mullw	19,10,7
1101	addi	30,30,4
1102	mullw	20,11,7
1103	andi.	30,30,4*8-1
1104	mullw	21,12,7
1105	addc	22,22,18
1106	mullw	18,14,7
1107	adde	23,23,19
1108	mullw	19,15,7
1109	adde	24,24,20
1110	mullw	20,16,7
1111	adde	25,25,21
1112	mullw	21,17,7
1113	adde	26,26,18
1114	mulhwu	18,9,7
1115	adde	27,27,19
1116	mulhwu	19,10,7
1117	adde	28,28,20
1118	mulhwu	20,11,7
1119	adde	29,29,21
1120	mulhwu	21,12,7
1121	addze	31,31
1122	stwu	22,4(5)
1123	addc	22,23,18
1124	mulhwu	18,14,7
1125	adde	23,24,19
1126	mulhwu	19,15,7
1127	adde	24,25,20
1128	mulhwu	20,16,7
1129	adde	25,26,21
1130	mulhwu	21,17,7
1131	lwzx	7,3,30
1132	adde	26,27,18
1133	adde	27,28,19
1134	adde	28,29,20
1135	adde	29,31,21
1136
1137	bne	.Lsqr8x_mul
1138
1139
1140	.long	0x7c043040
1141	beq	.Lsqr8x_break
1142
1143	lwz	9,4*1(5)
1144	lwz	10,4*2(5)
1145	lwz	11,4*3(5)
1146	lwz	12,4*4(5)
1147	lwz	14,4*5(5)
1148	lwz	15,4*6(5)
1149	lwz	16,4*7(5)
1150	lwz	17,4*8(5)
1151	addc	22,22,9
1152	lwz	9,4*1(4)
1153	adde	23,23,10
1154	lwz	10,4*2(4)
1155	adde	24,24,11
1156	lwz	11,4*3(4)
1157	adde	25,25,12
1158	lwz	12,4*4(4)
1159	adde	26,26,14
1160	lwz	14,4*5(4)
1161	adde	27,27,15
1162	lwz	15,4*6(4)
1163	adde	28,28,16
1164	lwz	16,4*7(4)
1165	adde	29,29,17
1166	lwzu	17,4*8(4)
1167
1168	b	.Lsqr8x_mul
1169
1170.align	5
1171.Lsqr8x_break:
1172	lwz	9,4*8(3)
1173	addi	4,3,4*15
1174	lwz	10,4*9(3)
1175	sub.	18,6,4
1176	lwz	11,4*10(3)
1177	sub	19,5,18
1178	lwz	12,4*11(3)
1179	lwz	14,4*12(3)
1180	lwz	15,4*13(3)
1181	lwz	16,4*14(3)
1182	lwz	17,4*15(3)
1183	beq	.Lsqr8x_outer_loop
1184
1185	stw	22,4*1(5)
1186	lwz	22,4*1(19)
1187	stw	23,4*2(5)
1188	lwz	23,4*2(19)
1189	stw	24,4*3(5)
1190	lwz	24,4*3(19)
1191	stw	25,4*4(5)
1192	lwz	25,4*4(19)
1193	stw	26,4*5(5)
1194	lwz	26,4*5(19)
1195	stw	27,4*6(5)
1196	lwz	27,4*6(19)
1197	stw	28,4*7(5)
1198	lwz	28,4*7(19)
1199	stw	29,4*8(5)
1200	lwz	29,4*8(19)
1201	mr	5,19
1202	b	.Lsqr8x_outer_loop
1203
1204.align	5
1205.Lsqr8x_outer_break:
1206
1207
1208	lwz	10,4*1(18)
1209	lwz	12,4*2(18)
1210	lwz	15,4*3(18)
1211	lwz	17,4*4(18)
1212	addi	4,18,4*4
1213
1214	lwz	19,4*13(1)
1215	lwz	20,4*14(1)
1216	lwz	21,4*15(1)
1217	lwz	18,4*16(1)
1218
1219	stw	22,4*1(5)
1220	srwi	30,8,4
1221	stw	23,4*2(5)
1222	subi	30,30,1
1223	stw	24,4*3(5)
1224	stw	25,4*4(5)
1225	stw	26,4*5(5)
1226	stw	27,4*6(5)
1227	stw	28,4*7(5)
1228
1229	addi	5,1,4*11
1230	mullw	22,10,10
1231	mulhwu	10,10,10
1232	add	23,19,19
1233	srwi	19,19,32-1
1234	mullw	11,12,12
1235	mulhwu	12,12,12
1236	addc	23,23,10
1237	add	24,20,20
1238	srwi	20,20,32-1
1239	add	25,21,21
1240	srwi	21,21,32-1
1241	or	24,24,19
1242
1243	mtctr	30
1244.Lsqr4x_shift_n_add:
1245	mullw	14,15,15
1246	mulhwu	15,15,15
1247	lwz	19,4*6(5)
1248	lwz	10,4*1(4)
1249	adde	24,24,11
1250	add	26,18,18
1251	srwi	18,18,32-1
1252	or	25,25,20
1253	lwz	20,4*7(5)
1254	adde	25,25,12
1255	lwz	12,4*2(4)
1256	add	27,19,19
1257	srwi	19,19,32-1
1258	or	26,26,21
1259	lwz	21,4*8(5)
1260	mullw	16,17,17
1261	mulhwu	17,17,17
1262	adde	26,26,14
1263	add	28,20,20
1264	srwi	20,20,32-1
1265	or	27,27,18
1266	lwz	18,4*9(5)
1267	adde	27,27,15
1268	lwz	15,4*3(4)
1269	add	29,21,21
1270	srwi	21,21,32-1
1271	or	28,28,19
1272	lwz	19,4*10(5)
1273	mullw	9,10,10
1274	mulhwu	10,10,10
1275	adde	28,28,16
1276	stw	22,4*1(5)
1277	add	22,18,18
1278	srwi	18,18,32-1
1279	or	29,29,20
1280	lwz	20,4*11(5)
1281	adde	29,29,17
1282	lwzu	17,4*4(4)
1283	stw	23,4*2(5)
1284	add	23,19,19
1285	srwi	19,19,32-1
1286	or	22,22,21
1287	lwz	21,4*12(5)
1288	mullw	11,12,12
1289	mulhwu	12,12,12
1290	adde	22,22,9
1291	stw	24,4*3(5)
1292	add	24,20,20
1293	srwi	20,20,32-1
1294	or	23,23,18
1295	lwz	18,4*13(5)
1296	adde	23,23,10
1297	stw	25,4*4(5)
1298	stw	26,4*5(5)
1299	stw	27,4*6(5)
1300	stw	28,4*7(5)
1301	stwu	29,4*8(5)
1302	add	25,21,21
1303	srwi	21,21,32-1
1304	or	24,24,19
1305	bdnz	.Lsqr4x_shift_n_add
1306	lwz	4,4*7(1)
1307	lwz	7,4*8(1)
1308
1309	mullw	14,15,15
1310	mulhwu	15,15,15
1311	stw	22,4*1(5)
1312	lwz	22,4*12(1)
1313	lwz	19,4*6(5)
1314	adde	24,24,11
1315	add	26,18,18
1316	srwi	18,18,32-1
1317	or	25,25,20
1318	lwz	20,4*7(5)
1319	adde	25,25,12
1320	add	27,19,19
1321	srwi	19,19,32-1
1322	or	26,26,21
1323	mullw	16,17,17
1324	mulhwu	17,17,17
1325	adde	26,26,14
1326	add	28,20,20
1327	srwi	20,20,32-1
1328	or	27,27,18
1329	stw	23,4*2(5)
1330	lwz	23,4*13(1)
1331	adde	27,27,15
1332	or	28,28,19
1333	lwz	9,4*1(4)
1334	lwz	10,4*2(4)
1335	adde	28,28,16
1336	lwz	11,4*3(4)
1337	lwz	12,4*4(4)
1338	adde	29,17,20
1339	lwz	14,4*5(4)
1340	lwz	15,4*6(4)
1341
1342
1343
1344	mullw	31,7,22
1345	li	30,8
1346	lwz	16,4*7(4)
1347	add	6,4,8
1348	lwzu	17,4*8(4)
1349	stw	24,4*3(5)
1350	lwz	24,4*14(1)
1351	stw	25,4*4(5)
1352	lwz	25,4*15(1)
1353	stw	26,4*5(5)
1354	lwz	26,4*16(1)
1355	stw	27,4*6(5)
1356	lwz	27,4*17(1)
1357	stw	28,4*7(5)
1358	lwz	28,4*18(1)
1359	stw	29,4*8(5)
1360	lwz	29,4*19(1)
1361	addi	5,1,4*11
1362	mtctr	30
1363	b	.Lsqr8x_reduction
1364
1365.align	5
1366.Lsqr8x_reduction:
1367
1368	mullw	19,10,31
1369	mullw	20,11,31
1370	stwu	31,4(5)
1371	mullw	21,12,31
1372
1373	addic	22,22,-1
1374	mullw	18,14,31
1375	adde	22,23,19
1376	mullw	19,15,31
1377	adde	23,24,20
1378	mullw	20,16,31
1379	adde	24,25,21
1380	mullw	21,17,31
1381	adde	25,26,18
1382	mulhwu	18,9,31
1383	adde	26,27,19
1384	mulhwu	19,10,31
1385	adde	27,28,20
1386	mulhwu	20,11,31
1387	adde	28,29,21
1388	mulhwu	21,12,31
1389	addze	29,0
1390	addc	22,22,18
1391	mulhwu	18,14,31
1392	adde	23,23,19
1393	mulhwu	19,15,31
1394	adde	24,24,20
1395	mulhwu	20,16,31
1396	adde	25,25,21
1397	mulhwu	21,17,31
1398	mullw	31,7,22
1399	adde	26,26,18
1400	adde	27,27,19
1401	adde	28,28,20
1402	adde	29,29,21
1403	bdnz	.Lsqr8x_reduction
1404
1405	lwz	18,4*1(5)
1406	lwz	19,4*2(5)
1407	lwz	20,4*3(5)
1408	lwz	21,4*4(5)
1409	subi	3,5,4*7
1410	.long	0x7c062040
1411	addc	22,22,18
1412	lwz	18,4*5(5)
1413	adde	23,23,19
1414	lwz	19,4*6(5)
1415	adde	24,24,20
1416	lwz	20,4*7(5)
1417	adde	25,25,21
1418	lwz	21,4*8(5)
1419	adde	26,26,18
1420	adde	27,27,19
1421	adde	28,28,20
1422	adde	29,29,21
1423
1424	beq	.Lsqr8x8_post_condition
1425
1426	lwz	7,4*0(3)
1427	lwz	9,4*1(4)
1428	lwz	10,4*2(4)
1429	lwz	11,4*3(4)
1430	lwz	12,4*4(4)
1431	lwz	14,4*5(4)
1432	lwz	15,4*6(4)
1433	lwz	16,4*7(4)
1434	lwzu	17,4*8(4)
1435	li	30,0
1436
1437.align	5
1438.Lsqr8x_tail:
1439	mullw	18,9,7
1440	addze	31,0
1441	mullw	19,10,7
1442	addi	30,30,4
1443	mullw	20,11,7
1444	andi.	30,30,4*8-1
1445	mullw	21,12,7
1446	addc	22,22,18
1447	mullw	18,14,7
1448	adde	23,23,19
1449	mullw	19,15,7
1450	adde	24,24,20
1451	mullw	20,16,7
1452	adde	25,25,21
1453	mullw	21,17,7
1454	adde	26,26,18
1455	mulhwu	18,9,7
1456	adde	27,27,19
1457	mulhwu	19,10,7
1458	adde	28,28,20
1459	mulhwu	20,11,7
1460	adde	29,29,21
1461	mulhwu	21,12,7
1462	addze	31,31
1463	stwu	22,4(5)
1464	addc	22,23,18
1465	mulhwu	18,14,7
1466	adde	23,24,19
1467	mulhwu	19,15,7
1468	adde	24,25,20
1469	mulhwu	20,16,7
1470	adde	25,26,21
1471	mulhwu	21,17,7
1472	lwzx	7,3,30
1473	adde	26,27,18
1474	adde	27,28,19
1475	adde	28,29,20
1476	adde	29,31,21
1477
1478	bne	.Lsqr8x_tail
1479
1480
1481	lwz	9,4*1(5)
1482	lwz	31,4*10(1)
1483	.long	0x7c062040
1484	lwz	10,4*2(5)
1485	sub	20,6,8
1486	lwz	11,4*3(5)
1487	lwz	12,4*4(5)
1488	lwz	14,4*5(5)
1489	lwz	15,4*6(5)
1490	lwz	16,4*7(5)
1491	lwz	17,4*8(5)
1492	beq	.Lsqr8x_tail_break
1493
1494	addc	22,22,9
1495	lwz	9,4*1(4)
1496	adde	23,23,10
1497	lwz	10,4*2(4)
1498	adde	24,24,11
1499	lwz	11,4*3(4)
1500	adde	25,25,12
1501	lwz	12,4*4(4)
1502	adde	26,26,14
1503	lwz	14,4*5(4)
1504	adde	27,27,15
1505	lwz	15,4*6(4)
1506	adde	28,28,16
1507	lwz	16,4*7(4)
1508	adde	29,29,17
1509	lwzu	17,4*8(4)
1510
1511	b	.Lsqr8x_tail
1512
1513.align	5
1514.Lsqr8x_tail_break:
1515	lwz	7,4*8(1)
1516	lwz	21,4*9(1)
1517	addi	30,5,4*8
1518
1519	addic	31,31,-1
1520	adde	18,22,9
1521	lwz	22,4*8(3)
1522	lwz	9,4*1(20)
1523	adde	19,23,10
1524	lwz	23,4*9(3)
1525	lwz	10,4*2(20)
1526	adde	24,24,11
1527	lwz	11,4*3(20)
1528	adde	25,25,12
1529	lwz	12,4*4(20)
1530	adde	26,26,14
1531	lwz	14,4*5(20)
1532	adde	27,27,15
1533	lwz	15,4*6(20)
1534	adde	28,28,16
1535	lwz	16,4*7(20)
1536	adde	29,29,17
1537	lwz	17,4*8(20)
1538	addi	4,20,4*8
1539	addze	20,0
1540	mullw	31,7,22
1541	stw	18,4*1(5)
1542	.long	0x7c1ea840
1543	stw	19,4*2(5)
1544	li	30,8
1545	stw	24,4*3(5)
1546	lwz	24,4*10(3)
1547	stw	25,4*4(5)
1548	lwz	25,4*11(3)
1549	stw	26,4*5(5)
1550	lwz	26,4*12(3)
1551	stw	27,4*6(5)
1552	lwz	27,4*13(3)
1553	stw	28,4*7(5)
1554	lwz	28,4*14(3)
1555	stw	29,4*8(5)
1556	lwz	29,4*15(3)
1557	stw	20,4*10(1)
1558	addi	5,3,4*7
1559	mtctr	30
1560	bne	.Lsqr8x_reduction
1561
1562
1563
1564
1565
1566
1567	lwz	3,4*6(1)
1568	srwi	30,8,5
1569	mr	7,5
1570	addi	5,5,4*8
1571	subi	30,30,1
1572	subfc	18,9,22
1573	subfe	19,10,23
1574	mr	31,20
1575	mr	6,3
1576
1577	mtctr	30
1578	b	.Lsqr8x_sub
1579
1580.align	5
1581.Lsqr8x_sub:
1582	lwz	9,4*1(4)
1583	lwz	22,4*1(5)
1584	lwz	10,4*2(4)
1585	lwz	23,4*2(5)
1586	subfe	20,11,24
1587	lwz	11,4*3(4)
1588	lwz	24,4*3(5)
1589	subfe	21,12,25
1590	lwz	12,4*4(4)
1591	lwz	25,4*4(5)
1592	stw	18,4*1(3)
1593	subfe	18,14,26
1594	lwz	14,4*5(4)
1595	lwz	26,4*5(5)
1596	stw	19,4*2(3)
1597	subfe	19,15,27
1598	lwz	15,4*6(4)
1599	lwz	27,4*6(5)
1600	stw	20,4*3(3)
1601	subfe	20,16,28
1602	lwz	16,4*7(4)
1603	lwz	28,4*7(5)
1604	stw	21,4*4(3)
1605	subfe	21,17,29
1606	lwzu	17,4*8(4)
1607	lwzu	29,4*8(5)
1608	stw	18,4*5(3)
1609	subfe	18,9,22
1610	stw	19,4*6(3)
1611	subfe	19,10,23
1612	stw	20,4*7(3)
1613	stwu	21,4*8(3)
1614	bdnz	.Lsqr8x_sub
1615
1616	srwi	30,8,4
1617	lwz	9,4*1(6)
1618	lwz	22,4*1(7)
1619	subi	30,30,1
1620	lwz	10,4*2(6)
1621	lwz	23,4*2(7)
1622	subfe	20,11,24
1623	lwz	11,4*3(6)
1624	lwz	24,4*3(7)
1625	subfe	21,12,25
1626	lwz	12,4*4(6)
1627	lwzu	25,4*4(7)
1628	stw	18,4*1(3)
1629	subfe	18,14,26
1630	stw	19,4*2(3)
1631	subfe	19,15,27
1632	stw	20,4*3(3)
1633	subfe	20,16,28
1634	stw	21,4*4(3)
1635	subfe	21,17,29
1636	stw	18,4*5(3)
1637	subfe	31,0,31
1638	stw	19,4*6(3)
1639	stw	20,4*7(3)
1640	stw	21,4*8(3)
1641
1642	addi	5,1,4*11
1643	mtctr	30
1644
1645.Lsqr4x_cond_copy:
1646	andc	9,9,31
1647	stw	0,-4*3(7)
1648	and	22,22,31
1649	stw	0,-4*2(7)
1650	andc	10,10,31
1651	stw	0,-4*1(7)
1652	and	23,23,31
1653	stw	0,-4*0(7)
1654	andc	11,11,31
1655	stw	0,4*1(5)
1656	and	24,24,31
1657	stw	0,4*2(5)
1658	andc	12,12,31
1659	stw	0,4*3(5)
1660	and	25,25,31
1661	stwu	0,4*4(5)
1662	or	18,9,22
1663	lwz	9,4*5(6)
1664	lwz	22,4*1(7)
1665	or	19,10,23
1666	lwz	10,4*6(6)
1667	lwz	23,4*2(7)
1668	or	20,11,24
1669	lwz	11,4*7(6)
1670	lwz	24,4*3(7)
1671	or	21,12,25
1672	lwz	12,4*8(6)
1673	lwzu	25,4*4(7)
1674	stw	18,4*1(6)
1675	stw	19,4*2(6)
1676	stw	20,4*3(6)
1677	stwu	21,4*4(6)
1678	bdnz	.Lsqr4x_cond_copy
1679
1680	lwz	4,0(1)
1681	andc	9,9,31
1682	and	22,22,31
1683	andc	10,10,31
1684	and	23,23,31
1685	andc	11,11,31
1686	and	24,24,31
1687	andc	12,12,31
1688	and	25,25,31
1689	or	18,9,22
1690	or	19,10,23
1691	or	20,11,24
1692	or	21,12,25
1693	stw	18,4*1(6)
1694	stw	19,4*2(6)
1695	stw	20,4*3(6)
1696	stw	21,4*4(6)
1697
1698	b	.Lsqr8x_done
1699
1700.align	5
1701.Lsqr8x8_post_condition:
1702	lwz	3,4*6(1)
1703	lwz	4,0(1)
1704	addze	31,0
1705
1706
1707	subfc	22,9,22
1708	subfe	23,10,23
1709	stw	0,4*12(1)
1710	stw	0,4*13(1)
1711	subfe	24,11,24
1712	stw	0,4*14(1)
1713	stw	0,4*15(1)
1714	subfe	25,12,25
1715	stw	0,4*16(1)
1716	stw	0,4*17(1)
1717	subfe	26,14,26
1718	stw	0,4*18(1)
1719	stw	0,4*19(1)
1720	subfe	27,15,27
1721	stw	0,4*20(1)
1722	stw	0,4*21(1)
1723	subfe	28,16,28
1724	stw	0,4*22(1)
1725	stw	0,4*23(1)
1726	subfe	29,17,29
1727	stw	0,4*24(1)
1728	stw	0,4*25(1)
1729	subfe	31,0,31
1730	stw	0,4*26(1)
1731	stw	0,4*27(1)
1732
1733	and	9,9,31
1734	and	10,10,31
1735	addc	22,22,9
1736	and	11,11,31
1737	adde	23,23,10
1738	and	12,12,31
1739	adde	24,24,11
1740	and	14,14,31
1741	adde	25,25,12
1742	and	15,15,31
1743	adde	26,26,14
1744	and	16,16,31
1745	adde	27,27,15
1746	and	17,17,31
1747	adde	28,28,16
1748	adde	29,29,17
1749	stw	22,4*1(3)
1750	stw	23,4*2(3)
1751	stw	24,4*3(3)
1752	stw	25,4*4(3)
1753	stw	26,4*5(3)
1754	stw	27,4*6(3)
1755	stw	28,4*7(3)
1756	stw	29,4*8(3)
1757
1758.Lsqr8x_done:
1759	stw	0,4*8(1)
1760	stw	0,4*10(1)
1761
1762	lwz	14,-4*18(4)
1763	li	3,1
1764	lwz	15,-4*17(4)
1765	lwz	16,-4*16(4)
1766	lwz	17,-4*15(4)
1767	lwz	18,-4*14(4)
1768	lwz	19,-4*13(4)
1769	lwz	20,-4*12(4)
1770	lwz	21,-4*11(4)
1771	lwz	22,-4*10(4)
1772	lwz	23,-4*9(4)
1773	lwz	24,-4*8(4)
1774	lwz	25,-4*7(4)
1775	lwz	26,-4*6(4)
1776	lwz	27,-4*5(4)
1777	lwz	28,-4*4(4)
1778	lwz	29,-4*3(4)
1779	lwz	30,-4*2(4)
1780	lwz	31,-4*1(4)
1781	mr	1,4
1782	blr
1783.long	0
1784.byte	0,12,4,0x20,0x80,18,6,0
1785.long	0
1786.size	__bn_sqr8x_mont,.-__bn_sqr8x_mont
1787.byte	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,80,80,67,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
1788.align	2
1789