1	.SPACE $PRIVATE$
2	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
3	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
4	.SPACE $TEXT$
5	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
6	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
7	.IMPORT $global$,DATA
8	.IMPORT $$dyncall,MILLICODE
9; gcc_compiled.:
10	.SPACE $TEXT$
11	.SUBSPA $CODE$
12
13	.align 4
14	.EXPORT bn_mul_add_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR
15bn_mul_add_words
16	.PROC
17	.CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=4
18	.ENTRY
19	stw %r2,-20(0,%r30)
20	stwm %r4,64(0,%r30)
21	copy %r24,%r31
22	stw %r3,-60(0,%r30)
23	ldi 0,%r20
24	ldo 12(%r26),%r2
25	stw %r23,-16(0,%r30)
26	copy %r25,%r3
27	ldo 12(%r3),%r1
28	fldws -16(0,%r30),%fr8L
29L$0010
30	copy %r20,%r25
31	ldi 0,%r24
32	fldws 0(0,%r3),%fr9L
33	ldw 0(0,%r26),%r19
34	xmpyu %fr8L,%fr9L,%fr9
35	fstds %fr9,-16(0,%r30)
36	copy %r19,%r23
37	ldw -16(0,%r30),%r28
38	ldw -12(0,%r30),%r29
39	ldi 0,%r22
40	add %r23,%r29,%r29
41	addc %r22,%r28,%r28
42	add %r25,%r29,%r29
43	addc %r24,%r28,%r28
44	copy %r28,%r21
45	ldi 0,%r20
46	copy %r21,%r20
47	addib,= -1,%r31,L$0011
48	stw %r29,0(0,%r26)
49	copy %r20,%r25
50	ldi 0,%r24
51	fldws -8(0,%r1),%fr9L
52	ldw -8(0,%r2),%r19
53	xmpyu %fr8L,%fr9L,%fr9
54	fstds %fr9,-16(0,%r30)
55	copy %r19,%r23
56	ldw -16(0,%r30),%r28
57	ldw -12(0,%r30),%r29
58	ldi 0,%r22
59	add %r23,%r29,%r29
60	addc %r22,%r28,%r28
61	add %r25,%r29,%r29
62	addc %r24,%r28,%r28
63	copy %r28,%r21
64	ldi 0,%r20
65	copy %r21,%r20
66	addib,= -1,%r31,L$0011
67	stw %r29,-8(0,%r2)
68	copy %r20,%r25
69	ldi 0,%r24
70	fldws -4(0,%r1),%fr9L
71	ldw -4(0,%r2),%r19
72	xmpyu %fr8L,%fr9L,%fr9
73	fstds %fr9,-16(0,%r30)
74	copy %r19,%r23
75	ldw -16(0,%r30),%r28
76	ldw -12(0,%r30),%r29
77	ldi 0,%r22
78	add %r23,%r29,%r29
79	addc %r22,%r28,%r28
80	add %r25,%r29,%r29
81	addc %r24,%r28,%r28
82	copy %r28,%r21
83	ldi 0,%r20
84	copy %r21,%r20
85	addib,= -1,%r31,L$0011
86	stw %r29,-4(0,%r2)
87	copy %r20,%r25
88	ldi 0,%r24
89	fldws 0(0,%r1),%fr9L
90	ldw 0(0,%r2),%r19
91	xmpyu %fr8L,%fr9L,%fr9
92	fstds %fr9,-16(0,%r30)
93	copy %r19,%r23
94	ldw -16(0,%r30),%r28
95	ldw -12(0,%r30),%r29
96	ldi 0,%r22
97	add %r23,%r29,%r29
98	addc %r22,%r28,%r28
99	add %r25,%r29,%r29
100	addc %r24,%r28,%r28
101	copy %r28,%r21
102	ldi 0,%r20
103	copy %r21,%r20
104	addib,= -1,%r31,L$0011
105	stw %r29,0(0,%r2)
106	ldo 16(%r1),%r1
107	ldo 16(%r3),%r3
108	ldo 16(%r2),%r2
109	bl L$0010,0
110	ldo 16(%r26),%r26
111L$0011
112	copy %r20,%r28
113	ldw -84(0,%r30),%r2
114	ldw -60(0,%r30),%r3
115	bv 0(%r2)
116	ldwm -64(0,%r30),%r4
117	.EXIT
118	.PROCEND
119	.align 4
120	.EXPORT bn_mul_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR
121bn_mul_words
122	.PROC
123	.CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=3
124	.ENTRY
125	stw %r2,-20(0,%r30)
126	copy %r25,%r2
127	stwm %r4,64(0,%r30)
128	copy %r24,%r19
129	ldi 0,%r28
130	stw %r23,-16(0,%r30)
131	ldo 12(%r26),%r31
132	ldo 12(%r2),%r29
133	fldws -16(0,%r30),%fr8L
134L$0026
135	fldws 0(0,%r2),%fr9L
136	xmpyu %fr8L,%fr9L,%fr9
137	fstds %fr9,-16(0,%r30)
138	copy %r28,%r21
139	ldi 0,%r20
140	ldw -16(0,%r30),%r24
141	ldw -12(0,%r30),%r25
142	add %r21,%r25,%r25
143	addc %r20,%r24,%r24
144	copy %r24,%r23
145	ldi 0,%r22
146	copy %r23,%r28
147	addib,= -1,%r19,L$0027
148	stw %r25,0(0,%r26)
149	fldws -8(0,%r29),%fr9L
150	xmpyu %fr8L,%fr9L,%fr9
151	fstds %fr9,-16(0,%r30)
152	copy %r28,%r21
153	ldi 0,%r20
154	ldw -16(0,%r30),%r24
155	ldw -12(0,%r30),%r25
156	add %r21,%r25,%r25
157	addc %r20,%r24,%r24
158	copy %r24,%r23
159	ldi 0,%r22
160	copy %r23,%r28
161	addib,= -1,%r19,L$0027
162	stw %r25,-8(0,%r31)
163	fldws -4(0,%r29),%fr9L
164	xmpyu %fr8L,%fr9L,%fr9
165	fstds %fr9,-16(0,%r30)
166	copy %r28,%r21
167	ldi 0,%r20
168	ldw -16(0,%r30),%r24
169	ldw -12(0,%r30),%r25
170	add %r21,%r25,%r25
171	addc %r20,%r24,%r24
172	copy %r24,%r23
173	ldi 0,%r22
174	copy %r23,%r28
175	addib,= -1,%r19,L$0027
176	stw %r25,-4(0,%r31)
177	fldws 0(0,%r29),%fr9L
178	xmpyu %fr8L,%fr9L,%fr9
179	fstds %fr9,-16(0,%r30)
180	copy %r28,%r21
181	ldi 0,%r20
182	ldw -16(0,%r30),%r24
183	ldw -12(0,%r30),%r25
184	add %r21,%r25,%r25
185	addc %r20,%r24,%r24
186	copy %r24,%r23
187	ldi 0,%r22
188	copy %r23,%r28
189	addib,= -1,%r19,L$0027
190	stw %r25,0(0,%r31)
191	ldo 16(%r29),%r29
192	ldo 16(%r2),%r2
193	ldo 16(%r31),%r31
194	bl L$0026,0
195	ldo 16(%r26),%r26
196L$0027
197	ldw -84(0,%r30),%r2
198	bv 0(%r2)
199	ldwm -64(0,%r30),%r4
200	.EXIT
201	.PROCEND
202	.align 4
203	.EXPORT bn_sqr_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR
204bn_sqr_words
205	.PROC
206	.CALLINFO FRAME=0,NO_CALLS
207	.ENTRY
208	ldo 28(%r26),%r19
209	ldo 12(%r25),%r28
210L$0042
211	fldws 0(0,%r25),%fr8L
212	fldws 0(0,%r25),%fr8R
213	xmpyu %fr8L,%fr8R,%fr8
214	fstds %fr8,-16(0,%r30)
215	ldw -16(0,%r30),%r22
216	ldw -12(0,%r30),%r23
217	stw %r23,0(0,%r26)
218	copy %r22,%r21
219	ldi 0,%r20
220	addib,= -1,%r24,L$0049
221	stw %r21,-24(0,%r19)
222	fldws -8(0,%r28),%fr8L
223	fldws -8(0,%r28),%fr8R
224	xmpyu %fr8L,%fr8R,%fr8
225	fstds %fr8,-16(0,%r30)
226	ldw -16(0,%r30),%r22
227	ldw -12(0,%r30),%r23
228	stw %r23,-20(0,%r19)
229	copy %r22,%r21
230	ldi 0,%r20
231	addib,= -1,%r24,L$0049
232	stw %r21,-16(0,%r19)
233	fldws -4(0,%r28),%fr8L
234	fldws -4(0,%r28),%fr8R
235	xmpyu %fr8L,%fr8R,%fr8
236	fstds %fr8,-16(0,%r30)
237	ldw -16(0,%r30),%r22
238	ldw -12(0,%r30),%r23
239	stw %r23,-12(0,%r19)
240	copy %r22,%r21
241	ldi 0,%r20
242	addib,= -1,%r24,L$0049
243	stw %r21,-8(0,%r19)
244	fldws 0(0,%r28),%fr8L
245	fldws 0(0,%r28),%fr8R
246	xmpyu %fr8L,%fr8R,%fr8
247	fstds %fr8,-16(0,%r30)
248	ldw -16(0,%r30),%r22
249	ldw -12(0,%r30),%r23
250	stw %r23,-4(0,%r19)
251	copy %r22,%r21
252	ldi 0,%r20
253	addib,= -1,%r24,L$0049
254	stw %r21,0(0,%r19)
255	ldo 16(%r28),%r28
256	ldo 16(%r25),%r25
257	ldo 32(%r19),%r19
258	bl L$0042,0
259	ldo 32(%r26),%r26
260L$0049
261	bv,n 0(%r2)
262	.EXIT
263	.PROCEND
264	.IMPORT BN_num_bits_word,CODE
265	.IMPORT fprintf,CODE
266	.IMPORT __iob,DATA
267	.SPACE $TEXT$
268	.SUBSPA $LIT$
269
270	.align 4
271L$C0000
272	.STRING "Division would overflow (%d)\x0a\x00"
273	.IMPORT abort,CODE
274	.SPACE $TEXT$
275	.SUBSPA $CODE$
276
277	.align 4
278	.EXPORT bn_div64,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,RTNVAL=GR
279bn_div64
280	.PROC
281	.CALLINFO FRAME=128,CALLS,SAVE_RP,ENTRY_GR=8
282	.ENTRY
283	stw %r2,-20(0,%r30)
284	stwm %r8,128(0,%r30)
285	stw %r7,-124(0,%r30)
286	stw %r4,-112(0,%r30)
287	stw %r3,-108(0,%r30)
288	copy %r26,%r3
289	copy %r25,%r4
290	stw %r6,-120(0,%r30)
291	ldi 0,%r7
292	stw %r5,-116(0,%r30)
293	movb,<> %r24,%r5,L$0051
294	ldi 2,%r6
295	bl L$0068,0
296	ldi -1,%r28
297L$0051
298	.CALL ARGW0=GR
299	bl BN_num_bits_word,%r2
300	copy %r5,%r26
301	copy %r28,%r24
302	ldi 32,%r19
303	comb,= %r19,%r24,L$0052
304	subi 31,%r24,%r19
305	mtsar %r19
306	zvdepi 1,32,%r19
307	comb,>>= %r19,%r3,L$0052
308	addil LR'__iob-$global$+32,%r27
309	ldo RR'__iob-$global$+32(%r1),%r26
310	ldil LR'L$C0000,%r25
311	.CALL ARGW0=GR,ARGW1=GR,ARGW2=GR
312	bl fprintf,%r2
313	ldo RR'L$C0000(%r25),%r25
314	.CALL 
315	bl abort,%r2
316	nop
317L$0052
318	comb,>> %r5,%r3,L$0053
319	subi 32,%r24,%r24
320	sub %r3,%r5,%r3
321L$0053
322	comib,= 0,%r24,L$0054
323	subi 31,%r24,%r19
324	mtsar %r19
325	zvdep %r5,32,%r5
326	zvdep %r3,32,%r21
327	subi 32,%r24,%r20
328	mtsar %r20
329	vshd 0,%r4,%r20
330	or %r21,%r20,%r3
331	mtsar %r19
332	zvdep %r4,32,%r4
333L$0054
334	extru %r5,15,16,%r23
335	extru %r5,31,16,%r28
336L$0055
337	extru %r3,15,16,%r19
338	comb,<> %r23,%r19,L$0058
339	copy %r3,%r26
340	bl L$0059,0
341	zdepi -1,31,16,%r29
342L$0058
343	.IMPORT $$divU,MILLICODE
344	bl $$divU,%r31
345	copy %r23,%r25
346L$0059
347	stw %r29,-16(0,%r30)
348	fldws -16(0,%r30),%fr10L
349	stw %r28,-16(0,%r30)
350	fldws -16(0,%r30),%fr10R
351	stw %r23,-16(0,%r30)
352	xmpyu %fr10L,%fr10R,%fr8
353	fldws -16(0,%r30),%fr10R
354	fstws %fr8R,-16(0,%r30)
355	xmpyu %fr10L,%fr10R,%fr9
356	ldw -16(0,%r30),%r8
357	fstws %fr9R,-16(0,%r30)
358	copy %r8,%r22
359	ldw -16(0,%r30),%r8
360	extru %r4,15,16,%r24
361	copy %r8,%r21
362L$0060
363	sub %r3,%r21,%r20
364	copy %r20,%r19
365	depi 0,31,16,%r19
366	comib,<> 0,%r19,L$0061
367	zdep %r20,15,16,%r19
368	addl %r19,%r24,%r19
369	comb,>>= %r19,%r22,L$0061
370	sub %r22,%r28,%r22
371	sub %r21,%r23,%r21
372	bl L$0060,0
373	ldo -1(%r29),%r29
374L$0061
375	stw %r29,-16(0,%r30)
376	fldws -16(0,%r30),%fr10L
377	stw %r28,-16(0,%r30)
378	fldws -16(0,%r30),%fr10R
379	xmpyu %fr10L,%fr10R,%fr8
380	fstws %fr8R,-16(0,%r30)
381	ldw -16(0,%r30),%r8
382	stw %r23,-16(0,%r30)
383	fldws -16(0,%r30),%fr10R
384	copy %r8,%r19
385	xmpyu %fr10L,%fr10R,%fr8
386	fstws %fr8R,-16(0,%r30)
387	extru %r19,15,16,%r20
388	ldw -16(0,%r30),%r8
389	zdep %r19,15,16,%r19
390	addl %r8,%r20,%r20
391	comclr,<<= %r19,%r4,0
392	addi 1,%r20,%r20
393	comb,<<= %r20,%r3,L$0066
394	sub %r4,%r19,%r4
395	addl %r3,%r5,%r3
396	ldo -1(%r29),%r29
397L$0066
398	addib,= -1,%r6,L$0056
399	sub %r3,%r20,%r3
400	zdep %r29,15,16,%r7
401	shd %r3,%r4,16,%r3
402	bl L$0055,0
403	zdep %r4,15,16,%r4
404L$0056
405	or %r7,%r29,%r28
406L$0068
407	ldw -148(0,%r30),%r2
408	ldw -124(0,%r30),%r7
409	ldw -120(0,%r30),%r6
410	ldw -116(0,%r30),%r5
411	ldw -112(0,%r30),%r4
412	ldw -108(0,%r30),%r3
413	bv 0(%r2)
414	ldwm -128(0,%r30),%r8
415	.EXIT
416	.PROCEND
417