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