summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bn
diff options
context:
space:
mode:
authorcvs2svn <admin@example.com>2002-05-15 02:29:23 +0000
committercvs2svn <admin@example.com>2002-05-15 02:29:23 +0000
commitfd9566423b542798f5c8b06e68101a9ea5bb9885 (patch)
treef2cc037857a260afc5aaaaaa6cf62d06923c6273 /src/lib/libcrypto/bn
parent536c76cbb863bab152f19842ab88772c01e922c7 (diff)
downloadopenbsd-fd9566423b542798f5c8b06e68101a9ea5bb9885.tar.gz
openbsd-fd9566423b542798f5c8b06e68101a9ea5bb9885.tar.bz2
openbsd-fd9566423b542798f5c8b06e68101a9ea5bb9885.zip
This commit was manufactured by cvs2git to create branch 'openssl'.
Diffstat (limited to 'src/lib/libcrypto/bn')
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.s.works533
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.works/add.pl119
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.works/div.pl144
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.works/mul.pl116
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.works/mul_add.pl120
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.works/mul_c4.pl213
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.works/mul_c4.works.pl98
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.works/mul_c8.pl177
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.works/sqr.pl113
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.works/sqr_c4.pl109
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.works/sqr_c8.pl132
-rw-r--r--src/lib/libcrypto/bn/asm/alpha.works/sub.pl108
-rw-r--r--src/lib/libcrypto/bn/asm/alpha/add.pl118
-rw-r--r--src/lib/libcrypto/bn/asm/alpha/div.pl144
-rw-r--r--src/lib/libcrypto/bn/asm/alpha/mul.pl104
-rw-r--r--src/lib/libcrypto/bn/asm/alpha/mul_add.pl123
-rw-r--r--src/lib/libcrypto/bn/asm/alpha/mul_c4.pl215
-rw-r--r--src/lib/libcrypto/bn/asm/alpha/mul_c4.works.pl98
-rw-r--r--src/lib/libcrypto/bn/asm/alpha/mul_c8.pl177
-rw-r--r--src/lib/libcrypto/bn/asm/alpha/sqr.pl113
-rw-r--r--src/lib/libcrypto/bn/asm/alpha/sqr_c4.pl109
-rw-r--r--src/lib/libcrypto/bn/asm/alpha/sqr_c8.pl132
-rw-r--r--src/lib/libcrypto/bn/asm/alpha/sub.pl108
-rw-r--r--src/lib/libcrypto/bn/asm/bn-alpha.pl571
-rw-r--r--src/lib/libcrypto/bn/asm/ca.pl33
-rw-r--r--src/lib/libcrypto/bn/asm/co-alpha.pl116
-rw-r--r--src/lib/libcrypto/bn/asm/mips1.s539
-rw-r--r--src/lib/libcrypto/bn/asm/mips3.s2138
-rw-r--r--src/lib/libcrypto/bn/asm/vms.mar6695
-rw-r--r--src/lib/libcrypto/bn/asm/x86/f3
-rw-r--r--src/lib/libcrypto/bn/bn.mul19
-rw-r--r--src/lib/libcrypto/bn/divtest.c41
-rw-r--r--src/lib/libcrypto/bn/exp.c60
-rw-r--r--src/lib/libcrypto/bn/todo3
-rw-r--r--src/lib/libcrypto/bn/vms-helper.c66
35 files changed, 13707 insertions, 0 deletions
diff --git a/src/lib/libcrypto/bn/asm/alpha.s.works b/src/lib/libcrypto/bn/asm/alpha.s.works
new file mode 100644
index 0000000000..ee6c587809
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.s.works
@@ -0,0 +1,533 @@
1
2 # DEC Alpha assember
3 # The bn_div64 is actually gcc output but the other parts are hand done.
4 # Thanks to tzeruch@ceddec.com for sending me the gcc output for
5 # bn_div64.
6 # I've gone back and re-done most of routines.
7 # The key thing to remeber for the 164 CPU is that while a
8 # multiply operation takes 8 cycles, another one can only be issued
9 # after 4 cycles have elapsed. I've done modification to help
10 # improve this. Also, normally, a ld instruction will not be available
11 # for about 3 cycles.
12 .file 1 "bn_asm.c"
13 .set noat
14gcc2_compiled.:
15__gnu_compiled_c:
16 .text
17 .align 3
18 .globl bn_mul_add_words
19 .ent bn_mul_add_words
20bn_mul_add_words:
21bn_mul_add_words..ng:
22 .frame $30,0,$26,0
23 .prologue 0
24 .align 5
25 subq $18,4,$18
26 bis $31,$31,$0
27 blt $18,$43 # if we are -1, -2, -3 or -4 goto tail code
28 ldq $20,0($17) # 1 1
29 ldq $1,0($16) # 1 1
30 .align 3
31$42:
32 mulq $20,$19,$5 # 1 2 1 ######
33 ldq $21,8($17) # 2 1
34 ldq $2,8($16) # 2 1
35 umulh $20,$19,$20 # 1 2 ######
36 ldq $27,16($17) # 3 1
37 ldq $3,16($16) # 3 1
38 mulq $21,$19,$6 # 2 2 1 ######
39 ldq $28,24($17) # 4 1
40 addq $1,$5,$1 # 1 2 2
41 ldq $4,24($16) # 4 1
42 umulh $21,$19,$21 # 2 2 ######
43 cmpult $1,$5,$22 # 1 2 3 1
44 addq $20,$22,$20 # 1 3 1
45 addq $1,$0,$1 # 1 2 3 1
46 mulq $27,$19,$7 # 3 2 1 ######
47 cmpult $1,$0,$0 # 1 2 3 2
48 addq $2,$6,$2 # 2 2 2
49 addq $20,$0,$0 # 1 3 2
50 cmpult $2,$6,$23 # 2 2 3 1
51 addq $21,$23,$21 # 2 3 1
52 umulh $27,$19,$27 # 3 2 ######
53 addq $2,$0,$2 # 2 2 3 1
54 cmpult $2,$0,$0 # 2 2 3 2
55 subq $18,4,$18
56 mulq $28,$19,$8 # 4 2 1 ######
57 addq $21,$0,$0 # 2 3 2
58 addq $3,$7,$3 # 3 2 2
59 addq $16,32,$16
60 cmpult $3,$7,$24 # 3 2 3 1
61 stq $1,-32($16) # 1 2 4
62 umulh $28,$19,$28 # 4 2 ######
63 addq $27,$24,$27 # 3 3 1
64 addq $3,$0,$3 # 3 2 3 1
65 stq $2,-24($16) # 2 2 4
66 cmpult $3,$0,$0 # 3 2 3 2
67 stq $3,-16($16) # 3 2 4
68 addq $4,$8,$4 # 4 2 2
69 addq $27,$0,$0 # 3 3 2
70 cmpult $4,$8,$25 # 4 2 3 1
71 addq $17,32,$17
72 addq $28,$25,$28 # 4 3 1
73 addq $4,$0,$4 # 4 2 3 1
74 cmpult $4,$0,$0 # 4 2 3 2
75 stq $4,-8($16) # 4 2 4
76 addq $28,$0,$0 # 4 3 2
77 blt $18,$43
78
79 ldq $20,0($17) # 1 1
80 ldq $1,0($16) # 1 1
81
82 br $42
83
84 .align 4
85$45:
86 ldq $20,0($17) # 4 1
87 ldq $1,0($16) # 4 1
88 mulq $20,$19,$5 # 4 2 1
89 subq $18,1,$18
90 addq $16,8,$16
91 addq $17,8,$17
92 umulh $20,$19,$20 # 4 2
93 addq $1,$5,$1 # 4 2 2
94 cmpult $1,$5,$22 # 4 2 3 1
95 addq $20,$22,$20 # 4 3 1
96 addq $1,$0,$1 # 4 2 3 1
97 cmpult $1,$0,$0 # 4 2 3 2
98 addq $20,$0,$0 # 4 3 2
99 stq $1,-8($16) # 4 2 4
100 bgt $18,$45
101 ret $31,($26),1 # else exit
102
103 .align 4
104$43:
105 addq $18,4,$18
106 bgt $18,$45 # goto tail code
107 ret $31,($26),1 # else exit
108
109 .end bn_mul_add_words
110 .align 3
111 .globl bn_mul_words
112 .ent bn_mul_words
113bn_mul_words:
114bn_mul_words..ng:
115 .frame $30,0,$26,0
116 .prologue 0
117 .align 5
118 subq $18,4,$18
119 bis $31,$31,$0
120 blt $18,$143 # if we are -1, -2, -3 or -4 goto tail code
121 ldq $20,0($17) # 1 1
122 .align 3
123$142:
124
125 mulq $20,$19,$5 # 1 2 1 #####
126 ldq $21,8($17) # 2 1
127 ldq $27,16($17) # 3 1
128 umulh $20,$19,$20 # 1 2 #####
129 ldq $28,24($17) # 4 1
130 mulq $21,$19,$6 # 2 2 1 #####
131 addq $5,$0,$5 # 1 2 3 1
132 subq $18,4,$18
133 cmpult $5,$0,$0 # 1 2 3 2
134 umulh $21,$19,$21 # 2 2 #####
135 addq $20,$0,$0 # 1 3 2
136 addq $17,32,$17
137 addq $6,$0,$6 # 2 2 3 1
138 mulq $27,$19,$7 # 3 2 1 #####
139 cmpult $6,$0,$0 # 2 2 3 2
140 addq $21,$0,$0 # 2 3 2
141 addq $16,32,$16
142 umulh $27,$19,$27 # 3 2 #####
143 stq $5,-32($16) # 1 2 4
144 mulq $28,$19,$8 # 4 2 1 #####
145 addq $7,$0,$7 # 3 2 3 1
146 stq $6,-24($16) # 2 2 4
147 cmpult $7,$0,$0 # 3 2 3 2
148 umulh $28,$19,$28 # 4 2 #####
149 addq $27,$0,$0 # 3 3 2
150 stq $7,-16($16) # 3 2 4
151 addq $8,$0,$8 # 4 2 3 1
152 cmpult $8,$0,$0 # 4 2 3 2
153
154 addq $28,$0,$0 # 4 3 2
155
156 stq $8,-8($16) # 4 2 4
157
158 blt $18,$143
159
160 ldq $20,0($17) # 1 1
161
162 br $142
163
164 .align 4
165$145:
166 ldq $20,0($17) # 4 1
167 mulq $20,$19,$5 # 4 2 1
168 subq $18,1,$18
169 umulh $20,$19,$20 # 4 2
170 addq $5,$0,$5 # 4 2 3 1
171 addq $16,8,$16
172 cmpult $5,$0,$0 # 4 2 3 2
173 addq $17,8,$17
174 addq $20,$0,$0 # 4 3 2
175 stq $5,-8($16) # 4 2 4
176
177 bgt $18,$145
178 ret $31,($26),1 # else exit
179
180 .align 4
181$143:
182 addq $18,4,$18
183 bgt $18,$145 # goto tail code
184 ret $31,($26),1 # else exit
185
186 .end bn_mul_words
187 .align 3
188 .globl bn_sqr_words
189 .ent bn_sqr_words
190bn_sqr_words:
191bn_sqr_words..ng:
192 .frame $30,0,$26,0
193 .prologue 0
194
195 subq $18,4,$18
196 blt $18,$543 # if we are -1, -2, -3 or -4 goto tail code
197 ldq $20,0($17) # 1 1
198 .align 3
199$542:
200 mulq $20,$20,$5 ######
201 ldq $21,8($17) # 1 1
202 subq $18,4
203 umulh $20,$20,$1 ######
204 ldq $27,16($17) # 1 1
205 mulq $21,$21,$6 ######
206 ldq $28,24($17) # 1 1
207 stq $5,0($16) # r[0]
208 umulh $21,$21,$2 ######
209 stq $1,8($16) # r[1]
210 mulq $27,$27,$7 ######
211 stq $6,16($16) # r[0]
212 umulh $27,$27,$3 ######
213 stq $2,24($16) # r[1]
214 mulq $28,$28,$8 ######
215 stq $7,32($16) # r[0]
216 umulh $28,$28,$4 ######
217 stq $3,40($16) # r[1]
218
219 addq $16,64,$16
220 addq $17,32,$17
221 stq $8,-16($16) # r[0]
222 stq $4,-8($16) # r[1]
223
224 blt $18,$543
225 ldq $20,0($17) # 1 1
226 br $542
227
228$442:
229 ldq $20,0($17) # a[0]
230 mulq $20,$20,$5 # a[0]*w low part r2
231 addq $16,16,$16
232 addq $17,8,$17
233 subq $18,1,$18
234 umulh $20,$20,$1 # a[0]*w high part r3
235 stq $5,-16($16) # r[0]
236 stq $1,-8($16) # r[1]
237
238 bgt $18,$442
239 ret $31,($26),1 # else exit
240
241 .align 4
242$543:
243 addq $18,4,$18
244 bgt $18,$442 # goto tail code
245 ret $31,($26),1 # else exit
246 .end bn_sqr_words
247
248 .align 3
249 .globl bn_add_words
250 .ent bn_add_words
251bn_add_words:
252bn_add_words..ng:
253 .frame $30,0,$26,0
254 .prologue 0
255
256 subq $19,4,$19
257 bis $31,$31,$0 # carry = 0
258 blt $19,$900
259 ldq $5,0($17) # a[0]
260 ldq $1,0($18) # b[1]
261 .align 3
262$901:
263 addq $1,$5,$1 # r=a+b;
264 ldq $6,8($17) # a[1]
265 cmpult $1,$5,$22 # did we overflow?
266 ldq $2,8($18) # b[1]
267 addq $1,$0,$1 # c+= overflow
268 ldq $7,16($17) # a[2]
269 cmpult $1,$0,$0 # overflow?
270 ldq $3,16($18) # b[2]
271 addq $0,$22,$0
272 ldq $8,24($17) # a[3]
273 addq $2,$6,$2 # r=a+b;
274 ldq $4,24($18) # b[3]
275 cmpult $2,$6,$23 # did we overflow?
276 addq $3,$7,$3 # r=a+b;
277 addq $2,$0,$2 # c+= overflow
278 cmpult $3,$7,$24 # did we overflow?
279 cmpult $2,$0,$0 # overflow?
280 addq $4,$8,$4 # r=a+b;
281 addq $0,$23,$0
282 cmpult $4,$8,$25 # did we overflow?
283 addq $3,$0,$3 # c+= overflow
284 stq $1,0($16) # r[0]=c
285 cmpult $3,$0,$0 # overflow?
286 stq $2,8($16) # r[1]=c
287 addq $0,$24,$0
288 stq $3,16($16) # r[2]=c
289 addq $4,$0,$4 # c+= overflow
290 subq $19,4,$19 # loop--
291 cmpult $4,$0,$0 # overflow?
292 addq $17,32,$17 # a++
293 addq $0,$25,$0
294 stq $4,24($16) # r[3]=c
295 addq $18,32,$18 # b++
296 addq $16,32,$16 # r++
297
298 blt $19,$900
299 ldq $5,0($17) # a[0]
300 ldq $1,0($18) # b[1]
301 br $901
302 .align 4
303$945:
304 ldq $5,0($17) # a[0]
305 ldq $1,0($18) # b[1]
306 addq $1,$5,$1 # r=a+b;
307 subq $19,1,$19 # loop--
308 addq $1,$0,$1 # c+= overflow
309 addq $17,8,$17 # a++
310 cmpult $1,$5,$22 # did we overflow?
311 cmpult $1,$0,$0 # overflow?
312 addq $18,8,$18 # b++
313 stq $1,0($16) # r[0]=c
314 addq $0,$22,$0
315 addq $16,8,$16 # r++
316
317 bgt $19,$945
318 ret $31,($26),1 # else exit
319
320$900:
321 addq $19,4,$19
322 bgt $19,$945 # goto tail code
323 ret $31,($26),1 # else exit
324 .end bn_add_words
325
326 #
327 # What follows was taken directly from the C compiler with a few
328 # hacks to redo the lables.
329 #
330.text
331 .align 3
332 .globl bn_div64
333 .ent bn_div64
334bn_div64:
335 ldgp $29,0($27)
336bn_div64..ng:
337 lda $30,-48($30)
338 .frame $30,48,$26,0
339 stq $26,0($30)
340 stq $9,8($30)
341 stq $10,16($30)
342 stq $11,24($30)
343 stq $12,32($30)
344 stq $13,40($30)
345 .mask 0x4003e00,-48
346 .prologue 1
347 bis $16,$16,$9
348 bis $17,$17,$10
349 bis $18,$18,$11
350 bis $31,$31,$13
351 bis $31,2,$12
352 bne $11,$119
353 lda $0,-1
354 br $31,$136
355 .align 4
356$119:
357 bis $11,$11,$16
358 jsr $26,BN_num_bits_word
359 ldgp $29,0($26)
360 subq $0,64,$1
361 beq $1,$120
362 bis $31,1,$1
363 sll $1,$0,$1
364 cmpule $9,$1,$1
365 bne $1,$120
366 # lda $16,_IO_stderr_
367 # lda $17,$C32
368 # bis $0,$0,$18
369 # jsr $26,fprintf
370 # ldgp $29,0($26)
371 jsr $26,abort
372 ldgp $29,0($26)
373 .align 4
374$120:
375 bis $31,64,$3
376 cmpult $9,$11,$2
377 subq $3,$0,$1
378 addl $1,$31,$0
379 subq $9,$11,$1
380 cmoveq $2,$1,$9
381 beq $0,$122
382 zapnot $0,15,$2
383 subq $3,$0,$1
384 sll $11,$2,$11
385 sll $9,$2,$3
386 srl $10,$1,$1
387 sll $10,$2,$10
388 bis $3,$1,$9
389$122:
390 srl $11,32,$5
391 zapnot $11,15,$6
392 lda $7,-1
393 .align 5
394$123:
395 srl $9,32,$1
396 subq $1,$5,$1
397 bne $1,$126
398 zapnot $7,15,$27
399 br $31,$127
400 .align 4
401$126:
402 bis $9,$9,$24
403 bis $5,$5,$25
404 divqu $24,$25,$27
405$127:
406 srl $10,32,$4
407 .align 5
408$128:
409 mulq $27,$5,$1
410 subq $9,$1,$3
411 zapnot $3,240,$1
412 bne $1,$129
413 mulq $6,$27,$2
414 sll $3,32,$1
415 addq $1,$4,$1
416 cmpule $2,$1,$2
417 bne $2,$129
418 subq $27,1,$27
419 br $31,$128
420 .align 4
421$129:
422 mulq $27,$6,$1
423 mulq $27,$5,$4
424 srl $1,32,$3
425 sll $1,32,$1
426 addq $4,$3,$4
427 cmpult $10,$1,$2
428 subq $10,$1,$10
429 addq $2,$4,$2
430 cmpult $9,$2,$1
431 bis $2,$2,$4
432 beq $1,$134
433 addq $9,$11,$9
434 subq $27,1,$27
435$134:
436 subl $12,1,$12
437 subq $9,$4,$9
438 beq $12,$124
439 sll $27,32,$13
440 sll $9,32,$2
441 srl $10,32,$1
442 sll $10,32,$10
443 bis $2,$1,$9
444 br $31,$123
445 .align 4
446$124:
447 bis $13,$27,$0
448$136:
449 ldq $26,0($30)
450 ldq $9,8($30)
451 ldq $10,16($30)
452 ldq $11,24($30)
453 ldq $12,32($30)
454 ldq $13,40($30)
455 addq $30,48,$30
456 ret $31,($26),1
457 .end bn_div64
458
459 .set noat
460 .text
461 .align 3
462 .globl bn_sub_words
463 .ent bn_sub_words
464bn_sub_words:
465bn_sub_words..ng:
466 .frame $30,0,$26,0
467 .prologue 0
468
469 subq $19, 4, $19
470 bis $31, $31, $0
471 blt $19, $100
472 ldq $1, 0($17)
473 ldq $2, 0($18)
474$101:
475 ldq $3, 8($17)
476 cmpult $1, $2, $4
477 ldq $5, 8($18)
478 subq $1, $2, $1
479 ldq $6, 16($17)
480 cmpult $1, $0, $2
481 ldq $7, 16($18)
482 subq $1, $0, $23
483 ldq $8, 24($17)
484 addq $2, $4, $0
485 cmpult $3, $5, $24
486 subq $3, $5, $3
487 ldq $22, 24($18)
488 cmpult $3, $0, $5
489 subq $3, $0, $25
490 addq $5, $24, $0
491 cmpult $6, $7, $27
492 subq $6, $7, $6
493 stq $23, 0($16)
494 cmpult $6, $0, $7
495 subq $6, $0, $28
496 addq $7, $27, $0
497 cmpult $8, $22, $21
498 subq $8, $22, $8
499 stq $25, 8($16)
500 cmpult $8, $0, $22
501 subq $8, $0, $20
502 addq $22, $21, $0
503 stq $28, 16($16)
504 subq $19, 4, $19
505 stq $20, 24($16)
506 addq $17, 32, $17
507 addq $18, 32, $18
508 addq $16, 32, $16
509 blt $19, $100
510 ldq $1, 0($17)
511 ldq $2, 0($18)
512 br $101
513$102:
514 ldq $1, 0($17)
515 ldq $2, 0($18)
516 cmpult $1, $2, $27
517 subq $1, $2, $1
518 cmpult $1, $0, $2
519 subq $1, $0, $1
520 stq $1, 0($16)
521 addq $2, $27, $0
522 addq $17, 8, $17
523 addq $18, 8, $18
524 addq $16, 8, $16
525 subq $19, 1, $19
526 bgt $19, $102
527 ret $31,($26),1
528$100:
529 addq $19, 4, $19
530 bgt $19, $102
531$103:
532 ret $31,($26),1
533 .end bn_sub_words
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/add.pl b/src/lib/libcrypto/bn/asm/alpha.works/add.pl
new file mode 100644
index 0000000000..4dc76e6b69
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.works/add.pl
@@ -0,0 +1,119 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_add_words
5 {
6 local($name)=@_;
7 local($cc,$a,$b,$r);
8
9 &init_pool(4);
10 ($cc)=GR("r0");
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $bp=&wparam(2);
15 $count=&wparam(3);
16
17 &function_begin($name,"");
18
19 &comment("");
20 &sub($count,4,$count);
21 &mov("zero",$cc);
22 &br(&label("finish"));
23 &blt($count,&label("finish"));
24
25 ($a0,$b0)=&NR(2);
26 &ld($a0,&QWPw(0,$ap));
27 &ld($b0,&QWPw(0,$bp));
28
29##########################################################
30 &set_label("loop");
31
32 ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
33 ($b1)=&NR(1); &ld($b1,&QWPw(1,$bp));
34 ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
35 ($b2)=&NR(1); &ld($b2,&QWPw(2,$bp));
36 ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
37 ($b3)=&NR(1); &ld($b3,&QWPw(3,$bp));
38
39 ($o0,$t0)=&NR(2);
40 &add($a0,$b0,$o0);
41 &cmpult($o0,$b0,$t0);
42 &add($o0,$cc,$o0);
43 &cmpult($o0,$cc,$cc);
44 &add($cc,$t0,$cc); &FR($t0);
45
46 ($t1,$o1)=&NR(2);
47
48 &add($a1,$b1,$o1); &FR($a1);
49 &cmpult($o1,$b1,$t1); &FR($b1);
50 &add($o1,$cc,$o1);
51 &cmpult($o1,$cc,$cc);
52 &add($cc,$t1,$cc); &FR($t1);
53
54 ($t2,$o2)=&NR(2);
55
56 &add($a2,$b2,$o2); &FR($a2);
57 &cmpult($o2,$b2,$t2); &FR($b2);
58 &add($o2,$cc,$o2);
59 &cmpult($o2,$cc,$cc);
60 &add($cc,$t2,$cc); &FR($t2);
61
62 ($t3,$o3)=&NR(2);
63
64 &add($a3,$b3,$o3); &FR($a3);
65 &cmpult($o3,$b3,$t3); &FR($b3);
66 &add($o3,$cc,$o3);
67 &cmpult($o3,$cc,$cc);
68 &add($cc,$t3,$cc); &FR($t3);
69
70 &st($o0,&QWPw(0,$rp)); &FR($o0);
71 &st($o1,&QWPw(0,$rp)); &FR($o1);
72 &st($o2,&QWPw(0,$rp)); &FR($o2);
73 &st($o3,&QWPw(0,$rp)); &FR($o3);
74
75 &sub($count,4,$count); # count-=4
76 &add($ap,4*$QWS,$ap); # count+=4
77 &add($bp,4*$QWS,$bp); # count+=4
78 &add($rp,4*$QWS,$rp); # count+=4
79
80 &blt($count,&label("finish"));
81 &ld($a0,&QWPw(0,$ap));
82 &ld($b0,&QWPw(0,$bp));
83 &br(&label("loop"));
84##################################################
85 # Do the last 0..3 words
86
87 ($t0,$o0)=&NR(2);
88 &set_label("last_loop");
89
90 &ld($a0,&QWPw(0,$ap)); # get a
91 &ld($b0,&QWPw(0,$bp)); # get b
92
93 &add($a0,$b0,$o0);
94 &cmpult($o0,$b0,$t0); # will we borrow?
95 &add($o0,$cc,$o0); # will we borrow?
96 &cmpult($o0,$cc,$cc); # will we borrow?
97 &add($cc,$t0,$cc); # add the borrows
98 &st($o0,&QWPw(0,$rp)); # save
99
100 &add($ap,$QWS,$ap);
101 &add($bp,$QWS,$bp);
102 &add($rp,$QWS,$rp);
103 &sub($count,1,$count);
104 &bgt($count,&label("last_loop"));
105 &function_end_A($name);
106
107######################################################
108 &set_label("finish");
109 &add($count,4,$count);
110 &bgt($count,&label("last_loop"));
111
112 &FR($o0,$t0,$a0,$b0);
113 &set_label("end");
114 &function_end($name);
115
116 &fin_pool;
117 }
118
1191;
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/div.pl b/src/lib/libcrypto/bn/asm/alpha.works/div.pl
new file mode 100644
index 0000000000..7ec144377f
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.works/div.pl
@@ -0,0 +1,144 @@
1#!/usr/local/bin/perl
2
3sub bn_div64
4 {
5 local($data)=<<'EOF';
6 #
7 # What follows was taken directly from the C compiler with a few
8 # hacks to redo the lables.
9 #
10.text
11 .set noreorder
12 .set volatile
13 .align 3
14 .globl bn_div64
15 .ent bn_div64
16bn_div64:
17 ldgp $29,0($27)
18bn_div64..ng:
19 lda $30,-48($30)
20 .frame $30,48,$26,0
21 stq $26,0($30)
22 stq $9,8($30)
23 stq $10,16($30)
24 stq $11,24($30)
25 stq $12,32($30)
26 stq $13,40($30)
27 .mask 0x4003e00,-48
28 .prologue 1
29 bis $16,$16,$9
30 bis $17,$17,$10
31 bis $18,$18,$11
32 bis $31,$31,$13
33 bis $31,2,$12
34 bne $11,$9119
35 lda $0,-1
36 br $31,$9136
37 .align 4
38$9119:
39 bis $11,$11,$16
40 jsr $26,BN_num_bits_word
41 ldgp $29,0($26)
42 subq $0,64,$1
43 beq $1,$9120
44 bis $31,1,$1
45 sll $1,$0,$1
46 cmpule $9,$1,$1
47 bne $1,$9120
48 # lda $16,_IO_stderr_
49 # lda $17,$C32
50 # bis $0,$0,$18
51 # jsr $26,fprintf
52 # ldgp $29,0($26)
53 jsr $26,abort
54 ldgp $29,0($26)
55 .align 4
56$9120:
57 bis $31,64,$3
58 cmpult $9,$11,$2
59 subq $3,$0,$1
60 addl $1,$31,$0
61 subq $9,$11,$1
62 cmoveq $2,$1,$9
63 beq $0,$9122
64 zapnot $0,15,$2
65 subq $3,$0,$1
66 sll $11,$2,$11
67 sll $9,$2,$3
68 srl $10,$1,$1
69 sll $10,$2,$10
70 bis $3,$1,$9
71$9122:
72 srl $11,32,$5
73 zapnot $11,15,$6
74 lda $7,-1
75 .align 5
76$9123:
77 srl $9,32,$1
78 subq $1,$5,$1
79 bne $1,$9126
80 zapnot $7,15,$27
81 br $31,$9127
82 .align 4
83$9126:
84 bis $9,$9,$24
85 bis $5,$5,$25
86 divqu $24,$25,$27
87$9127:
88 srl $10,32,$4
89 .align 5
90$9128:
91 mulq $27,$5,$1
92 subq $9,$1,$3
93 zapnot $3,240,$1
94 bne $1,$9129
95 mulq $6,$27,$2
96 sll $3,32,$1
97 addq $1,$4,$1
98 cmpule $2,$1,$2
99 bne $2,$9129
100 subq $27,1,$27
101 br $31,$9128
102 .align 4
103$9129:
104 mulq $27,$6,$1
105 mulq $27,$5,$4
106 srl $1,32,$3
107 sll $1,32,$1
108 addq $4,$3,$4
109 cmpult $10,$1,$2
110 subq $10,$1,$10
111 addq $2,$4,$2
112 cmpult $9,$2,$1
113 bis $2,$2,$4
114 beq $1,$9134
115 addq $9,$11,$9
116 subq $27,1,$27
117$9134:
118 subl $12,1,$12
119 subq $9,$4,$9
120 beq $12,$9124
121 sll $27,32,$13
122 sll $9,32,$2
123 srl $10,32,$1
124 sll $10,32,$10
125 bis $2,$1,$9
126 br $31,$9123
127 .align 4
128$9124:
129 bis $13,$27,$0
130$9136:
131 ldq $26,0($30)
132 ldq $9,8($30)
133 ldq $10,16($30)
134 ldq $11,24($30)
135 ldq $12,32($30)
136 ldq $13,40($30)
137 addq $30,48,$30
138 ret $31,($26),1
139 .end bn_div64
140EOF
141 &asm_add($data);
142 }
143
1441;
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/mul.pl b/src/lib/libcrypto/bn/asm/alpha.works/mul.pl
new file mode 100644
index 0000000000..b182bae452
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.works/mul.pl
@@ -0,0 +1,116 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_mul_words
5 {
6 local($name)=@_;
7 local($cc,$a,$b,$r,$couny);
8
9 &init_pool(4);
10 ($cc)=GR("r0");
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $count=&wparam(2);
15 $word=&wparam(3);
16
17 &function_begin($name,"");
18
19 &comment("");
20 &sub($count,4,$count);
21 &mov("zero",$cc);
22 &br(&label("finish"));
23 &blt($count,&label("finish"));
24
25 ($a0,$r0)=&NR(2);
26 &ld($a0,&QWPw(0,$ap));
27 &ld($r0,&QWPw(0,$rp));
28
29$a=<<'EOF';
30##########################################################
31 &set_label("loop");
32
33 ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
34 ($b1)=&NR(1); &ld($b1,&QWPw(1,$bp));
35 ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
36 ($b2)=&NR(1); &ld($b2,&QWPw(2,$bp));
37 ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
38 ($b3)=&NR(1); &ld($b3,&QWPw(3,$bp));
39
40 ($o0,$t0)=&NR(2);
41 &add($a0,$b0,$o0);
42 &cmpult($o0,$b0,$t0);
43 &add($o0,$cc,$o0);
44 &cmpult($o0,$cc,$cc);
45 &add($cc,$t0,$cc); &FR($t0);
46
47 ($t1,$o1)=&NR(2);
48
49 &add($a1,$b1,$o1); &FR($a1);
50 &cmpult($o1,$b1,$t1); &FR($b1);
51 &add($o1,$cc,$o1);
52 &cmpult($o1,$cc,$cc);
53 &add($cc,$t1,$cc); &FR($t1);
54
55 ($t2,$o2)=&NR(2);
56
57 &add($a2,$b2,$o2); &FR($a2);
58 &cmpult($o2,$b2,$t2); &FR($b2);
59 &add($o2,$cc,$o2);
60 &cmpult($o2,$cc,$cc);
61 &add($cc,$t2,$cc); &FR($t2);
62
63 ($t3,$o3)=&NR(2);
64
65 &add($a3,$b3,$o3); &FR($a3);
66 &cmpult($o3,$b3,$t3); &FR($b3);
67 &add($o3,$cc,$o3);
68 &cmpult($o3,$cc,$cc);
69 &add($cc,$t3,$cc); &FR($t3);
70
71 &st($o0,&QWPw(0,$rp)); &FR($o0);
72 &st($o1,&QWPw(0,$rp)); &FR($o1);
73 &st($o2,&QWPw(0,$rp)); &FR($o2);
74 &st($o3,&QWPw(0,$rp)); &FR($o3);
75
76 &sub($count,4,$count); # count-=4
77 &add($ap,4*$QWS,$ap); # count+=4
78 &add($bp,4*$QWS,$bp); # count+=4
79 &add($rp,4*$QWS,$rp); # count+=4
80
81 &blt($count,&label("finish"));
82 &ld($a0,&QWPw(0,$ap));
83 &ld($b0,&QWPw(0,$bp));
84 &br(&label("loop"));
85EOF
86##################################################
87 # Do the last 0..3 words
88
89 &set_label("last_loop");
90
91 &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
92 &mul($a0,$word,($l0)=&NR(1));
93 &add($ap,$QWS,$ap);
94 &muh($a0,$word,($h0)=&NR(1)); &FR($a0);
95 &add($l0,$cc,$l0);
96 &add($rp,$QWS,$rp);
97 &sub($count,1,$count);
98 &cmpult($l0,$cc,$cc);
99 &st($l0,&QWPw(-1,$rp)); &FR($l0);
100 &add($h0,$cc,$cc); &FR($h0);
101
102 &bgt($count,&label("last_loop"));
103 &function_end_A($name);
104
105######################################################
106 &set_label("finish");
107 &add($count,4,$count);
108 &bgt($count,&label("last_loop"));
109
110 &set_label("end");
111 &function_end($name);
112
113 &fin_pool;
114 }
115
1161;
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/mul_add.pl b/src/lib/libcrypto/bn/asm/alpha.works/mul_add.pl
new file mode 100644
index 0000000000..e37f6315fb
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.works/mul_add.pl
@@ -0,0 +1,120 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_mul_add_words
5 {
6 local($name)=@_;
7 local($cc,$a,$b,$r,$couny);
8
9 &init_pool(4);
10 ($cc)=GR("r0");
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $count=&wparam(2);
15 $word=&wparam(3);
16
17 &function_begin($name,"");
18
19 &comment("");
20 &sub($count,4,$count);
21 &mov("zero",$cc);
22 &br(&label("finish"));
23 &blt($count,&label("finish"));
24
25 ($a0,$r0)=&NR(2);
26 &ld($a0,&QWPw(0,$ap));
27 &ld($r0,&QWPw(0,$rp));
28
29$a=<<'EOF';
30##########################################################
31 &set_label("loop");
32
33 ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
34 ($b1)=&NR(1); &ld($b1,&QWPw(1,$bp));
35 ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
36 ($b2)=&NR(1); &ld($b2,&QWPw(2,$bp));
37 ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
38 ($b3)=&NR(1); &ld($b3,&QWPw(3,$bp));
39
40 ($o0,$t0)=&NR(2);
41 &add($a0,$b0,$o0);
42 &cmpult($o0,$b0,$t0);
43 &add($o0,$cc,$o0);
44 &cmpult($o0,$cc,$cc);
45 &add($cc,$t0,$cc); &FR($t0);
46
47 ($t1,$o1)=&NR(2);
48
49 &add($a1,$b1,$o1); &FR($a1);
50 &cmpult($o1,$b1,$t1); &FR($b1);
51 &add($o1,$cc,$o1);
52 &cmpult($o1,$cc,$cc);
53 &add($cc,$t1,$cc); &FR($t1);
54
55 ($t2,$o2)=&NR(2);
56
57 &add($a2,$b2,$o2); &FR($a2);
58 &cmpult($o2,$b2,$t2); &FR($b2);
59 &add($o2,$cc,$o2);
60 &cmpult($o2,$cc,$cc);
61 &add($cc,$t2,$cc); &FR($t2);
62
63 ($t3,$o3)=&NR(2);
64
65 &add($a3,$b3,$o3); &FR($a3);
66 &cmpult($o3,$b3,$t3); &FR($b3);
67 &add($o3,$cc,$o3);
68 &cmpult($o3,$cc,$cc);
69 &add($cc,$t3,$cc); &FR($t3);
70
71 &st($o0,&QWPw(0,$rp)); &FR($o0);
72 &st($o1,&QWPw(0,$rp)); &FR($o1);
73 &st($o2,&QWPw(0,$rp)); &FR($o2);
74 &st($o3,&QWPw(0,$rp)); &FR($o3);
75
76 &sub($count,4,$count); # count-=4
77 &add($ap,4*$QWS,$ap); # count+=4
78 &add($bp,4*$QWS,$bp); # count+=4
79 &add($rp,4*$QWS,$rp); # count+=4
80
81 &blt($count,&label("finish"));
82 &ld($a0,&QWPw(0,$ap));
83 &ld($b0,&QWPw(0,$bp));
84 &br(&label("loop"));
85EOF
86##################################################
87 # Do the last 0..3 words
88
89 &set_label("last_loop");
90
91 &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
92 &ld(($r0)=&NR(1),&QWPw(0,$rp)); # get b
93 &mul($a0,$word,($l0)=&NR(1));
94 &sub($count,1,$count);
95 &add($ap,$QWS,$ap);
96 &muh($a0,$word,($h0)=&NR(1)); &FR($a0);
97 &add($r0,$l0,$r0);
98 &add($rp,$QWS,$rp);
99 &cmpult($r0,$l0,($t0)=&NR(1)); &FR($l0);
100 &add($r0,$cc,$r0);
101 &add($h0,$t0,$h0); &FR($t0);
102 &cmpult($r0,$cc,$cc);
103 &st($r0,&QWPw(-1,$rp)); &FR($r0);
104 &add($h0,$cc,$cc); &FR($h0);
105
106 &bgt($count,&label("last_loop"));
107 &function_end_A($name);
108
109######################################################
110 &set_label("finish");
111 &add($count,4,$count);
112 &bgt($count,&label("last_loop"));
113
114 &set_label("end");
115 &function_end($name);
116
117 &fin_pool;
118 }
119
1201;
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.pl b/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.pl
new file mode 100644
index 0000000000..5efd201281
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.pl
@@ -0,0 +1,213 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub mul_add_c
5 {
6 local($a,$b,$c0,$c1,$c2)=@_;
7 local($l1,$h1,$t1,$t2);
8
9 &mul($a,$b,($l1)=&NR(1));
10 &muh($a,$b,($h1)=&NR(1));
11 &add($c0,$l1,$c0);
12 &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
13 &add($t1,$h1,$h1); &FR($t1);
14 &add($c1,$h1,$c1);
15 &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
16 &add($c2,$t2,$c2); &FR($t2);
17 }
18
19sub bn_mul_comba4
20 {
21 local($name)=@_;
22 local(@a,@b,$r,$c0,$c1,$c2);
23
24 $cnt=1;
25 &init_pool(3);
26
27 $rp=&wparam(0);
28 $ap=&wparam(1);
29 $bp=&wparam(2);
30
31 &function_begin($name,"");
32
33 &comment("");
34
35 &ld(($a[0])=&NR(1),&QWPw(0,$ap));
36 &ld(($b[0])=&NR(1),&QWPw(0,$bp));
37 &ld(($a[1])=&NR(1),&QWPw(1,$ap));
38 &ld(($b[1])=&NR(1),&QWPw(1,$bp));
39 &mul($a[0],$b[0],($r00)=&NR(1));
40 &ld(($a[2])=&NR(1),&QWPw(2,$ap));
41 &ld(($b[2])=&NR(1),&QWPw(2,$bp));
42 &muh($a[0],$b[0],($r01)=&NR(1));
43 &FR($ap); &ld(($a[3])=&NR(1),&QWPw(3,$ap));
44 &FR($bp); &ld(($b[3])=&NR(1),&QWPw(3,$bp));
45 &mul($a[0],$b[1],($r02)=&NR(1));
46
47 ($R,$H1,$H2)=&NR(3);
48
49 &st($r00,&QWPw(0,$rp)); &FR($r00);
50
51 &mov("zero",$R);
52 &mul($a[1],$b[0],($r03)=&NR(1));
53
54 &mov("zero",$H1);
55 &mov("zero",$H0);
56 &add($R,$r01,$R);
57 &muh($a[0],$b[1],($r04)=&NR(1));
58 &cmpult($R,$r01,($t01)=&NR(1)); &FR($r01);
59 &add($R,$r02,$R);
60 &add($H1,$t01,$H1) &FR($t01);
61 &muh($a[1],$b[0],($r05)=&NR(1));
62 &cmpult($R,$r02,($t02)=&NR(1)); &FR($r02);
63 &add($R,$r03,$R);
64 &add($H2,$t02,$H2) &FR($t02);
65 &mul($a[0],$b[2],($r06)=&NR(1));
66 &cmpult($R,$r03,($t03)=&NR(1)); &FR($r03);
67 &add($H1,$t03,$H1) &FR($t03);
68 &st($R,&QWPw(1,$rp));
69 &add($H1,$H2,$R);
70
71 &mov("zero",$H1);
72 &add($R,$r04,$R);
73 &mov("zero",$H2);
74 &mul($a[1],$b[1],($r07)=&NR(1));
75 &cmpult($R,$r04,($t04)=&NR(1)); &FR($r04);
76 &add($R,$r05,$R);
77 &add($H1,$t04,$H1) &FR($t04);
78 &mul($a[2],$b[0],($r08)=&NR(1));
79 &cmpult($R,$r05,($t05)=&NR(1)); &FR($r05);
80 &add($R,$r01,$R);
81 &add($H2,$t05,$H2) &FR($t05);
82 &muh($a[0],$b[2],($r09)=&NR(1));
83 &cmpult($R,$r06,($t06)=&NR(1)); &FR($r06);
84 &add($R,$r07,$R);
85 &add($H1,$t06,$H1) &FR($t06);
86 &muh($a[1],$b[1],($r10)=&NR(1));
87 &cmpult($R,$r07,($t07)=&NR(1)); &FR($r07);
88 &add($R,$r08,$R);
89 &add($H2,$t07,$H2) &FR($t07);
90 &muh($a[2],$b[0],($r11)=&NR(1));
91 &cmpult($R,$r08,($t08)=&NR(1)); &FR($r08);
92 &add($H1,$t08,$H1) &FR($t08);
93 &st($R,&QWPw(2,$rp));
94 &add($H1,$H2,$R);
95
96 &mov("zero",$H1);
97 &add($R,$r09,$R);
98 &mov("zero",$H2);
99 &mul($a[0],$b[3],($r12)=&NR(1));
100 &cmpult($R,$r09,($t09)=&NR(1)); &FR($r09);
101 &add($R,$r10,$R);
102 &add($H1,$t09,$H1) &FR($t09);
103 &mul($a[1],$b[2],($r13)=&NR(1));
104 &cmpult($R,$r10,($t10)=&NR(1)); &FR($r10);
105 &add($R,$r11,$R);
106 &add($H1,$t10,$H1) &FR($t10);
107 &mul($a[2],$b[1],($r14)=&NR(1));
108 &cmpult($R,$r11,($t11)=&NR(1)); &FR($r11);
109 &add($R,$r12,$R);
110 &add($H1,$t11,$H1) &FR($t11);
111 &mul($a[3],$b[0],($r15)=&NR(1));
112 &cmpult($R,$r12,($t12)=&NR(1)); &FR($r12);
113 &add($R,$r13,$R);
114 &add($H1,$t12,$H1) &FR($t12);
115 &muh($a[0],$b[3],($r16)=&NR(1));
116 &cmpult($R,$r13,($t13)=&NR(1)); &FR($r13);
117 &add($R,$r14,$R);
118 &add($H1,$t13,$H1) &FR($t13);
119 &muh($a[1],$b[2],($r17)=&NR(1));
120 &cmpult($R,$r14,($t14)=&NR(1)); &FR($r14);
121 &add($R,$r15,$R);
122 &add($H1,$t14,$H1) &FR($t14);
123 &muh($a[2],$b[1],($r18)=&NR(1));
124 &cmpult($R,$r15,($t15)=&NR(1)); &FR($r15);
125 &add($H1,$t15,$H1) &FR($t15);
126 &st($R,&QWPw(3,$rp));
127 &add($H1,$H2,$R);
128
129 &mov("zero",$H1);
130 &add($R,$r16,$R);
131 &mov("zero",$H2);
132 &muh($a[3],$b[0],($r19)=&NR(1));
133 &cmpult($R,$r16,($t16)=&NR(1)); &FR($r16);
134 &add($R,$r17,$R);
135 &add($H1,$t16,$H1) &FR($t16);
136 &mul($a[1],$b[3],($r20)=&NR(1));
137 &cmpult($R,$r17,($t17)=&NR(1)); &FR($r17);
138 &add($R,$r18,$R);
139 &add($H1,$t17,$H1) &FR($t17);
140 &mul($a[2],$b[2],($r21)=&NR(1));
141 &cmpult($R,$r18,($t18)=&NR(1)); &FR($r18);
142 &add($R,$r19,$R);
143 &add($H1,$t18,$H1) &FR($t18);
144 &mul($a[3],$b[1],($r22)=&NR(1));
145 &cmpult($R,$r19,($t19)=&NR(1)); &FR($r19);
146 &add($R,$r20,$R);
147 &add($H1,$t19,$H1) &FR($t19);
148 &muh($a[1],$b[3],($r23)=&NR(1));
149 &cmpult($R,$r20,($t20)=&NR(1)); &FR($r20);
150 &add($R,$r21,$R);
151 &add($H1,$t20,$H1) &FR($t20);
152 &muh($a[2],$b[2],($r24)=&NR(1));
153 &cmpult($R,$r21,($t21)=&NR(1)); &FR($r21);
154 &add($R,$r22,$R);
155 &add($H1,$t21,$H1) &FR($t21);
156 &muh($a[3],$b[1],($r25)=&NR(1));
157 &cmpult($R,$r22,($t22)=&NR(1)); &FR($r22);
158 &add($H1,$t22,$H1) &FR($t22);
159 &st($R,&QWPw(4,$rp));
160 &add($H1,$H2,$R);
161
162 &mov("zero",$H1);
163 &add($R,$r23,$R);
164 &mov("zero",$H2);
165 &mul($a[2],$b[3],($r26)=&NR(1));
166 &cmpult($R,$r23,($t23)=&NR(1)); &FR($r23);
167 &add($R,$r24,$R);
168 &add($H1,$t23,$H1) &FR($t23);
169 &mul($a[3],$b[2],($r27)=&NR(1));
170 &cmpult($R,$r24,($t24)=&NR(1)); &FR($r24);
171 &add($R,$r25,$R);
172 &add($H1,$t24,$H1) &FR($t24);
173 &muh($a[2],$b[3],($r28)=&NR(1));
174 &cmpult($R,$r25,($t25)=&NR(1)); &FR($r25);
175 &add($R,$r26,$R);
176 &add($H1,$t25,$H1) &FR($t25);
177 &muh($a[3],$b[2],($r29)=&NR(1));
178 &cmpult($R,$r26,($t26)=&NR(1)); &FR($r26);
179 &add($R,$r27,$R);
180 &add($H1,$t26,$H1) &FR($t26);
181 &mul($a[3],$b[3],($r30)=&NR(1));
182 &cmpult($R,$r27,($t27)=&NR(1)); &FR($r27);
183 &add($H1,$t27,$H1) &FR($t27);
184 &st($R,&QWPw(5,$rp));
185 &add($H1,$H2,$R);
186
187 &mov("zero",$H1);
188 &add($R,$r28,$R);
189 &mov("zero",$H2);
190 &muh($a[3],$b[3],($r31)=&NR(1));
191 &cmpult($R,$r28,($t28)=&NR(1)); &FR($r28);
192 &add($R,$r29,$R);
193 &add($H1,$t28,$H1) &FR($t28);
194 ############
195 &cmpult($R,$r29,($t29)=&NR(1)); &FR($r29);
196 &add($R,$r30,$R);
197 &add($H1,$t29,$H1) &FR($t29);
198 ############
199 &cmpult($R,$r30,($t30)=&NR(1)); &FR($r30);
200 &add($H1,$t30,$H1) &FR($t30);
201 &st($R,&QWPw(6,$rp));
202 &add($H1,$H2,$R);
203
204 &add($R,$r31,$R); &FR($r31);
205 &st($R,&QWPw(7,$rp));
206
207 &FR($R,$H1,$H2);
208 &function_end($name);
209
210 &fin_pool;
211 }
212
2131;
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.works.pl b/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.works.pl
new file mode 100644
index 0000000000..79d86dd25c
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.works/mul_c4.works.pl
@@ -0,0 +1,98 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub mul_add_c
5 {
6 local($a,$b,$c0,$c1,$c2)=@_;
7 local($l1,$h1,$t1,$t2);
8
9print STDERR "count=$cnt\n"; $cnt++;
10 &mul($a,$b,($l1)=&NR(1));
11 &muh($a,$b,($h1)=&NR(1));
12 &add($c0,$l1,$c0);
13 &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
14 &add($t1,$h1,$h1); &FR($t1);
15 &add($c1,$h1,$c1);
16 &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
17 &add($c2,$t2,$c2); &FR($t2);
18 }
19
20sub bn_mul_comba4
21 {
22 local($name)=@_;
23 local(@a,@b,$r,$c0,$c1,$c2);
24
25 $cnt=1;
26 &init_pool(3);
27
28 $rp=&wparam(0);
29 $ap=&wparam(1);
30 $bp=&wparam(2);
31
32 &function_begin($name,"");
33
34 &comment("");
35
36 &ld(($a[0])=&NR(1),&QWPw(0,$ap));
37 &ld(($b[0])=&NR(1),&QWPw(0,$bp));
38 &ld(($a[1])=&NR(1),&QWPw(1,$ap));
39 &ld(($b[1])=&NR(1),&QWPw(1,$bp));
40 &ld(($a[2])=&NR(1),&QWPw(2,$ap));
41 &ld(($b[2])=&NR(1),&QWPw(2,$bp));
42 &ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap);
43 &ld(($b[3])=&NR(1),&QWPw(3,$bp)); &FR($bp);
44
45 ($c0,$c1,$c2)=&NR(3);
46 &mov("zero",$c2);
47 &mul($a[0],$b[0],$c0);
48 &muh($a[0],$b[0],$c1);
49 &st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR($c0);
50 ($c0,$c1,$c2)=($c1,$c2,$c0);
51 &mov("zero",$c2);
52
53 &mul_add_c($a[0],$b[1],$c0,$c1,$c2);
54 &mul_add_c($a[1],$b[0],$c0,$c1,$c2);
55 &st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR($c0);
56 ($c0,$c1,$c2)=($c1,$c2,$c0);
57 &mov("zero",$c2);
58
59 &mul_add_c($a[1],$b[1],$c0,$c1,$c2);
60 &mul_add_c($a[0],$b[2],$c0,$c1,$c2);
61 &mul_add_c($a[2],$b[0],$c0,$c1,$c2);
62 &st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR($c0);
63 ($c0,$c1,$c2)=($c1,$c2,$c0);
64 &mov("zero",$c2);
65
66 &mul_add_c($a[0],$b[3],$c0,$c1,$c2); &FR($a[0]);
67 &mul_add_c($a[1],$b[2],$c0,$c1,$c2);
68 &mul_add_c($a[2],$b[1],$c0,$c1,$c2);
69 &mul_add_c($a[3],$b[0],$c0,$c1,$c2); &FR($b[0]);
70 &st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR($c0);
71 ($c0,$c1,$c2)=($c1,$c2,$c0);
72 &mov("zero",$c2);
73
74 &mul_add_c($a[1],$b[3],$c0,$c1,$c2); &FR($a[1]);
75 &mul_add_c($a[2],$b[2],$c0,$c1,$c2);
76 &mul_add_c($a[3],$b[1],$c0,$c1,$c2); &FR($b[1]);
77 &st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR($c0);
78 ($c0,$c1,$c2)=($c1,$c2,$c0);
79 &mov("zero",$c2);
80
81 &mul_add_c($a[2],$b[3],$c0,$c1,$c2); &FR($a[2]);
82 &mul_add_c($a[3],$b[2],$c0,$c1,$c2); &FR($b[2]);
83 &st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR($c0);
84 ($c0,$c1,$c2)=($c1,$c2,$c0);
85 &mov("zero",$c2);
86
87 &mul_add_c($a[3],$b[3],$c0,$c1,$c2); &FR($a[3],$b[3]);
88 &st($c0,&QWPw(6,$rp));
89 &st($c1,&QWPw(7,$rp));
90
91 &FR($c0,$c1,$c2);
92
93 &function_end($name);
94
95 &fin_pool;
96 }
97
981;
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/mul_c8.pl b/src/lib/libcrypto/bn/asm/alpha.works/mul_c8.pl
new file mode 100644
index 0000000000..525ca7494b
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.works/mul_c8.pl
@@ -0,0 +1,177 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_mul_comba8
5 {
6 local($name)=@_;
7 local(@a,@b,$r,$c0,$c1,$c2);
8
9 $cnt=1;
10 &init_pool(3);
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $bp=&wparam(2);
15
16 &function_begin($name,"");
17
18 &comment("");
19
20 &stack_push(2);
21 &ld(($a[0])=&NR(1),&QWPw(0,$ap));
22 &ld(($b[0])=&NR(1),&QWPw(0,$bp));
23 &st($reg_s0,&swtmp(0)); &FR($reg_s0);
24 &st($reg_s1,&swtmp(1)); &FR($reg_s1);
25 &ld(($a[1])=&NR(1),&QWPw(1,$ap));
26 &ld(($b[1])=&NR(1),&QWPw(1,$bp));
27 &ld(($a[2])=&NR(1),&QWPw(2,$ap));
28 &ld(($b[2])=&NR(1),&QWPw(2,$bp));
29 &ld(($a[3])=&NR(1),&QWPw(3,$ap));
30 &ld(($b[3])=&NR(1),&QWPw(3,$bp));
31 &ld(($a[4])=&NR(1),&QWPw(1,$ap));
32 &ld(($b[4])=&NR(1),&QWPw(1,$bp));
33 &ld(($a[5])=&NR(1),&QWPw(1,$ap));
34 &ld(($b[5])=&NR(1),&QWPw(1,$bp));
35 &ld(($a[6])=&NR(1),&QWPw(1,$ap));
36 &ld(($b[6])=&NR(1),&QWPw(1,$bp));
37 &ld(($a[7])=&NR(1),&QWPw(1,$ap)); &FR($ap);
38 &ld(($b[7])=&NR(1),&QWPw(1,$bp)); &FR($bp);
39
40 ($c0,$c1,$c2)=&NR(3);
41 &mov("zero",$c2);
42 &mul($a[0],$b[0],$c0);
43 &muh($a[0],$b[0],$c1);
44 &st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR(1);
45 ($c0,$c1,$c2)=($c1,$c2,$c0);
46 &mov("zero",$c2);
47
48 &mul_add_c($a[0],$b[1],$c0,$c1,$c2);
49 &mul_add_c($a[1],$b[0],$c0,$c1,$c2);
50 &st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR(1);
51 ($c0,$c1,$c2)=($c1,$c2,$c0);
52 &mov("zero",$c2);
53
54 &mul_add_c($a[0],$b[2],$c0,$c1,$c2);
55 &mul_add_c($a[1],$b[1],$c0,$c1,$c2);
56 &mul_add_c($a[2],$b[0],$c0,$c1,$c2);
57 &st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR(1);
58 ($c0,$c1,$c2)=($c1,$c2,$c0);
59 &mov("zero",$c2);
60
61 &mul_add_c($a[0],$b[3],$c0,$c1,$c2);
62 &mul_add_c($a[1],$b[2],$c0,$c1,$c2);
63 &mul_add_c($a[2],$b[1],$c0,$c1,$c2);
64 &mul_add_c($a[3],$b[0],$c0,$c1,$c2);
65 &st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR(1);
66 ($c0,$c1,$c2)=($c1,$c2,$c0);
67 &mov("zero",$c2);
68
69 &mul_add_c($a[0],$b[4],$c0,$c1,$c2);
70 &mul_add_c($a[1],$b[3],$c0,$c1,$c2);
71 &mul_add_c($a[2],$b[2],$c0,$c1,$c2);
72 &mul_add_c($a[3],$b[1],$c0,$c1,$c2);
73 &mul_add_c($a[4],$b[0],$c0,$c1,$c2);
74 &st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR(1);
75 ($c0,$c1,$c2)=($c1,$c2,$c0);
76 &mov("zero",$c2);
77
78 &mul_add_c($a[0],$b[5],$c0,$c1,$c2);
79 &mul_add_c($a[1],$b[4],$c0,$c1,$c2);
80 &mul_add_c($a[2],$b[3],$c0,$c1,$c2);
81 &mul_add_c($a[3],$b[2],$c0,$c1,$c2);
82 &mul_add_c($a[4],$b[1],$c0,$c1,$c2);
83 &mul_add_c($a[5],$b[0],$c0,$c1,$c2);
84 &st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR(1);
85 ($c0,$c1,$c2)=($c1,$c2,$c0);
86 &mov("zero",$c2);
87
88 &mul_add_c($a[0],$b[6],$c0,$c1,$c2);
89 &mul_add_c($a[1],$b[5],$c0,$c1,$c2);
90 &mul_add_c($a[2],$b[4],$c0,$c1,$c2);
91 &mul_add_c($a[3],$b[3],$c0,$c1,$c2);
92 &mul_add_c($a[4],$b[2],$c0,$c1,$c2);
93 &mul_add_c($a[5],$b[1],$c0,$c1,$c2);
94 &mul_add_c($a[6],$b[0],$c0,$c1,$c2);
95 &st($c0,&QWPw(6,$rp)); &FR($c0); ($c0)=&NR(1);
96 ($c0,$c1,$c2)=($c1,$c2,$c0);
97 &mov("zero",$c2);
98
99 &mul_add_c($a[0],$b[7],$c0,$c1,$c2); &FR($a[0]);
100 &mul_add_c($a[1],$b[6],$c0,$c1,$c2);
101 &mul_add_c($a[2],$b[5],$c0,$c1,$c2);
102 &mul_add_c($a[3],$b[4],$c0,$c1,$c2);
103 &mul_add_c($a[4],$b[3],$c0,$c1,$c2);
104 &mul_add_c($a[5],$b[2],$c0,$c1,$c2);
105 &mul_add_c($a[6],$b[1],$c0,$c1,$c2);
106 &mul_add_c($a[7],$b[0],$c0,$c1,$c2); &FR($b[0]);
107 &st($c0,&QWPw(7,$rp)); &FR($c0); ($c0)=&NR(1);
108 ($c0,$c1,$c2)=($c1,$c2,$c0);
109 &mov("zero",$c2);
110
111 &mul_add_c($a[1],$b[7],$c0,$c1,$c2); &FR($a[1]);
112 &mul_add_c($a[2],$b[6],$c0,$c1,$c2);
113 &mul_add_c($a[3],$b[5],$c0,$c1,$c2);
114 &mul_add_c($a[4],$b[4],$c0,$c1,$c2);
115 &mul_add_c($a[5],$b[3],$c0,$c1,$c2);
116 &mul_add_c($a[6],$b[2],$c0,$c1,$c2);
117 &mul_add_c($a[7],$b[1],$c0,$c1,$c2); &FR($b[1]);
118 &st($c0,&QWPw(8,$rp)); &FR($c0); ($c0)=&NR(1);
119 ($c0,$c1,$c2)=($c1,$c2,$c0);
120 &mov("zero",$c2);
121
122 &mul_add_c($a[2],$b[7],$c0,$c1,$c2); &FR($a[2]);
123 &mul_add_c($a[3],$b[6],$c0,$c1,$c2);
124 &mul_add_c($a[4],$b[5],$c0,$c1,$c2);
125 &mul_add_c($a[5],$b[4],$c0,$c1,$c2);
126 &mul_add_c($a[6],$b[3],$c0,$c1,$c2);
127 &mul_add_c($a[7],$b[2],$c0,$c1,$c2); &FR($b[2]);
128 &st($c0,&QWPw(9,$rp)); &FR($c0); ($c0)=&NR(1);
129 ($c0,$c1,$c2)=($c1,$c2,$c0);
130 &mov("zero",$c2);
131
132 &mul_add_c($a[3],$b[7],$c0,$c1,$c2); &FR($a[3]);
133 &mul_add_c($a[4],$b[6],$c0,$c1,$c2);
134 &mul_add_c($a[5],$b[5],$c0,$c1,$c2);
135 &mul_add_c($a[6],$b[4],$c0,$c1,$c2);
136 &mul_add_c($a[7],$b[3],$c0,$c1,$c2); &FR($b[3]);
137 &st($c0,&QWPw(10,$rp)); &FR($c0); ($c0)=&NR(1);
138 ($c0,$c1,$c2)=($c1,$c2,$c0);
139 &mov("zero",$c2);
140
141 &mul_add_c($a[4],$b[7],$c0,$c1,$c2); &FR($a[4]);
142 &mul_add_c($a[5],$b[6],$c0,$c1,$c2);
143 &mul_add_c($a[6],$b[5],$c0,$c1,$c2);
144 &mul_add_c($a[7],$b[4],$c0,$c1,$c2); &FR($b[4]);
145 &st($c0,&QWPw(11,$rp)); &FR($c0); ($c0)=&NR(1);
146 ($c0,$c1,$c2)=($c1,$c2,$c0);
147 &mov("zero",$c2);
148
149 &mul_add_c($a[5],$b[7],$c0,$c1,$c2); &FR($a[5]);
150 &mul_add_c($a[6],$b[6],$c0,$c1,$c2);
151 &mul_add_c($a[7],$b[5],$c0,$c1,$c2); &FR($b[5]);
152 &st($c0,&QWPw(12,$rp)); &FR($c0); ($c0)=&NR(1);
153 ($c0,$c1,$c2)=($c1,$c2,$c0);
154 &mov("zero",$c2);
155
156 &mul_add_c($a[6],$b[7],$c0,$c1,$c2); &FR($a[6]);
157 &mul_add_c($a[7],$b[6],$c0,$c1,$c2); &FR($b[6]);
158 &st($c0,&QWPw(13,$rp)); &FR($c0); ($c0)=&NR(1);
159 ($c0,$c1,$c2)=($c1,$c2,$c0);
160 &mov("zero",$c2);
161
162 &mul_add_c($a[7],$b[7],$c0,$c1,$c2); &FR($a[7],$b[7]);
163 &st($c0,&QWPw(14,$rp));
164 &st($c1,&QWPw(15,$rp));
165
166 &FR($c0,$c1,$c2);
167
168 &ld($reg_s0,&swtmp(0));
169 &ld($reg_s1,&swtmp(1));
170 &stack_pop(2);
171
172 &function_end($name);
173
174 &fin_pool;
175 }
176
1771;
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/sqr.pl b/src/lib/libcrypto/bn/asm/alpha.works/sqr.pl
new file mode 100644
index 0000000000..a55b696906
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.works/sqr.pl
@@ -0,0 +1,113 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_sqr_words
5 {
6 local($name)=@_;
7 local($cc,$a,$b,$r,$couny);
8
9 &init_pool(3);
10 ($cc)=GR("r0");
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $count=&wparam(2);
15
16 &function_begin($name,"");
17
18 &comment("");
19 &sub($count,4,$count);
20 &mov("zero",$cc);
21 &br(&label("finish"));
22 &blt($count,&label("finish"));
23
24 ($a0,$r0)=&NR(2);
25 &ld($a0,&QWPw(0,$ap));
26 &ld($r0,&QWPw(0,$rp));
27
28$a=<<'EOF';
29##########################################################
30 &set_label("loop");
31
32 ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
33 ($b1)=&NR(1); &ld($b1,&QWPw(1,$bp));
34 ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
35 ($b2)=&NR(1); &ld($b2,&QWPw(2,$bp));
36 ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
37 ($b3)=&NR(1); &ld($b3,&QWPw(3,$bp));
38
39 ($o0,$t0)=&NR(2);
40 &add($a0,$b0,$o0);
41 &cmpult($o0,$b0,$t0);
42 &add($o0,$cc,$o0);
43 &cmpult($o0,$cc,$cc);
44 &add($cc,$t0,$cc); &FR($t0);
45
46 ($t1,$o1)=&NR(2);
47
48 &add($a1,$b1,$o1); &FR($a1);
49 &cmpult($o1,$b1,$t1); &FR($b1);
50 &add($o1,$cc,$o1);
51 &cmpult($o1,$cc,$cc);
52 &add($cc,$t1,$cc); &FR($t1);
53
54 ($t2,$o2)=&NR(2);
55
56 &add($a2,$b2,$o2); &FR($a2);
57 &cmpult($o2,$b2,$t2); &FR($b2);
58 &add($o2,$cc,$o2);
59 &cmpult($o2,$cc,$cc);
60 &add($cc,$t2,$cc); &FR($t2);
61
62 ($t3,$o3)=&NR(2);
63
64 &add($a3,$b3,$o3); &FR($a3);
65 &cmpult($o3,$b3,$t3); &FR($b3);
66 &add($o3,$cc,$o3);
67 &cmpult($o3,$cc,$cc);
68 &add($cc,$t3,$cc); &FR($t3);
69
70 &st($o0,&QWPw(0,$rp)); &FR($o0);
71 &st($o1,&QWPw(0,$rp)); &FR($o1);
72 &st($o2,&QWPw(0,$rp)); &FR($o2);
73 &st($o3,&QWPw(0,$rp)); &FR($o3);
74
75 &sub($count,4,$count); # count-=4
76 &add($ap,4*$QWS,$ap); # count+=4
77 &add($bp,4*$QWS,$bp); # count+=4
78 &add($rp,4*$QWS,$rp); # count+=4
79
80 &blt($count,&label("finish"));
81 &ld($a0,&QWPw(0,$ap));
82 &ld($b0,&QWPw(0,$bp));
83 &br(&label("loop"));
84EOF
85##################################################
86 # Do the last 0..3 words
87
88 &set_label("last_loop");
89
90 &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
91 &mul($a0,$a0,($l0)=&NR(1));
92 &add($ap,$QWS,$ap);
93 &add($rp,2*$QWS,$rp);
94 &sub($count,1,$count);
95 &muh($a0,$a0,($h0)=&NR(1)); &FR($a0);
96 &st($l0,&QWPw(-2,$rp)); &FR($l0);
97 &st($h0,&QWPw(-1,$rp)); &FR($h0);
98
99 &bgt($count,&label("last_loop"));
100 &function_end_A($name);
101
102######################################################
103 &set_label("finish");
104 &add($count,4,$count);
105 &bgt($count,&label("last_loop"));
106
107 &set_label("end");
108 &function_end($name);
109
110 &fin_pool;
111 }
112
1131;
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/sqr_c4.pl b/src/lib/libcrypto/bn/asm/alpha.works/sqr_c4.pl
new file mode 100644
index 0000000000..bf33f5b503
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.works/sqr_c4.pl
@@ -0,0 +1,109 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub sqr_add_c
5 {
6 local($a,$c0,$c1,$c2)=@_;
7 local($l1,$h1,$t1,$t2);
8
9 &mul($a,$a,($l1)=&NR(1));
10 &muh($a,$a,($h1)=&NR(1));
11 &add($c0,$l1,$c0);
12 &add($c1,$h1,$c1);
13 &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
14 &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
15 &add($c1,$t1,$c1); &FR($t1);
16 &add($c2,$t2,$c2); &FR($t2);
17 }
18
19sub sqr_add_c2
20 {
21 local($a,$b,$c0,$c1,$c2)=@_;
22 local($l1,$h1,$t1,$t2);
23
24 &mul($a,$b,($l1)=&NR(1));
25 &muh($a,$b,($h1)=&NR(1));
26 &cmplt($l1,"zero",($lc1)=&NR(1));
27 &cmplt($h1,"zero",($hc1)=&NR(1));
28 &add($l1,$l1,$l1);
29 &add($h1,$h1,$h1);
30 &add($h1,$lc1,$h1); &FR($lc1);
31 &add($c2,$hc1,$c2); &FR($hc1);
32
33 &add($c0,$l1,$c0);
34 &add($c1,$h1,$c1);
35 &cmpult($c0,$l1,($lc1)=&NR(1)); &FR($l1);
36 &cmpult($c1,$h1,($hc1)=&NR(1)); &FR($h1);
37
38 &add($c1,$lc1,$c1); &FR($lc1);
39 &add($c2,$hc1,$c2); &FR($hc1);
40 }
41
42
43sub bn_sqr_comba4
44 {
45 local($name)=@_;
46 local(@a,@b,$r,$c0,$c1,$c2);
47
48 $cnt=1;
49 &init_pool(2);
50
51 $rp=&wparam(0);
52 $ap=&wparam(1);
53
54 &function_begin($name,"");
55
56 &comment("");
57
58 &ld(($a[0])=&NR(1),&QWPw(0,$ap));
59 &ld(($a[1])=&NR(1),&QWPw(1,$ap));
60 &ld(($a[2])=&NR(1),&QWPw(2,$ap));
61 &ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap);
62
63 ($c0,$c1,$c2)=&NR(3);
64
65 &mov("zero",$c2);
66 &mul($a[0],$a[0],$c0);
67 &muh($a[0],$a[0],$c1);
68 &st($c0,&QWPw(0,$rp));
69 ($c0,$c1,$c2)=($c1,$c2,$c0);
70 &mov("zero",$c2);
71
72 &sqr_add_c2($a[0],$a[1],$c0,$c1,$c2);
73 &st($c0,&QWPw(1,$rp));
74 ($c0,$c1,$c2)=($c1,$c2,$c0);
75 &mov("zero",$c2);
76
77 &sqr_add_c($a[1],$c0,$c1,$c2);
78 &sqr_add_c2($a[2],$a[0],$c0,$c1,$c2);
79 &st($c0,&QWPw(2,$rp));
80 ($c0,$c1,$c2)=($c1,$c2,$c0);
81 &mov("zero",$c2);
82
83 &sqr_add_c2($a[3],$a[0],$c0,$c1,$c2);
84 &sqr_add_c2($a[2],$a[1],$c0,$c1,$c2);
85 &st($c0,&QWPw(3,$rp));
86 ($c0,$c1,$c2)=($c1,$c2,$c0);
87 &mov("zero",$c2);
88
89 &sqr_add_c($a[2],$c0,$c1,$c2);
90 &sqr_add_c2($a[3],$a[1],$c0,$c1,$c2);
91 &st($c0,&QWPw(4,$rp));
92 ($c0,$c1,$c2)=($c1,$c2,$c0);
93 &mov("zero",$c2);
94
95 &sqr_add_c2($a[3],$a[2],$c0,$c1,$c2);
96 &st($c0,&QWPw(5,$rp));
97 ($c0,$c1,$c2)=($c1,$c2,$c0);
98 &mov("zero",$c2);
99
100 &sqr_add_c($a[3],$c0,$c1,$c2);
101 &st($c0,&QWPw(6,$rp));
102 &st($c1,&QWPw(7,$rp));
103
104 &function_end($name);
105
106 &fin_pool;
107 }
108
1091;
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/sqr_c8.pl b/src/lib/libcrypto/bn/asm/alpha.works/sqr_c8.pl
new file mode 100644
index 0000000000..b4afe085f1
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.works/sqr_c8.pl
@@ -0,0 +1,132 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_sqr_comba8
5 {
6 local($name)=@_;
7 local(@a,@b,$r,$c0,$c1,$c2);
8
9 $cnt=1;
10 &init_pool(2);
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14
15 &function_begin($name,"");
16
17 &comment("");
18
19 &ld(($a[0])=&NR(1),&QWPw(0,$ap));
20 &ld(($a[1])=&NR(1),&QWPw(1,$ap));
21 &ld(($a[2])=&NR(1),&QWPw(2,$ap));
22 &ld(($a[3])=&NR(1),&QWPw(3,$ap));
23 &ld(($a[4])=&NR(1),&QWPw(4,$ap));
24 &ld(($a[5])=&NR(1),&QWPw(5,$ap));
25 &ld(($a[6])=&NR(1),&QWPw(6,$ap));
26 &ld(($a[7])=&NR(1),&QWPw(7,$ap)); &FR($ap);
27
28 ($c0,$c1,$c2)=&NR(3);
29
30 &mov("zero",$c2);
31 &mul($a[0],$a[0],$c0);
32 &muh($a[0],$a[0],$c1);
33 &st($c0,&QWPw(0,$rp));
34 ($c0,$c1,$c2)=($c1,$c2,$c0);
35 &mov("zero",$c2);
36
37 &sqr_add_c2($a[1],$a[0],$c0,$c1,$c2);
38 &st($c0,&QWPw(1,$rp));
39 ($c0,$c1,$c2)=($c1,$c2,$c0);
40 &mov("zero",$c2);
41
42 &sqr_add_c($a[1],$c0,$c1,$c2);
43 &sqr_add_c2($a[2],$a[0],$c0,$c1,$c2);
44 &st($c0,&QWPw(2,$rp));
45 ($c0,$c1,$c2)=($c1,$c2,$c0);
46 &mov("zero",$c2);
47
48 &sqr_add_c2($a[2],$a[1],$c0,$c1,$c2);
49 &sqr_add_c2($a[3],$a[0],$c0,$c1,$c2);
50 &st($c0,&QWPw(3,$rp));
51 ($c0,$c1,$c2)=($c1,$c2,$c0);
52 &mov("zero",$c2);
53
54 &sqr_add_c($a[2],$c0,$c1,$c2);
55 &sqr_add_c2($a[3],$a[1],$c0,$c1,$c2);
56 &sqr_add_c2($a[4],$a[0],$c0,$c1,$c2);
57 &st($c0,&QWPw(4,$rp));
58 ($c0,$c1,$c2)=($c1,$c2,$c0);
59 &mov("zero",$c2);
60
61 &sqr_add_c2($a[3],$a[2],$c0,$c1,$c2);
62 &sqr_add_c2($a[4],$a[1],$c0,$c1,$c2);
63 &sqr_add_c2($a[5],$a[0],$c0,$c1,$c2);
64 &st($c0,&QWPw(5,$rp));
65 ($c0,$c1,$c2)=($c1,$c2,$c0);
66 &mov("zero",$c2);
67
68 &sqr_add_c($a[3],$c0,$c1,$c2);
69 &sqr_add_c2($a[4],$a[2],$c0,$c1,$c2);
70 &sqr_add_c2($a[5],$a[1],$c0,$c1,$c2);
71 &sqr_add_c2($a[6],$a[0],$c0,$c1,$c2);
72 &st($c0,&QWPw(6,$rp));
73 ($c0,$c1,$c2)=($c1,$c2,$c0);
74 &mov("zero",$c2);
75
76 &sqr_add_c2($a[4],$a[3],$c0,$c1,$c2);
77 &sqr_add_c2($a[5],$a[2],$c0,$c1,$c2);
78 &sqr_add_c2($a[6],$a[1],$c0,$c1,$c2);
79 &sqr_add_c2($a[7],$a[0],$c0,$c1,$c2);
80 &st($c0,&QWPw(7,$rp));
81 ($c0,$c1,$c2)=($c1,$c2,$c0);
82 &mov("zero",$c2);
83
84 &sqr_add_c($a[4],$c0,$c1,$c2);
85 &sqr_add_c2($a[5],$a[3],$c0,$c1,$c2);
86 &sqr_add_c2($a[6],$a[2],$c0,$c1,$c2);
87 &sqr_add_c2($a[7],$a[1],$c0,$c1,$c2);
88 &st($c0,&QWPw(8,$rp));
89 ($c0,$c1,$c2)=($c1,$c2,$c0);
90 &mov("zero",$c2);
91
92 &sqr_add_c2($a[5],$a[4],$c0,$c1,$c2);
93 &sqr_add_c2($a[6],$a[3],$c0,$c1,$c2);
94 &sqr_add_c2($a[7],$a[2],$c0,$c1,$c2);
95 &st($c0,&QWPw(9,$rp));
96 ($c0,$c1,$c2)=($c1,$c2,$c0);
97 &mov("zero",$c2);
98
99 &sqr_add_c($a[5],$c0,$c1,$c2);
100 &sqr_add_c2($a[6],$a[4],$c0,$c1,$c2);
101 &sqr_add_c2($a[7],$a[3],$c0,$c1,$c2);
102 &st($c0,&QWPw(10,$rp));
103 ($c0,$c1,$c2)=($c1,$c2,$c0);
104 &mov("zero",$c2);
105
106 &sqr_add_c2($a[6],$a[5],$c0,$c1,$c2);
107 &sqr_add_c2($a[7],$a[4],$c0,$c1,$c2);
108 &st($c0,&QWPw(11,$rp));
109 ($c0,$c1,$c2)=($c1,$c2,$c0);
110 &mov("zero",$c2);
111
112 &sqr_add_c($a[6],$c0,$c1,$c2);
113 &sqr_add_c2($a[7],$a[5],$c0,$c1,$c2);
114 &st($c0,&QWPw(12,$rp));
115 ($c0,$c1,$c2)=($c1,$c2,$c0);
116 &mov("zero",$c2);
117
118 &sqr_add_c2($a[7],$a[6],$c0,$c1,$c2);
119 &st($c0,&QWPw(13,$rp));
120 ($c0,$c1,$c2)=($c1,$c2,$c0);
121 &mov("zero",$c2);
122
123 &sqr_add_c($a[7],$c0,$c1,$c2);
124 &st($c0,&QWPw(14,$rp));
125 &st($c1,&QWPw(15,$rp));
126
127 &function_end($name);
128
129 &fin_pool;
130 }
131
1321;
diff --git a/src/lib/libcrypto/bn/asm/alpha.works/sub.pl b/src/lib/libcrypto/bn/asm/alpha.works/sub.pl
new file mode 100644
index 0000000000..d998da5c21
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha.works/sub.pl
@@ -0,0 +1,108 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_sub_words
5 {
6 local($name)=@_;
7 local($cc,$a,$b,$r);
8
9 &init_pool(4);
10 ($cc)=GR("r0");
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $bp=&wparam(2);
15 $count=&wparam(3);
16
17 &function_begin($name,"");
18
19 &comment("");
20 &sub($count,4,$count);
21 &mov("zero",$cc);
22 &blt($count,&label("finish"));
23
24 ($a0,$b0)=&NR(2);
25 &ld($a0,&QWPw(0,$ap));
26 &ld($b0,&QWPw(0,$bp));
27
28##########################################################
29 &set_label("loop");
30
31 ($a1,$tmp,$b1,$a2,$b2,$a3,$b3,$o0)=&NR(8);
32 &ld($a1,&QWPw(1,$ap));
33 &cmpult($a0,$b0,$tmp); # will we borrow?
34 &ld($b1,&QWPw(1,$bp));
35 &sub($a0,$b0,$a0); # do the subtract
36 &ld($a2,&QWPw(2,$ap));
37 &cmpult($a0,$cc,$b0); # will we borrow?
38 &ld($b2,&QWPw(2,$bp));
39 &sub($a0,$cc,$o0); # will we borrow?
40 &ld($a3,&QWPw(3,$ap));
41 &add($b0,$tmp,$cc); ($t1,$o1)=&NR(2); &FR($tmp);
42
43 &cmpult($a1,$b1,$t1); # will we borrow?
44 &sub($a1,$b1,$a1); # do the subtract
45 &ld($b3,&QWPw(3,$bp));
46 &cmpult($a1,$cc,$b1); # will we borrow?
47 &sub($a1,$cc,$o1); # will we borrow?
48 &add($b1,$t1,$cc); ($tmp,$o2)=&NR(2); &FR($t1,$a1,$b1);
49
50 &cmpult($a2,$b2,$tmp); # will we borrow?
51 &sub($a2,$b2,$a2); # do the subtract
52 &st($o0,&QWPw(0,$rp)); &FR($o0); # save
53 &cmpult($a2,$cc,$b2); # will we borrow?
54 &sub($a2,$cc,$o2); # will we borrow?
55 &add($b2,$tmp,$cc); ($t3,$o3)=&NR(2); &FR($tmp,$a2,$b2);
56
57 &cmpult($a3,$b3,$t3); # will we borrow?
58 &sub($a3,$b3,$a3); # do the subtract
59 &st($o1,&QWPw(1,$rp)); &FR($o1);
60 &cmpult($a3,$cc,$b3); # will we borrow?
61 &sub($a3,$cc,$o3); # will we borrow?
62 &add($b3,$t3,$cc); &FR($t3,$a3,$b3);
63
64 &st($o2,&QWPw(2,$rp)); &FR($o2);
65 &sub($count,4,$count); # count-=4
66 &st($o3,&QWPw(3,$rp)); &FR($o3);
67 &add($ap,4*$QWS,$ap); # count+=4
68 &add($bp,4*$QWS,$bp); # count+=4
69 &add($rp,4*$QWS,$rp); # count+=4
70
71 &blt($count,&label("finish"));
72 &ld($a0,&QWPw(0,$ap));
73 &ld($b0,&QWPw(0,$bp));
74 &br(&label("loop"));
75##################################################
76 # Do the last 0..3 words
77
78 &set_label("last_loop");
79
80 &ld($a0,&QWPw(0,$ap)); # get a
81 &ld($b0,&QWPw(0,$bp)); # get b
82 &cmpult($a0,$b0,$tmp); # will we borrow?
83 &sub($a0,$b0,$a0); # do the subtract
84 &cmpult($a0,$cc,$b0); # will we borrow?
85 &sub($a0,$cc,$a0); # will we borrow?
86 &st($a0,&QWPw(0,$rp)); # save
87 &add($b0,$tmp,$cc); # add the borrows
88
89 &add($ap,$QWS,$ap);
90 &add($bp,$QWS,$bp);
91 &add($rp,$QWS,$rp);
92 &sub($count,1,$count);
93 &bgt($count,&label("last_loop"));
94 &function_end_A($name);
95
96######################################################
97 &set_label("finish");
98 &add($count,4,$count);
99 &bgt($count,&label("last_loop"));
100
101 &FR($a0,$b0);
102 &set_label("end");
103 &function_end($name);
104
105 &fin_pool;
106 }
107
1081;
diff --git a/src/lib/libcrypto/bn/asm/alpha/add.pl b/src/lib/libcrypto/bn/asm/alpha/add.pl
new file mode 100644
index 0000000000..13bf516428
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha/add.pl
@@ -0,0 +1,118 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_add_words
5 {
6 local($name)=@_;
7 local($cc,$a,$b,$r);
8
9 &init_pool(4);
10 ($cc)=GR("r0");
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $bp=&wparam(2);
15 $count=&wparam(3);
16
17 &function_begin($name,"");
18
19 &comment("");
20 &sub($count,4,$count);
21 &mov("zero",$cc);
22 &blt($count,&label("finish"));
23
24 ($a0,$b0)=&NR(2);
25
26##########################################################
27 &set_label("loop");
28
29 &ld(($a0)=&NR(1),&QWPw(0,$ap));
30 &ld(($b0)=&NR(1),&QWPw(0,$bp));
31 &ld(($a1)=&NR(1),&QWPw(1,$ap));
32 &ld(($b1)=&NR(1),&QWPw(1,$bp));
33
34 ($o0,$t0)=&NR(2);
35 &add($a0,$b0,$o0);
36 &ld(($a2)=&NR(1),&QWPw(2,$ap));
37 &cmpult($o0,$b0,$t0);
38 &add($o0,$cc,$o0);
39 &cmpult($o0,$cc,$cc);
40 &ld(($b2)=&NR(1),&QWPw(2,$bp));
41 &add($cc,$t0,$cc); &FR($t0);
42
43 ($t1,$o1)=&NR(2);
44
45 &add($a1,$b1,$o1); &FR($a1);
46 &cmpult($o1,$b1,$t1); &FR($b1);
47 &add($o1,$cc,$o1);
48 &cmpult($o1,$cc,$cc);
49 &ld(($a3)=&NR(1),&QWPw(3,$ap));
50 &add($cc,$t1,$cc); &FR($t1);
51
52 ($t2,$o2)=&NR(2);
53
54 &add($a2,$b2,$o2); &FR($a2);
55 &cmpult($o2,$b2,$t2); &FR($b2);
56 &add($o2,$cc,$o2);
57 &cmpult($o2,$cc,$cc);
58 &ld(($b3)=&NR(1),&QWPw(3,$bp));
59 &st($o0,&QWPw(0,$rp)); &FR($o0);
60 &add($cc,$t2,$cc); &FR($t2);
61
62 ($t3,$o3)=&NR(2);
63
64 &st($o1,&QWPw(0,$rp)); &FR($o1);
65 &add($a3,$b3,$o3); &FR($a3);
66 &cmpult($o3,$b3,$t3); &FR($b3);
67 &add($o3,$cc,$o3);
68 &st($o2,&QWPw(0,$rp)); &FR($o2);
69 &cmpult($o3,$cc,$cc);
70 &st($o3,&QWPw(0,$rp)); &FR($o3);
71 &add($cc,$t3,$cc); &FR($t3);
72
73
74 &sub($count,4,$count); # count-=4
75 &add($ap,4*$QWS,$ap); # count+=4
76 &add($bp,4*$QWS,$bp); # count+=4
77 &add($rp,4*$QWS,$rp); # count+=4
78
79 ###
80 &bge($count,&label("loop"));
81 ###
82 &br(&label("finish"));
83##################################################
84 # Do the last 0..3 words
85
86 ($t0,$o0)=&NR(2);
87 &set_label("last_loop");
88
89 &ld($a0,&QWPw(0,$ap)); # get a
90 &ld($b0,&QWPw(0,$bp)); # get b
91 &add($ap,$QWS,$ap);
92 &add($bp,$QWS,$bp);
93 &add($a0,$b0,$o0);
94 &sub($count,1,$count);
95 &cmpult($o0,$b0,$t0); # will we borrow?
96 &add($o0,$cc,$o0); # will we borrow?
97 &cmpult($o0,$cc,$cc); # will we borrow?
98 &add($rp,$QWS,$rp);
99 &st($o0,&QWPw(-1,$rp)); # save
100 &add($cc,$t0,$cc); # add the borrows
101
102 ###
103 &bgt($count,&label("last_loop"));
104 &function_end_A($name);
105
106######################################################
107 &set_label("finish");
108 &add($count,4,$count);
109 &bgt($count,&label("last_loop"));
110
111 &FR($o0,$t0,$a0,$b0);
112 &set_label("end");
113 &function_end($name);
114
115 &fin_pool;
116 }
117
1181;
diff --git a/src/lib/libcrypto/bn/asm/alpha/div.pl b/src/lib/libcrypto/bn/asm/alpha/div.pl
new file mode 100644
index 0000000000..e9e680897a
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha/div.pl
@@ -0,0 +1,144 @@
1#!/usr/local/bin/perl
2
3sub bn_div_words
4 {
5 local($data)=<<'EOF';
6 #
7 # What follows was taken directly from the C compiler with a few
8 # hacks to redo the lables.
9 #
10.text
11 .set noreorder
12 .set volatile
13 .align 3
14 .globl bn_div_words
15 .ent bn_div_words
16bn_div_words
17 ldgp $29,0($27)
18bn_div_words.ng:
19 lda $30,-48($30)
20 .frame $30,48,$26,0
21 stq $26,0($30)
22 stq $9,8($30)
23 stq $10,16($30)
24 stq $11,24($30)
25 stq $12,32($30)
26 stq $13,40($30)
27 .mask 0x4003e00,-48
28 .prologue 1
29 bis $16,$16,$9
30 bis $17,$17,$10
31 bis $18,$18,$11
32 bis $31,$31,$13
33 bis $31,2,$12
34 bne $11,$9119
35 lda $0,-1
36 br $31,$9136
37 .align 4
38$9119:
39 bis $11,$11,$16
40 jsr $26,BN_num_bits_word
41 ldgp $29,0($26)
42 subq $0,64,$1
43 beq $1,$9120
44 bis $31,1,$1
45 sll $1,$0,$1
46 cmpule $9,$1,$1
47 bne $1,$9120
48 # lda $16,_IO_stderr_
49 # lda $17,$C32
50 # bis $0,$0,$18
51 # jsr $26,fprintf
52 # ldgp $29,0($26)
53 jsr $26,abort
54 ldgp $29,0($26)
55 .align 4
56$9120:
57 bis $31,64,$3
58 cmpult $9,$11,$2
59 subq $3,$0,$1
60 addl $1,$31,$0
61 subq $9,$11,$1
62 cmoveq $2,$1,$9
63 beq $0,$9122
64 zapnot $0,15,$2
65 subq $3,$0,$1
66 sll $11,$2,$11
67 sll $9,$2,$3
68 srl $10,$1,$1
69 sll $10,$2,$10
70 bis $3,$1,$9
71$9122:
72 srl $11,32,$5
73 zapnot $11,15,$6
74 lda $7,-1
75 .align 5
76$9123:
77 srl $9,32,$1
78 subq $1,$5,$1
79 bne $1,$9126
80 zapnot $7,15,$27
81 br $31,$9127
82 .align 4
83$9126:
84 bis $9,$9,$24
85 bis $5,$5,$25
86 divqu $24,$25,$27
87$9127:
88 srl $10,32,$4
89 .align 5
90$9128:
91 mulq $27,$5,$1
92 subq $9,$1,$3
93 zapnot $3,240,$1
94 bne $1,$9129
95 mulq $6,$27,$2
96 sll $3,32,$1
97 addq $1,$4,$1
98 cmpule $2,$1,$2
99 bne $2,$9129
100 subq $27,1,$27
101 br $31,$9128
102 .align 4
103$9129:
104 mulq $27,$6,$1
105 mulq $27,$5,$4
106 srl $1,32,$3
107 sll $1,32,$1
108 addq $4,$3,$4
109 cmpult $10,$1,$2
110 subq $10,$1,$10
111 addq $2,$4,$2
112 cmpult $9,$2,$1
113 bis $2,$2,$4
114 beq $1,$9134
115 addq $9,$11,$9
116 subq $27,1,$27
117$9134:
118 subl $12,1,$12
119 subq $9,$4,$9
120 beq $12,$9124
121 sll $27,32,$13
122 sll $9,32,$2
123 srl $10,32,$1
124 sll $10,32,$10
125 bis $2,$1,$9
126 br $31,$9123
127 .align 4
128$9124:
129 bis $13,$27,$0
130$9136:
131 ldq $26,0($30)
132 ldq $9,8($30)
133 ldq $10,16($30)
134 ldq $11,24($30)
135 ldq $12,32($30)
136 ldq $13,40($30)
137 addq $30,48,$30
138 ret $31,($26),1
139 .end bn_div_words
140EOF
141 &asm_add($data);
142 }
143
1441;
diff --git a/src/lib/libcrypto/bn/asm/alpha/mul.pl b/src/lib/libcrypto/bn/asm/alpha/mul.pl
new file mode 100644
index 0000000000..76c926566c
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha/mul.pl
@@ -0,0 +1,104 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_mul_words
5 {
6 local($name)=@_;
7 local($cc,$a,$b,$r,$couny);
8
9 &init_pool(4);
10 ($cc)=GR("r0");
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $count=&wparam(2);
15 $word=&wparam(3);
16
17 &function_begin($name,"");
18
19 &comment("");
20 &sub($count,4,$count);
21 &mov("zero",$cc);
22 ###
23 &blt($count,&label("finish"));
24
25 ($a0)=&NR(1); &ld($a0,&QWPw(0,$ap));
26
27 &set_label("loop");
28
29 ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
30 ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
31
32 &muh($a0,$word,($h0)=&NR(1)); &FR($a0);
33 ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
34 ### wait 8
35 &mul($a0,$word,($l0)=&NR(1)); &FR($a0);
36 ### wait 8
37 &muh($a1,$word,($h1)=&NR(1)); &FR($a1);
38 &add($l0,$cc,$l0); ### wait 8
39 &mul($a1,$word,($l1)=&NR(1)); &FR($a1);
40 &cmpult($l0,$cc,$cc); ### wait 8
41 &muh($a2,$word,($h2)=&NR(1)); &FR($a2);
42 &add($h0,$cc,$cc); &FR($h0); ### wait 8
43 &mul($a2,$word,($l2)=&NR(1)); &FR($a2);
44 &add($l1,$cc,$l1); ### wait 8
45 &st($l0,&QWPw(0,$rp)); &FR($l0);
46 &cmpult($l1,$cc,$cc); ### wait 8
47 &muh($a3,$word,($h3)=&NR(1)); &FR($a3);
48 &add($h1,$cc,$cc); &FR($h1);
49 &mul($a3,$word,($l3)=&NR(1)); &FR($a3);
50 &add($l2,$cc,$l2);
51 &st($l1,&QWPw(1,$rp)); &FR($l1);
52 &cmpult($l2,$cc,$cc);
53 &add($h2,$cc,$cc); &FR($h2);
54 &sub($count,4,$count); # count-=4
55 &st($l2,&QWPw(2,$rp)); &FR($l2);
56 &add($l3,$cc,$l3);
57 &cmpult($l3,$cc,$cc);
58 &add($bp,4*$QWS,$bp); # count+=4
59 &add($h3,$cc,$cc); &FR($h3);
60 &add($ap,4*$QWS,$ap); # count+=4
61 &st($l3,&QWPw(3,$rp)); &FR($l3);
62 &add($rp,4*$QWS,$rp); # count+=4
63 ###
64 &blt($count,&label("finish"));
65 ($a0)=&NR(1); &ld($a0,&QWPw(0,$ap));
66 &br(&label("finish"));
67##################################################
68
69##################################################
70 # Do the last 0..3 words
71
72 &set_label("last_loop");
73
74 &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
75 ###
76 ###
77 ###
78 &muh($a0,$word,($h0)=&NR(1));
79 ### Wait 8 for next mul issue
80 &mul($a0,$word,($l0)=&NR(1)); &FR($a0)
81 &add($ap,$QWS,$ap);
82 ### Loose 12 until result is available
83 &add($rp,$QWS,$rp);
84 &sub($count,1,$count);
85 &add($l0,$cc,$l0);
86 ###
87 &st($l0,&QWPw(-1,$rp)); &FR($l0);
88 &cmpult($l0,$cc,$cc);
89 &add($h0,$cc,$cc); &FR($h0);
90 &bgt($count,&label("last_loop"));
91 &function_end_A($name);
92
93######################################################
94 &set_label("finish");
95 &add($count,4,$count);
96 &bgt($count,&label("last_loop"));
97
98 &set_label("end");
99 &function_end($name);
100
101 &fin_pool;
102 }
103
1041;
diff --git a/src/lib/libcrypto/bn/asm/alpha/mul_add.pl b/src/lib/libcrypto/bn/asm/alpha/mul_add.pl
new file mode 100644
index 0000000000..0d6df69bc4
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha/mul_add.pl
@@ -0,0 +1,123 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_mul_add_words
5 {
6 local($name)=@_;
7 local($cc,$a,$b,$r,$couny);
8
9 &init_pool(4);
10 ($cc)=GR("r0");
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $count=&wparam(2);
15 $word=&wparam(3);
16
17 &function_begin($name,"");
18
19 &comment("");
20 &sub($count,4,$count);
21 &mov("zero",$cc);
22 ###
23 &blt($count,&label("finish"));
24
25 &ld(($a0)=&NR(1),&QWPw(0,$ap));
26
27$a=<<'EOF';
28##########################################################
29 &set_label("loop");
30
31 &ld(($r0)=&NR(1),&QWPw(0,$rp));
32 &ld(($a1)=&NR(1),&QWPw(1,$ap));
33 &muh($a0,$word,($h0)=&NR(1));
34 &ld(($r1)=&NR(1),&QWPw(1,$rp));
35 &ld(($a2)=&NR(1),&QWPw(2,$ap));
36 ###
37 &mul($a0,$word,($l0)=&NR(1)); &FR($a0);
38 &ld(($r2)=&NR(1),&QWPw(2,$rp));
39 &muh($a1,$word,($h1)=&NR(1));
40 &ld(($a3)=&NR(1),&QWPw(3,$ap));
41 &mul($a1,$word,($l1)=&NR(1)); &FR($a1);
42 &ld(($r3)=&NR(1),&QWPw(3,$rp));
43 &add($r0,$l0,$r0);
44 &add($r1,$l1,$r1);
45 &cmpult($r0,$l0,($t0)=&NR(1)); &FR($l0);
46 &cmpult($r1,$l1,($t1)=&NR(1)); &FR($l1);
47 &muh($a2,$word,($h2)=&NR(1));
48 &add($r0,$cc,$r0);
49 &add($h0,$t0,$h0); &FR($t0);
50 &cmpult($r0,$cc,$cc);
51 &add($h1,$t1,$h1); &FR($t1);
52 &add($h0,$cc,$cc); &FR($h0);
53 &mul($a2,$word,($l2)=&NR(1)); &FR($a2);
54 &add($r1,$cc,$r1);
55 &cmpult($r1,$cc,$cc);
56 &add($r2,$l2,$r2);
57 &add($h1,$cc,$cc); &FR($h1);
58 &cmpult($r2,$l2,($t2)=&NR(1)); &FR($l2);
59 &muh($a3,$word,($h3)=&NR(1));
60 &add($r2,$cc,$r2);
61 &st($r0,&QWPw(0,$rp)); &FR($r0);
62 &add($h2,$t2,$h2); &FR($t2);
63 &st($r1,&QWPw(1,$rp)); &FR($r1);
64 &cmpult($r2,$cc,$cc);
65 &mul($a3,$word,($l3)=&NR(1)); &FR($a3);
66 &add($h2,$cc,$cc); &FR($h2);
67 &st($r2,&QWPw(2,$rp)); &FR($r2);
68 &sub($count,4,$count); # count-=4
69 &add($rp,4*$QWS,$rp); # count+=4
70 &add($r3,$l3,$r3);
71 &add($ap,4*$QWS,$ap); # count+=4
72 &cmpult($r3,$l3,($t3)=&NR(1)); &FR($l3);
73 &add($r3,$cc,$r3);
74 &add($h3,$t3,$h3); &FR($t3);
75 &cmpult($r3,$cc,$cc);
76 &st($r3,&QWPw(-1,$rp)); &FR($r3);
77 &add($h3,$cc,$cc); &FR($h3);
78
79 ###
80 &blt($count,&label("finish"));
81 &ld(($a0)=&NR(1),&QWPw(0,$ap));
82 &br(&label("loop"));
83EOF
84##################################################
85 # Do the last 0..3 words
86
87 &set_label("last_loop");
88
89 &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
90 &ld(($r0)=&NR(1),&QWPw(0,$rp)); # get b
91 ###
92 ###
93 &muh($a0,$word,($h0)=&NR(1)); &FR($a0);
94 ### wait 8
95 &mul($a0,$word,($l0)=&NR(1)); &FR($a0);
96 &add($rp,$QWS,$rp);
97 &add($ap,$QWS,$ap);
98 &sub($count,1,$count);
99 ### wait 3 until l0 is available
100 &add($r0,$l0,$r0);
101 ###
102 &cmpult($r0,$l0,($t0)=&NR(1)); &FR($l0);
103 &add($r0,$cc,$r0);
104 &add($h0,$t0,$h0); &FR($t0);
105 &cmpult($r0,$cc,$cc);
106 &add($h0,$cc,$cc); &FR($h0);
107
108 &st($r0,&QWPw(-1,$rp)); &FR($r0);
109 &bgt($count,&label("last_loop"));
110 &function_end_A($name);
111
112######################################################
113 &set_label("finish");
114 &add($count,4,$count);
115 &bgt($count,&label("last_loop"));
116
117 &set_label("end");
118 &function_end($name);
119
120 &fin_pool;
121 }
122
1231;
diff --git a/src/lib/libcrypto/bn/asm/alpha/mul_c4.pl b/src/lib/libcrypto/bn/asm/alpha/mul_c4.pl
new file mode 100644
index 0000000000..9cc876ded4
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha/mul_c4.pl
@@ -0,0 +1,215 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4# upto
5
6sub mul_add_c
7 {
8 local($a,$b,$c0,$c1,$c2)=@_;
9 local($l1,$h1,$t1,$t2);
10
11 &mul($a,$b,($l1)=&NR(1));
12 &muh($a,$b,($h1)=&NR(1));
13 &add($c0,$l1,$c0);
14 &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
15 &add($t1,$h1,$h1); &FR($t1);
16 &add($c1,$h1,$c1);
17 &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
18 &add($c2,$t2,$c2); &FR($t2);
19 }
20
21sub bn_mul_comba4
22 {
23 local($name)=@_;
24 local(@a,@b,$r,$c0,$c1,$c2);
25
26 $cnt=1;
27 &init_pool(3);
28
29 $rp=&wparam(0);
30 $ap=&wparam(1);
31 $bp=&wparam(2);
32
33 &function_begin($name,"");
34
35 &comment("");
36
37 &ld(($a[0])=&NR(1),&QWPw(0,$ap));
38 &ld(($b[0])=&NR(1),&QWPw(0,$bp));
39 &ld(($a[1])=&NR(1),&QWPw(1,$ap));
40 &ld(($b[1])=&NR(1),&QWPw(1,$bp));
41 &mul($a[0],$b[0],($r00)=&NR(1));
42 &ld(($a[2])=&NR(1),&QWPw(2,$ap));
43 &ld(($b[2])=&NR(1),&QWPw(2,$bp));
44 &muh($a[0],$b[0],($r01)=&NR(1));
45 &FR($ap); &ld(($a[3])=&NR(1),&QWPw(3,$ap));
46 &FR($bp); &ld(($b[3])=&NR(1),&QWPw(3,$bp));
47 &mul($a[0],$b[1],($r02)=&NR(1));
48
49 ($R,$H1,$H2)=&NR(3);
50
51 &st($r00,&QWPw(0,$rp)); &FR($r00);
52
53 &mov("zero",$R);
54 &mul($a[1],$b[0],($r03)=&NR(1));
55
56 &mov("zero",$H1);
57 &mov("zero",$H0);
58 &add($R,$r01,$R);
59 &muh($a[0],$b[1],($r04)=&NR(1));
60 &cmpult($R,$r01,($t01)=&NR(1)); &FR($r01);
61 &add($R,$r02,$R);
62 &add($H1,$t01,$H1) &FR($t01);
63 &muh($a[1],$b[0],($r05)=&NR(1));
64 &cmpult($R,$r02,($t02)=&NR(1)); &FR($r02);
65 &add($R,$r03,$R);
66 &add($H2,$t02,$H2) &FR($t02);
67 &mul($a[0],$b[2],($r06)=&NR(1));
68 &cmpult($R,$r03,($t03)=&NR(1)); &FR($r03);
69 &add($H1,$t03,$H1) &FR($t03);
70 &st($R,&QWPw(1,$rp));
71 &add($H1,$H2,$R);
72
73 &mov("zero",$H1);
74 &add($R,$r04,$R);
75 &mov("zero",$H2);
76 &mul($a[1],$b[1],($r07)=&NR(1));
77 &cmpult($R,$r04,($t04)=&NR(1)); &FR($r04);
78 &add($R,$r05,$R);
79 &add($H1,$t04,$H1) &FR($t04);
80 &mul($a[2],$b[0],($r08)=&NR(1));
81 &cmpult($R,$r05,($t05)=&NR(1)); &FR($r05);
82 &add($R,$r01,$R);
83 &add($H2,$t05,$H2) &FR($t05);
84 &muh($a[0],$b[2],($r09)=&NR(1));
85 &cmpult($R,$r06,($t06)=&NR(1)); &FR($r06);
86 &add($R,$r07,$R);
87 &add($H1,$t06,$H1) &FR($t06);
88 &muh($a[1],$b[1],($r10)=&NR(1));
89 &cmpult($R,$r07,($t07)=&NR(1)); &FR($r07);
90 &add($R,$r08,$R);
91 &add($H2,$t07,$H2) &FR($t07);
92 &muh($a[2],$b[0],($r11)=&NR(1));
93 &cmpult($R,$r08,($t08)=&NR(1)); &FR($r08);
94 &add($H1,$t08,$H1) &FR($t08);
95 &st($R,&QWPw(2,$rp));
96 &add($H1,$H2,$R);
97
98 &mov("zero",$H1);
99 &add($R,$r09,$R);
100 &mov("zero",$H2);
101 &mul($a[0],$b[3],($r12)=&NR(1));
102 &cmpult($R,$r09,($t09)=&NR(1)); &FR($r09);
103 &add($R,$r10,$R);
104 &add($H1,$t09,$H1) &FR($t09);
105 &mul($a[1],$b[2],($r13)=&NR(1));
106 &cmpult($R,$r10,($t10)=&NR(1)); &FR($r10);
107 &add($R,$r11,$R);
108 &add($H1,$t10,$H1) &FR($t10);
109 &mul($a[2],$b[1],($r14)=&NR(1));
110 &cmpult($R,$r11,($t11)=&NR(1)); &FR($r11);
111 &add($R,$r12,$R);
112 &add($H1,$t11,$H1) &FR($t11);
113 &mul($a[3],$b[0],($r15)=&NR(1));
114 &cmpult($R,$r12,($t12)=&NR(1)); &FR($r12);
115 &add($R,$r13,$R);
116 &add($H1,$t12,$H1) &FR($t12);
117 &muh($a[0],$b[3],($r16)=&NR(1));
118 &cmpult($R,$r13,($t13)=&NR(1)); &FR($r13);
119 &add($R,$r14,$R);
120 &add($H1,$t13,$H1) &FR($t13);
121 &muh($a[1],$b[2],($r17)=&NR(1));
122 &cmpult($R,$r14,($t14)=&NR(1)); &FR($r14);
123 &add($R,$r15,$R);
124 &add($H1,$t14,$H1) &FR($t14);
125 &muh($a[2],$b[1],($r18)=&NR(1));
126 &cmpult($R,$r15,($t15)=&NR(1)); &FR($r15);
127 &add($H1,$t15,$H1) &FR($t15);
128 &st($R,&QWPw(3,$rp));
129 &add($H1,$H2,$R);
130
131 &mov("zero",$H1);
132 &add($R,$r16,$R);
133 &mov("zero",$H2);
134 &muh($a[3],$b[0],($r19)=&NR(1));
135 &cmpult($R,$r16,($t16)=&NR(1)); &FR($r16);
136 &add($R,$r17,$R);
137 &add($H1,$t16,$H1) &FR($t16);
138 &mul($a[1],$b[3],($r20)=&NR(1));
139 &cmpult($R,$r17,($t17)=&NR(1)); &FR($r17);
140 &add($R,$r18,$R);
141 &add($H1,$t17,$H1) &FR($t17);
142 &mul($a[2],$b[2],($r21)=&NR(1));
143 &cmpult($R,$r18,($t18)=&NR(1)); &FR($r18);
144 &add($R,$r19,$R);
145 &add($H1,$t18,$H1) &FR($t18);
146 &mul($a[3],$b[1],($r22)=&NR(1));
147 &cmpult($R,$r19,($t19)=&NR(1)); &FR($r19);
148 &add($R,$r20,$R);
149 &add($H1,$t19,$H1) &FR($t19);
150 &muh($a[1],$b[3],($r23)=&NR(1));
151 &cmpult($R,$r20,($t20)=&NR(1)); &FR($r20);
152 &add($R,$r21,$R);
153 &add($H1,$t20,$H1) &FR($t20);
154 &muh($a[2],$b[2],($r24)=&NR(1));
155 &cmpult($R,$r21,($t21)=&NR(1)); &FR($r21);
156 &add($R,$r22,$R);
157 &add($H1,$t21,$H1) &FR($t21);
158 &muh($a[3],$b[1],($r25)=&NR(1));
159 &cmpult($R,$r22,($t22)=&NR(1)); &FR($r22);
160 &add($H1,$t22,$H1) &FR($t22);
161 &st($R,&QWPw(4,$rp));
162 &add($H1,$H2,$R);
163
164 &mov("zero",$H1);
165 &add($R,$r23,$R);
166 &mov("zero",$H2);
167 &mul($a[2],$b[3],($r26)=&NR(1));
168 &cmpult($R,$r23,($t23)=&NR(1)); &FR($r23);
169 &add($R,$r24,$R);
170 &add($H1,$t23,$H1) &FR($t23);
171 &mul($a[3],$b[2],($r27)=&NR(1));
172 &cmpult($R,$r24,($t24)=&NR(1)); &FR($r24);
173 &add($R,$r25,$R);
174 &add($H1,$t24,$H1) &FR($t24);
175 &muh($a[2],$b[3],($r28)=&NR(1));
176 &cmpult($R,$r25,($t25)=&NR(1)); &FR($r25);
177 &add($R,$r26,$R);
178 &add($H1,$t25,$H1) &FR($t25);
179 &muh($a[3],$b[2],($r29)=&NR(1));
180 &cmpult($R,$r26,($t26)=&NR(1)); &FR($r26);
181 &add($R,$r27,$R);
182 &add($H1,$t26,$H1) &FR($t26);
183 &mul($a[3],$b[3],($r30)=&NR(1));
184 &cmpult($R,$r27,($t27)=&NR(1)); &FR($r27);
185 &add($H1,$t27,$H1) &FR($t27);
186 &st($R,&QWPw(5,$rp));
187 &add($H1,$H2,$R);
188
189 &mov("zero",$H1);
190 &add($R,$r28,$R);
191 &mov("zero",$H2);
192 &muh($a[3],$b[3],($r31)=&NR(1));
193 &cmpult($R,$r28,($t28)=&NR(1)); &FR($r28);
194 &add($R,$r29,$R);
195 &add($H1,$t28,$H1) &FR($t28);
196 ############
197 &cmpult($R,$r29,($t29)=&NR(1)); &FR($r29);
198 &add($R,$r30,$R);
199 &add($H1,$t29,$H1) &FR($t29);
200 ############
201 &cmpult($R,$r30,($t30)=&NR(1)); &FR($r30);
202 &add($H1,$t30,$H1) &FR($t30);
203 &st($R,&QWPw(6,$rp));
204 &add($H1,$H2,$R);
205
206 &add($R,$r31,$R); &FR($r31);
207 &st($R,&QWPw(7,$rp));
208
209 &FR($R,$H1,$H2);
210 &function_end($name);
211
212 &fin_pool;
213 }
214
2151;
diff --git a/src/lib/libcrypto/bn/asm/alpha/mul_c4.works.pl b/src/lib/libcrypto/bn/asm/alpha/mul_c4.works.pl
new file mode 100644
index 0000000000..79d86dd25c
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha/mul_c4.works.pl
@@ -0,0 +1,98 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub mul_add_c
5 {
6 local($a,$b,$c0,$c1,$c2)=@_;
7 local($l1,$h1,$t1,$t2);
8
9print STDERR "count=$cnt\n"; $cnt++;
10 &mul($a,$b,($l1)=&NR(1));
11 &muh($a,$b,($h1)=&NR(1));
12 &add($c0,$l1,$c0);
13 &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
14 &add($t1,$h1,$h1); &FR($t1);
15 &add($c1,$h1,$c1);
16 &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
17 &add($c2,$t2,$c2); &FR($t2);
18 }
19
20sub bn_mul_comba4
21 {
22 local($name)=@_;
23 local(@a,@b,$r,$c0,$c1,$c2);
24
25 $cnt=1;
26 &init_pool(3);
27
28 $rp=&wparam(0);
29 $ap=&wparam(1);
30 $bp=&wparam(2);
31
32 &function_begin($name,"");
33
34 &comment("");
35
36 &ld(($a[0])=&NR(1),&QWPw(0,$ap));
37 &ld(($b[0])=&NR(1),&QWPw(0,$bp));
38 &ld(($a[1])=&NR(1),&QWPw(1,$ap));
39 &ld(($b[1])=&NR(1),&QWPw(1,$bp));
40 &ld(($a[2])=&NR(1),&QWPw(2,$ap));
41 &ld(($b[2])=&NR(1),&QWPw(2,$bp));
42 &ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap);
43 &ld(($b[3])=&NR(1),&QWPw(3,$bp)); &FR($bp);
44
45 ($c0,$c1,$c2)=&NR(3);
46 &mov("zero",$c2);
47 &mul($a[0],$b[0],$c0);
48 &muh($a[0],$b[0],$c1);
49 &st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR($c0);
50 ($c0,$c1,$c2)=($c1,$c2,$c0);
51 &mov("zero",$c2);
52
53 &mul_add_c($a[0],$b[1],$c0,$c1,$c2);
54 &mul_add_c($a[1],$b[0],$c0,$c1,$c2);
55 &st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR($c0);
56 ($c0,$c1,$c2)=($c1,$c2,$c0);
57 &mov("zero",$c2);
58
59 &mul_add_c($a[1],$b[1],$c0,$c1,$c2);
60 &mul_add_c($a[0],$b[2],$c0,$c1,$c2);
61 &mul_add_c($a[2],$b[0],$c0,$c1,$c2);
62 &st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR($c0);
63 ($c0,$c1,$c2)=($c1,$c2,$c0);
64 &mov("zero",$c2);
65
66 &mul_add_c($a[0],$b[3],$c0,$c1,$c2); &FR($a[0]);
67 &mul_add_c($a[1],$b[2],$c0,$c1,$c2);
68 &mul_add_c($a[2],$b[1],$c0,$c1,$c2);
69 &mul_add_c($a[3],$b[0],$c0,$c1,$c2); &FR($b[0]);
70 &st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR($c0);
71 ($c0,$c1,$c2)=($c1,$c2,$c0);
72 &mov("zero",$c2);
73
74 &mul_add_c($a[1],$b[3],$c0,$c1,$c2); &FR($a[1]);
75 &mul_add_c($a[2],$b[2],$c0,$c1,$c2);
76 &mul_add_c($a[3],$b[1],$c0,$c1,$c2); &FR($b[1]);
77 &st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR($c0);
78 ($c0,$c1,$c2)=($c1,$c2,$c0);
79 &mov("zero",$c2);
80
81 &mul_add_c($a[2],$b[3],$c0,$c1,$c2); &FR($a[2]);
82 &mul_add_c($a[3],$b[2],$c0,$c1,$c2); &FR($b[2]);
83 &st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR($c0);
84 ($c0,$c1,$c2)=($c1,$c2,$c0);
85 &mov("zero",$c2);
86
87 &mul_add_c($a[3],$b[3],$c0,$c1,$c2); &FR($a[3],$b[3]);
88 &st($c0,&QWPw(6,$rp));
89 &st($c1,&QWPw(7,$rp));
90
91 &FR($c0,$c1,$c2);
92
93 &function_end($name);
94
95 &fin_pool;
96 }
97
981;
diff --git a/src/lib/libcrypto/bn/asm/alpha/mul_c8.pl b/src/lib/libcrypto/bn/asm/alpha/mul_c8.pl
new file mode 100644
index 0000000000..525ca7494b
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha/mul_c8.pl
@@ -0,0 +1,177 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_mul_comba8
5 {
6 local($name)=@_;
7 local(@a,@b,$r,$c0,$c1,$c2);
8
9 $cnt=1;
10 &init_pool(3);
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $bp=&wparam(2);
15
16 &function_begin($name,"");
17
18 &comment("");
19
20 &stack_push(2);
21 &ld(($a[0])=&NR(1),&QWPw(0,$ap));
22 &ld(($b[0])=&NR(1),&QWPw(0,$bp));
23 &st($reg_s0,&swtmp(0)); &FR($reg_s0);
24 &st($reg_s1,&swtmp(1)); &FR($reg_s1);
25 &ld(($a[1])=&NR(1),&QWPw(1,$ap));
26 &ld(($b[1])=&NR(1),&QWPw(1,$bp));
27 &ld(($a[2])=&NR(1),&QWPw(2,$ap));
28 &ld(($b[2])=&NR(1),&QWPw(2,$bp));
29 &ld(($a[3])=&NR(1),&QWPw(3,$ap));
30 &ld(($b[3])=&NR(1),&QWPw(3,$bp));
31 &ld(($a[4])=&NR(1),&QWPw(1,$ap));
32 &ld(($b[4])=&NR(1),&QWPw(1,$bp));
33 &ld(($a[5])=&NR(1),&QWPw(1,$ap));
34 &ld(($b[5])=&NR(1),&QWPw(1,$bp));
35 &ld(($a[6])=&NR(1),&QWPw(1,$ap));
36 &ld(($b[6])=&NR(1),&QWPw(1,$bp));
37 &ld(($a[7])=&NR(1),&QWPw(1,$ap)); &FR($ap);
38 &ld(($b[7])=&NR(1),&QWPw(1,$bp)); &FR($bp);
39
40 ($c0,$c1,$c2)=&NR(3);
41 &mov("zero",$c2);
42 &mul($a[0],$b[0],$c0);
43 &muh($a[0],$b[0],$c1);
44 &st($c0,&QWPw(0,$rp)); &FR($c0); ($c0)=&NR(1);
45 ($c0,$c1,$c2)=($c1,$c2,$c0);
46 &mov("zero",$c2);
47
48 &mul_add_c($a[0],$b[1],$c0,$c1,$c2);
49 &mul_add_c($a[1],$b[0],$c0,$c1,$c2);
50 &st($c0,&QWPw(1,$rp)); &FR($c0); ($c0)=&NR(1);
51 ($c0,$c1,$c2)=($c1,$c2,$c0);
52 &mov("zero",$c2);
53
54 &mul_add_c($a[0],$b[2],$c0,$c1,$c2);
55 &mul_add_c($a[1],$b[1],$c0,$c1,$c2);
56 &mul_add_c($a[2],$b[0],$c0,$c1,$c2);
57 &st($c0,&QWPw(2,$rp)); &FR($c0); ($c0)=&NR(1);
58 ($c0,$c1,$c2)=($c1,$c2,$c0);
59 &mov("zero",$c2);
60
61 &mul_add_c($a[0],$b[3],$c0,$c1,$c2);
62 &mul_add_c($a[1],$b[2],$c0,$c1,$c2);
63 &mul_add_c($a[2],$b[1],$c0,$c1,$c2);
64 &mul_add_c($a[3],$b[0],$c0,$c1,$c2);
65 &st($c0,&QWPw(3,$rp)); &FR($c0); ($c0)=&NR(1);
66 ($c0,$c1,$c2)=($c1,$c2,$c0);
67 &mov("zero",$c2);
68
69 &mul_add_c($a[0],$b[4],$c0,$c1,$c2);
70 &mul_add_c($a[1],$b[3],$c0,$c1,$c2);
71 &mul_add_c($a[2],$b[2],$c0,$c1,$c2);
72 &mul_add_c($a[3],$b[1],$c0,$c1,$c2);
73 &mul_add_c($a[4],$b[0],$c0,$c1,$c2);
74 &st($c0,&QWPw(4,$rp)); &FR($c0); ($c0)=&NR(1);
75 ($c0,$c1,$c2)=($c1,$c2,$c0);
76 &mov("zero",$c2);
77
78 &mul_add_c($a[0],$b[5],$c0,$c1,$c2);
79 &mul_add_c($a[1],$b[4],$c0,$c1,$c2);
80 &mul_add_c($a[2],$b[3],$c0,$c1,$c2);
81 &mul_add_c($a[3],$b[2],$c0,$c1,$c2);
82 &mul_add_c($a[4],$b[1],$c0,$c1,$c2);
83 &mul_add_c($a[5],$b[0],$c0,$c1,$c2);
84 &st($c0,&QWPw(5,$rp)); &FR($c0); ($c0)=&NR(1);
85 ($c0,$c1,$c2)=($c1,$c2,$c0);
86 &mov("zero",$c2);
87
88 &mul_add_c($a[0],$b[6],$c0,$c1,$c2);
89 &mul_add_c($a[1],$b[5],$c0,$c1,$c2);
90 &mul_add_c($a[2],$b[4],$c0,$c1,$c2);
91 &mul_add_c($a[3],$b[3],$c0,$c1,$c2);
92 &mul_add_c($a[4],$b[2],$c0,$c1,$c2);
93 &mul_add_c($a[5],$b[1],$c0,$c1,$c2);
94 &mul_add_c($a[6],$b[0],$c0,$c1,$c2);
95 &st($c0,&QWPw(6,$rp)); &FR($c0); ($c0)=&NR(1);
96 ($c0,$c1,$c2)=($c1,$c2,$c0);
97 &mov("zero",$c2);
98
99 &mul_add_c($a[0],$b[7],$c0,$c1,$c2); &FR($a[0]);
100 &mul_add_c($a[1],$b[6],$c0,$c1,$c2);
101 &mul_add_c($a[2],$b[5],$c0,$c1,$c2);
102 &mul_add_c($a[3],$b[4],$c0,$c1,$c2);
103 &mul_add_c($a[4],$b[3],$c0,$c1,$c2);
104 &mul_add_c($a[5],$b[2],$c0,$c1,$c2);
105 &mul_add_c($a[6],$b[1],$c0,$c1,$c2);
106 &mul_add_c($a[7],$b[0],$c0,$c1,$c2); &FR($b[0]);
107 &st($c0,&QWPw(7,$rp)); &FR($c0); ($c0)=&NR(1);
108 ($c0,$c1,$c2)=($c1,$c2,$c0);
109 &mov("zero",$c2);
110
111 &mul_add_c($a[1],$b[7],$c0,$c1,$c2); &FR($a[1]);
112 &mul_add_c($a[2],$b[6],$c0,$c1,$c2);
113 &mul_add_c($a[3],$b[5],$c0,$c1,$c2);
114 &mul_add_c($a[4],$b[4],$c0,$c1,$c2);
115 &mul_add_c($a[5],$b[3],$c0,$c1,$c2);
116 &mul_add_c($a[6],$b[2],$c0,$c1,$c2);
117 &mul_add_c($a[7],$b[1],$c0,$c1,$c2); &FR($b[1]);
118 &st($c0,&QWPw(8,$rp)); &FR($c0); ($c0)=&NR(1);
119 ($c0,$c1,$c2)=($c1,$c2,$c0);
120 &mov("zero",$c2);
121
122 &mul_add_c($a[2],$b[7],$c0,$c1,$c2); &FR($a[2]);
123 &mul_add_c($a[3],$b[6],$c0,$c1,$c2);
124 &mul_add_c($a[4],$b[5],$c0,$c1,$c2);
125 &mul_add_c($a[5],$b[4],$c0,$c1,$c2);
126 &mul_add_c($a[6],$b[3],$c0,$c1,$c2);
127 &mul_add_c($a[7],$b[2],$c0,$c1,$c2); &FR($b[2]);
128 &st($c0,&QWPw(9,$rp)); &FR($c0); ($c0)=&NR(1);
129 ($c0,$c1,$c2)=($c1,$c2,$c0);
130 &mov("zero",$c2);
131
132 &mul_add_c($a[3],$b[7],$c0,$c1,$c2); &FR($a[3]);
133 &mul_add_c($a[4],$b[6],$c0,$c1,$c2);
134 &mul_add_c($a[5],$b[5],$c0,$c1,$c2);
135 &mul_add_c($a[6],$b[4],$c0,$c1,$c2);
136 &mul_add_c($a[7],$b[3],$c0,$c1,$c2); &FR($b[3]);
137 &st($c0,&QWPw(10,$rp)); &FR($c0); ($c0)=&NR(1);
138 ($c0,$c1,$c2)=($c1,$c2,$c0);
139 &mov("zero",$c2);
140
141 &mul_add_c($a[4],$b[7],$c0,$c1,$c2); &FR($a[4]);
142 &mul_add_c($a[5],$b[6],$c0,$c1,$c2);
143 &mul_add_c($a[6],$b[5],$c0,$c1,$c2);
144 &mul_add_c($a[7],$b[4],$c0,$c1,$c2); &FR($b[4]);
145 &st($c0,&QWPw(11,$rp)); &FR($c0); ($c0)=&NR(1);
146 ($c0,$c1,$c2)=($c1,$c2,$c0);
147 &mov("zero",$c2);
148
149 &mul_add_c($a[5],$b[7],$c0,$c1,$c2); &FR($a[5]);
150 &mul_add_c($a[6],$b[6],$c0,$c1,$c2);
151 &mul_add_c($a[7],$b[5],$c0,$c1,$c2); &FR($b[5]);
152 &st($c0,&QWPw(12,$rp)); &FR($c0); ($c0)=&NR(1);
153 ($c0,$c1,$c2)=($c1,$c2,$c0);
154 &mov("zero",$c2);
155
156 &mul_add_c($a[6],$b[7],$c0,$c1,$c2); &FR($a[6]);
157 &mul_add_c($a[7],$b[6],$c0,$c1,$c2); &FR($b[6]);
158 &st($c0,&QWPw(13,$rp)); &FR($c0); ($c0)=&NR(1);
159 ($c0,$c1,$c2)=($c1,$c2,$c0);
160 &mov("zero",$c2);
161
162 &mul_add_c($a[7],$b[7],$c0,$c1,$c2); &FR($a[7],$b[7]);
163 &st($c0,&QWPw(14,$rp));
164 &st($c1,&QWPw(15,$rp));
165
166 &FR($c0,$c1,$c2);
167
168 &ld($reg_s0,&swtmp(0));
169 &ld($reg_s1,&swtmp(1));
170 &stack_pop(2);
171
172 &function_end($name);
173
174 &fin_pool;
175 }
176
1771;
diff --git a/src/lib/libcrypto/bn/asm/alpha/sqr.pl b/src/lib/libcrypto/bn/asm/alpha/sqr.pl
new file mode 100644
index 0000000000..a55b696906
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha/sqr.pl
@@ -0,0 +1,113 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_sqr_words
5 {
6 local($name)=@_;
7 local($cc,$a,$b,$r,$couny);
8
9 &init_pool(3);
10 ($cc)=GR("r0");
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $count=&wparam(2);
15
16 &function_begin($name,"");
17
18 &comment("");
19 &sub($count,4,$count);
20 &mov("zero",$cc);
21 &br(&label("finish"));
22 &blt($count,&label("finish"));
23
24 ($a0,$r0)=&NR(2);
25 &ld($a0,&QWPw(0,$ap));
26 &ld($r0,&QWPw(0,$rp));
27
28$a=<<'EOF';
29##########################################################
30 &set_label("loop");
31
32 ($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
33 ($b1)=&NR(1); &ld($b1,&QWPw(1,$bp));
34 ($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
35 ($b2)=&NR(1); &ld($b2,&QWPw(2,$bp));
36 ($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
37 ($b3)=&NR(1); &ld($b3,&QWPw(3,$bp));
38
39 ($o0,$t0)=&NR(2);
40 &add($a0,$b0,$o0);
41 &cmpult($o0,$b0,$t0);
42 &add($o0,$cc,$o0);
43 &cmpult($o0,$cc,$cc);
44 &add($cc,$t0,$cc); &FR($t0);
45
46 ($t1,$o1)=&NR(2);
47
48 &add($a1,$b1,$o1); &FR($a1);
49 &cmpult($o1,$b1,$t1); &FR($b1);
50 &add($o1,$cc,$o1);
51 &cmpult($o1,$cc,$cc);
52 &add($cc,$t1,$cc); &FR($t1);
53
54 ($t2,$o2)=&NR(2);
55
56 &add($a2,$b2,$o2); &FR($a2);
57 &cmpult($o2,$b2,$t2); &FR($b2);
58 &add($o2,$cc,$o2);
59 &cmpult($o2,$cc,$cc);
60 &add($cc,$t2,$cc); &FR($t2);
61
62 ($t3,$o3)=&NR(2);
63
64 &add($a3,$b3,$o3); &FR($a3);
65 &cmpult($o3,$b3,$t3); &FR($b3);
66 &add($o3,$cc,$o3);
67 &cmpult($o3,$cc,$cc);
68 &add($cc,$t3,$cc); &FR($t3);
69
70 &st($o0,&QWPw(0,$rp)); &FR($o0);
71 &st($o1,&QWPw(0,$rp)); &FR($o1);
72 &st($o2,&QWPw(0,$rp)); &FR($o2);
73 &st($o3,&QWPw(0,$rp)); &FR($o3);
74
75 &sub($count,4,$count); # count-=4
76 &add($ap,4*$QWS,$ap); # count+=4
77 &add($bp,4*$QWS,$bp); # count+=4
78 &add($rp,4*$QWS,$rp); # count+=4
79
80 &blt($count,&label("finish"));
81 &ld($a0,&QWPw(0,$ap));
82 &ld($b0,&QWPw(0,$bp));
83 &br(&label("loop"));
84EOF
85##################################################
86 # Do the last 0..3 words
87
88 &set_label("last_loop");
89
90 &ld(($a0)=&NR(1),&QWPw(0,$ap)); # get a
91 &mul($a0,$a0,($l0)=&NR(1));
92 &add($ap,$QWS,$ap);
93 &add($rp,2*$QWS,$rp);
94 &sub($count,1,$count);
95 &muh($a0,$a0,($h0)=&NR(1)); &FR($a0);
96 &st($l0,&QWPw(-2,$rp)); &FR($l0);
97 &st($h0,&QWPw(-1,$rp)); &FR($h0);
98
99 &bgt($count,&label("last_loop"));
100 &function_end_A($name);
101
102######################################################
103 &set_label("finish");
104 &add($count,4,$count);
105 &bgt($count,&label("last_loop"));
106
107 &set_label("end");
108 &function_end($name);
109
110 &fin_pool;
111 }
112
1131;
diff --git a/src/lib/libcrypto/bn/asm/alpha/sqr_c4.pl b/src/lib/libcrypto/bn/asm/alpha/sqr_c4.pl
new file mode 100644
index 0000000000..bf33f5b503
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha/sqr_c4.pl
@@ -0,0 +1,109 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub sqr_add_c
5 {
6 local($a,$c0,$c1,$c2)=@_;
7 local($l1,$h1,$t1,$t2);
8
9 &mul($a,$a,($l1)=&NR(1));
10 &muh($a,$a,($h1)=&NR(1));
11 &add($c0,$l1,$c0);
12 &add($c1,$h1,$c1);
13 &cmpult($c0,$l1,($t1)=&NR(1)); &FR($l1);
14 &cmpult($c1,$h1,($t2)=&NR(1)); &FR($h1);
15 &add($c1,$t1,$c1); &FR($t1);
16 &add($c2,$t2,$c2); &FR($t2);
17 }
18
19sub sqr_add_c2
20 {
21 local($a,$b,$c0,$c1,$c2)=@_;
22 local($l1,$h1,$t1,$t2);
23
24 &mul($a,$b,($l1)=&NR(1));
25 &muh($a,$b,($h1)=&NR(1));
26 &cmplt($l1,"zero",($lc1)=&NR(1));
27 &cmplt($h1,"zero",($hc1)=&NR(1));
28 &add($l1,$l1,$l1);
29 &add($h1,$h1,$h1);
30 &add($h1,$lc1,$h1); &FR($lc1);
31 &add($c2,$hc1,$c2); &FR($hc1);
32
33 &add($c0,$l1,$c0);
34 &add($c1,$h1,$c1);
35 &cmpult($c0,$l1,($lc1)=&NR(1)); &FR($l1);
36 &cmpult($c1,$h1,($hc1)=&NR(1)); &FR($h1);
37
38 &add($c1,$lc1,$c1); &FR($lc1);
39 &add($c2,$hc1,$c2); &FR($hc1);
40 }
41
42
43sub bn_sqr_comba4
44 {
45 local($name)=@_;
46 local(@a,@b,$r,$c0,$c1,$c2);
47
48 $cnt=1;
49 &init_pool(2);
50
51 $rp=&wparam(0);
52 $ap=&wparam(1);
53
54 &function_begin($name,"");
55
56 &comment("");
57
58 &ld(($a[0])=&NR(1),&QWPw(0,$ap));
59 &ld(($a[1])=&NR(1),&QWPw(1,$ap));
60 &ld(($a[2])=&NR(1),&QWPw(2,$ap));
61 &ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap);
62
63 ($c0,$c1,$c2)=&NR(3);
64
65 &mov("zero",$c2);
66 &mul($a[0],$a[0],$c0);
67 &muh($a[0],$a[0],$c1);
68 &st($c0,&QWPw(0,$rp));
69 ($c0,$c1,$c2)=($c1,$c2,$c0);
70 &mov("zero",$c2);
71
72 &sqr_add_c2($a[0],$a[1],$c0,$c1,$c2);
73 &st($c0,&QWPw(1,$rp));
74 ($c0,$c1,$c2)=($c1,$c2,$c0);
75 &mov("zero",$c2);
76
77 &sqr_add_c($a[1],$c0,$c1,$c2);
78 &sqr_add_c2($a[2],$a[0],$c0,$c1,$c2);
79 &st($c0,&QWPw(2,$rp));
80 ($c0,$c1,$c2)=($c1,$c2,$c0);
81 &mov("zero",$c2);
82
83 &sqr_add_c2($a[3],$a[0],$c0,$c1,$c2);
84 &sqr_add_c2($a[2],$a[1],$c0,$c1,$c2);
85 &st($c0,&QWPw(3,$rp));
86 ($c0,$c1,$c2)=($c1,$c2,$c0);
87 &mov("zero",$c2);
88
89 &sqr_add_c($a[2],$c0,$c1,$c2);
90 &sqr_add_c2($a[3],$a[1],$c0,$c1,$c2);
91 &st($c0,&QWPw(4,$rp));
92 ($c0,$c1,$c2)=($c1,$c2,$c0);
93 &mov("zero",$c2);
94
95 &sqr_add_c2($a[3],$a[2],$c0,$c1,$c2);
96 &st($c0,&QWPw(5,$rp));
97 ($c0,$c1,$c2)=($c1,$c2,$c0);
98 &mov("zero",$c2);
99
100 &sqr_add_c($a[3],$c0,$c1,$c2);
101 &st($c0,&QWPw(6,$rp));
102 &st($c1,&QWPw(7,$rp));
103
104 &function_end($name);
105
106 &fin_pool;
107 }
108
1091;
diff --git a/src/lib/libcrypto/bn/asm/alpha/sqr_c8.pl b/src/lib/libcrypto/bn/asm/alpha/sqr_c8.pl
new file mode 100644
index 0000000000..b4afe085f1
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha/sqr_c8.pl
@@ -0,0 +1,132 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_sqr_comba8
5 {
6 local($name)=@_;
7 local(@a,@b,$r,$c0,$c1,$c2);
8
9 $cnt=1;
10 &init_pool(2);
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14
15 &function_begin($name,"");
16
17 &comment("");
18
19 &ld(($a[0])=&NR(1),&QWPw(0,$ap));
20 &ld(($a[1])=&NR(1),&QWPw(1,$ap));
21 &ld(($a[2])=&NR(1),&QWPw(2,$ap));
22 &ld(($a[3])=&NR(1),&QWPw(3,$ap));
23 &ld(($a[4])=&NR(1),&QWPw(4,$ap));
24 &ld(($a[5])=&NR(1),&QWPw(5,$ap));
25 &ld(($a[6])=&NR(1),&QWPw(6,$ap));
26 &ld(($a[7])=&NR(1),&QWPw(7,$ap)); &FR($ap);
27
28 ($c0,$c1,$c2)=&NR(3);
29
30 &mov("zero",$c2);
31 &mul($a[0],$a[0],$c0);
32 &muh($a[0],$a[0],$c1);
33 &st($c0,&QWPw(0,$rp));
34 ($c0,$c1,$c2)=($c1,$c2,$c0);
35 &mov("zero",$c2);
36
37 &sqr_add_c2($a[1],$a[0],$c0,$c1,$c2);
38 &st($c0,&QWPw(1,$rp));
39 ($c0,$c1,$c2)=($c1,$c2,$c0);
40 &mov("zero",$c2);
41
42 &sqr_add_c($a[1],$c0,$c1,$c2);
43 &sqr_add_c2($a[2],$a[0],$c0,$c1,$c2);
44 &st($c0,&QWPw(2,$rp));
45 ($c0,$c1,$c2)=($c1,$c2,$c0);
46 &mov("zero",$c2);
47
48 &sqr_add_c2($a[2],$a[1],$c0,$c1,$c2);
49 &sqr_add_c2($a[3],$a[0],$c0,$c1,$c2);
50 &st($c0,&QWPw(3,$rp));
51 ($c0,$c1,$c2)=($c1,$c2,$c0);
52 &mov("zero",$c2);
53
54 &sqr_add_c($a[2],$c0,$c1,$c2);
55 &sqr_add_c2($a[3],$a[1],$c0,$c1,$c2);
56 &sqr_add_c2($a[4],$a[0],$c0,$c1,$c2);
57 &st($c0,&QWPw(4,$rp));
58 ($c0,$c1,$c2)=($c1,$c2,$c0);
59 &mov("zero",$c2);
60
61 &sqr_add_c2($a[3],$a[2],$c0,$c1,$c2);
62 &sqr_add_c2($a[4],$a[1],$c0,$c1,$c2);
63 &sqr_add_c2($a[5],$a[0],$c0,$c1,$c2);
64 &st($c0,&QWPw(5,$rp));
65 ($c0,$c1,$c2)=($c1,$c2,$c0);
66 &mov("zero",$c2);
67
68 &sqr_add_c($a[3],$c0,$c1,$c2);
69 &sqr_add_c2($a[4],$a[2],$c0,$c1,$c2);
70 &sqr_add_c2($a[5],$a[1],$c0,$c1,$c2);
71 &sqr_add_c2($a[6],$a[0],$c0,$c1,$c2);
72 &st($c0,&QWPw(6,$rp));
73 ($c0,$c1,$c2)=($c1,$c2,$c0);
74 &mov("zero",$c2);
75
76 &sqr_add_c2($a[4],$a[3],$c0,$c1,$c2);
77 &sqr_add_c2($a[5],$a[2],$c0,$c1,$c2);
78 &sqr_add_c2($a[6],$a[1],$c0,$c1,$c2);
79 &sqr_add_c2($a[7],$a[0],$c0,$c1,$c2);
80 &st($c0,&QWPw(7,$rp));
81 ($c0,$c1,$c2)=($c1,$c2,$c0);
82 &mov("zero",$c2);
83
84 &sqr_add_c($a[4],$c0,$c1,$c2);
85 &sqr_add_c2($a[5],$a[3],$c0,$c1,$c2);
86 &sqr_add_c2($a[6],$a[2],$c0,$c1,$c2);
87 &sqr_add_c2($a[7],$a[1],$c0,$c1,$c2);
88 &st($c0,&QWPw(8,$rp));
89 ($c0,$c1,$c2)=($c1,$c2,$c0);
90 &mov("zero",$c2);
91
92 &sqr_add_c2($a[5],$a[4],$c0,$c1,$c2);
93 &sqr_add_c2($a[6],$a[3],$c0,$c1,$c2);
94 &sqr_add_c2($a[7],$a[2],$c0,$c1,$c2);
95 &st($c0,&QWPw(9,$rp));
96 ($c0,$c1,$c2)=($c1,$c2,$c0);
97 &mov("zero",$c2);
98
99 &sqr_add_c($a[5],$c0,$c1,$c2);
100 &sqr_add_c2($a[6],$a[4],$c0,$c1,$c2);
101 &sqr_add_c2($a[7],$a[3],$c0,$c1,$c2);
102 &st($c0,&QWPw(10,$rp));
103 ($c0,$c1,$c2)=($c1,$c2,$c0);
104 &mov("zero",$c2);
105
106 &sqr_add_c2($a[6],$a[5],$c0,$c1,$c2);
107 &sqr_add_c2($a[7],$a[4],$c0,$c1,$c2);
108 &st($c0,&QWPw(11,$rp));
109 ($c0,$c1,$c2)=($c1,$c2,$c0);
110 &mov("zero",$c2);
111
112 &sqr_add_c($a[6],$c0,$c1,$c2);
113 &sqr_add_c2($a[7],$a[5],$c0,$c1,$c2);
114 &st($c0,&QWPw(12,$rp));
115 ($c0,$c1,$c2)=($c1,$c2,$c0);
116 &mov("zero",$c2);
117
118 &sqr_add_c2($a[7],$a[6],$c0,$c1,$c2);
119 &st($c0,&QWPw(13,$rp));
120 ($c0,$c1,$c2)=($c1,$c2,$c0);
121 &mov("zero",$c2);
122
123 &sqr_add_c($a[7],$c0,$c1,$c2);
124 &st($c0,&QWPw(14,$rp));
125 &st($c1,&QWPw(15,$rp));
126
127 &function_end($name);
128
129 &fin_pool;
130 }
131
1321;
diff --git a/src/lib/libcrypto/bn/asm/alpha/sub.pl b/src/lib/libcrypto/bn/asm/alpha/sub.pl
new file mode 100644
index 0000000000..d998da5c21
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/alpha/sub.pl
@@ -0,0 +1,108 @@
1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_sub_words
5 {
6 local($name)=@_;
7 local($cc,$a,$b,$r);
8
9 &init_pool(4);
10 ($cc)=GR("r0");
11
12 $rp=&wparam(0);
13 $ap=&wparam(1);
14 $bp=&wparam(2);
15 $count=&wparam(3);
16
17 &function_begin($name,"");
18
19 &comment("");
20 &sub($count,4,$count);
21 &mov("zero",$cc);
22 &blt($count,&label("finish"));
23
24 ($a0,$b0)=&NR(2);
25 &ld($a0,&QWPw(0,$ap));
26 &ld($b0,&QWPw(0,$bp));
27
28##########################################################
29 &set_label("loop");
30
31 ($a1,$tmp,$b1,$a2,$b2,$a3,$b3,$o0)=&NR(8);
32 &ld($a1,&QWPw(1,$ap));
33 &cmpult($a0,$b0,$tmp); # will we borrow?
34 &ld($b1,&QWPw(1,$bp));
35 &sub($a0,$b0,$a0); # do the subtract
36 &ld($a2,&QWPw(2,$ap));
37 &cmpult($a0,$cc,$b0); # will we borrow?
38 &ld($b2,&QWPw(2,$bp));
39 &sub($a0,$cc,$o0); # will we borrow?
40 &ld($a3,&QWPw(3,$ap));
41 &add($b0,$tmp,$cc); ($t1,$o1)=&NR(2); &FR($tmp);
42
43 &cmpult($a1,$b1,$t1); # will we borrow?
44 &sub($a1,$b1,$a1); # do the subtract
45 &ld($b3,&QWPw(3,$bp));
46 &cmpult($a1,$cc,$b1); # will we borrow?
47 &sub($a1,$cc,$o1); # will we borrow?
48 &add($b1,$t1,$cc); ($tmp,$o2)=&NR(2); &FR($t1,$a1,$b1);
49
50 &cmpult($a2,$b2,$tmp); # will we borrow?
51 &sub($a2,$b2,$a2); # do the subtract
52 &st($o0,&QWPw(0,$rp)); &FR($o0); # save
53 &cmpult($a2,$cc,$b2); # will we borrow?
54 &sub($a2,$cc,$o2); # will we borrow?
55 &add($b2,$tmp,$cc); ($t3,$o3)=&NR(2); &FR($tmp,$a2,$b2);
56
57 &cmpult($a3,$b3,$t3); # will we borrow?
58 &sub($a3,$b3,$a3); # do the subtract
59 &st($o1,&QWPw(1,$rp)); &FR($o1);
60 &cmpult($a3,$cc,$b3); # will we borrow?
61 &sub($a3,$cc,$o3); # will we borrow?
62 &add($b3,$t3,$cc); &FR($t3,$a3,$b3);
63
64 &st($o2,&QWPw(2,$rp)); &FR($o2);
65 &sub($count,4,$count); # count-=4
66 &st($o3,&QWPw(3,$rp)); &FR($o3);
67 &add($ap,4*$QWS,$ap); # count+=4
68 &add($bp,4*$QWS,$bp); # count+=4
69 &add($rp,4*$QWS,$rp); # count+=4
70
71 &blt($count,&label("finish"));
72 &ld($a0,&QWPw(0,$ap));
73 &ld($b0,&QWPw(0,$bp));
74 &br(&label("loop"));
75##################################################
76 # Do the last 0..3 words
77
78 &set_label("last_loop");
79
80 &ld($a0,&QWPw(0,$ap)); # get a
81 &ld($b0,&QWPw(0,$bp)); # get b
82 &cmpult($a0,$b0,$tmp); # will we borrow?
83 &sub($a0,$b0,$a0); # do the subtract
84 &cmpult($a0,$cc,$b0); # will we borrow?
85 &sub($a0,$cc,$a0); # will we borrow?
86 &st($a0,&QWPw(0,$rp)); # save
87 &add($b0,$tmp,$cc); # add the borrows
88
89 &add($ap,$QWS,$ap);
90 &add($bp,$QWS,$bp);
91 &add($rp,$QWS,$rp);
92 &sub($count,1,$count);
93 &bgt($count,&label("last_loop"));
94 &function_end_A($name);
95
96######################################################
97 &set_label("finish");
98 &add($count,4,$count);
99 &bgt($count,&label("last_loop"));
100
101 &FR($a0,$b0);
102 &set_label("end");
103 &function_end($name);
104
105 &fin_pool;
106 }
107
1081;
diff --git a/src/lib/libcrypto/bn/asm/bn-alpha.pl b/src/lib/libcrypto/bn/asm/bn-alpha.pl
new file mode 100644
index 0000000000..302edf2376
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/bn-alpha.pl
@@ -0,0 +1,571 @@
1#!/usr/local/bin/perl
2# I have this in perl so I can use more usefull register names and then convert
3# them into alpha registers.
4#
5
6$d=&data();
7$d =~ s/CC/0/g;
8$d =~ s/R1/1/g;
9$d =~ s/R2/2/g;
10$d =~ s/R3/3/g;
11$d =~ s/R4/4/g;
12$d =~ s/L1/5/g;
13$d =~ s/L2/6/g;
14$d =~ s/L3/7/g;
15$d =~ s/L4/8/g;
16$d =~ s/O1/22/g;
17$d =~ s/O2/23/g;
18$d =~ s/O3/24/g;
19$d =~ s/O4/25/g;
20$d =~ s/A1/20/g;
21$d =~ s/A2/21/g;
22$d =~ s/A3/27/g;
23$d =~ s/A4/28/g;
24if (0){
25}
26
27print $d;
28
29sub data
30 {
31 local($data)=<<'EOF';
32
33 # DEC Alpha assember
34 # The bn_div_words is actually gcc output but the other parts are hand done.
35 # Thanks to tzeruch@ceddec.com for sending me the gcc output for
36 # bn_div_words.
37 # I've gone back and re-done most of routines.
38 # The key thing to remeber for the 164 CPU is that while a
39 # multiply operation takes 8 cycles, another one can only be issued
40 # after 4 cycles have elapsed. I've done modification to help
41 # improve this. Also, normally, a ld instruction will not be available
42 # for about 3 cycles.
43 .file 1 "bn_asm.c"
44 .set noat
45gcc2_compiled.:
46__gnu_compiled_c:
47 .text
48 .align 3
49 .globl bn_mul_add_words
50 .ent bn_mul_add_words
51bn_mul_add_words:
52bn_mul_add_words..ng:
53 .frame $30,0,$26,0
54 .prologue 0
55 .align 5
56 subq $18,4,$18
57 bis $31,$31,$CC
58 blt $18,$43 # if we are -1, -2, -3 or -4 goto tail code
59 ldq $A1,0($17) # 1 1
60 ldq $R1,0($16) # 1 1
61 .align 3
62$42:
63 mulq $A1,$19,$L1 # 1 2 1 ######
64 ldq $A2,8($17) # 2 1
65 ldq $R2,8($16) # 2 1
66 umulh $A1,$19,$A1 # 1 2 ######
67 ldq $A3,16($17) # 3 1
68 ldq $R3,16($16) # 3 1
69 mulq $A2,$19,$L2 # 2 2 1 ######
70 ldq $A4,24($17) # 4 1
71 addq $R1,$L1,$R1 # 1 2 2
72 ldq $R4,24($16) # 4 1
73 umulh $A2,$19,$A2 # 2 2 ######
74 cmpult $R1,$L1,$O1 # 1 2 3 1
75 addq $A1,$O1,$A1 # 1 3 1
76 addq $R1,$CC,$R1 # 1 2 3 1
77 mulq $A3,$19,$L3 # 3 2 1 ######
78 cmpult $R1,$CC,$CC # 1 2 3 2
79 addq $R2,$L2,$R2 # 2 2 2
80 addq $A1,$CC,$CC # 1 3 2
81 cmpult $R2,$L2,$O2 # 2 2 3 1
82 addq $A2,$O2,$A2 # 2 3 1
83 umulh $A3,$19,$A3 # 3 2 ######
84 addq $R2,$CC,$R2 # 2 2 3 1
85 cmpult $R2,$CC,$CC # 2 2 3 2
86 subq $18,4,$18
87 mulq $A4,$19,$L4 # 4 2 1 ######
88 addq $A2,$CC,$CC # 2 3 2
89 addq $R3,$L3,$R3 # 3 2 2
90 addq $16,32,$16
91 cmpult $R3,$L3,$O3 # 3 2 3 1
92 stq $R1,-32($16) # 1 2 4
93 umulh $A4,$19,$A4 # 4 2 ######
94 addq $A3,$O3,$A3 # 3 3 1
95 addq $R3,$CC,$R3 # 3 2 3 1
96 stq $R2,-24($16) # 2 2 4
97 cmpult $R3,$CC,$CC # 3 2 3 2
98 stq $R3,-16($16) # 3 2 4
99 addq $R4,$L4,$R4 # 4 2 2
100 addq $A3,$CC,$CC # 3 3 2
101 cmpult $R4,$L4,$O4 # 4 2 3 1
102 addq $17,32,$17
103 addq $A4,$O4,$A4 # 4 3 1
104 addq $R4,$CC,$R4 # 4 2 3 1
105 cmpult $R4,$CC,$CC # 4 2 3 2
106 stq $R4,-8($16) # 4 2 4
107 addq $A4,$CC,$CC # 4 3 2
108 blt $18,$43
109
110 ldq $A1,0($17) # 1 1
111 ldq $R1,0($16) # 1 1
112
113 br $42
114
115 .align 4
116$45:
117 ldq $A1,0($17) # 4 1
118 ldq $R1,0($16) # 4 1
119 mulq $A1,$19,$L1 # 4 2 1
120 subq $18,1,$18
121 addq $16,8,$16
122 addq $17,8,$17
123 umulh $A1,$19,$A1 # 4 2
124 addq $R1,$L1,$R1 # 4 2 2
125 cmpult $R1,$L1,$O1 # 4 2 3 1
126 addq $A1,$O1,$A1 # 4 3 1
127 addq $R1,$CC,$R1 # 4 2 3 1
128 cmpult $R1,$CC,$CC # 4 2 3 2
129 addq $A1,$CC,$CC # 4 3 2
130 stq $R1,-8($16) # 4 2 4
131 bgt $18,$45
132 ret $31,($26),1 # else exit
133
134 .align 4
135$43:
136 addq $18,4,$18
137 bgt $18,$45 # goto tail code
138 ret $31,($26),1 # else exit
139
140 .end bn_mul_add_words
141 .align 3
142 .globl bn_mul_words
143 .ent bn_mul_words
144bn_mul_words:
145bn_mul_words..ng:
146 .frame $30,0,$26,0
147 .prologue 0
148 .align 5
149 subq $18,4,$18
150 bis $31,$31,$CC
151 blt $18,$143 # if we are -1, -2, -3 or -4 goto tail code
152 ldq $A1,0($17) # 1 1
153 .align 3
154$142:
155
156 mulq $A1,$19,$L1 # 1 2 1 #####
157 ldq $A2,8($17) # 2 1
158 ldq $A3,16($17) # 3 1
159 umulh $A1,$19,$A1 # 1 2 #####
160 ldq $A4,24($17) # 4 1
161 mulq $A2,$19,$L2 # 2 2 1 #####
162 addq $L1,$CC,$L1 # 1 2 3 1
163 subq $18,4,$18
164 cmpult $L1,$CC,$CC # 1 2 3 2
165 umulh $A2,$19,$A2 # 2 2 #####
166 addq $A1,$CC,$CC # 1 3 2
167 addq $17,32,$17
168 addq $L2,$CC,$L2 # 2 2 3 1
169 mulq $A3,$19,$L3 # 3 2 1 #####
170 cmpult $L2,$CC,$CC # 2 2 3 2
171 addq $A2,$CC,$CC # 2 3 2
172 addq $16,32,$16
173 umulh $A3,$19,$A3 # 3 2 #####
174 stq $L1,-32($16) # 1 2 4
175 mulq $A4,$19,$L4 # 4 2 1 #####
176 addq $L3,$CC,$L3 # 3 2 3 1
177 stq $L2,-24($16) # 2 2 4
178 cmpult $L3,$CC,$CC # 3 2 3 2
179 umulh $A4,$19,$A4 # 4 2 #####
180 addq $A3,$CC,$CC # 3 3 2
181 stq $L3,-16($16) # 3 2 4
182 addq $L4,$CC,$L4 # 4 2 3 1
183 cmpult $L4,$CC,$CC # 4 2 3 2
184
185 addq $A4,$CC,$CC # 4 3 2
186
187 stq $L4,-8($16) # 4 2 4
188
189 blt $18,$143
190
191 ldq $A1,0($17) # 1 1
192
193 br $142
194
195 .align 4
196$145:
197 ldq $A1,0($17) # 4 1
198 mulq $A1,$19,$L1 # 4 2 1
199 subq $18,1,$18
200 umulh $A1,$19,$A1 # 4 2
201 addq $L1,$CC,$L1 # 4 2 3 1
202 addq $16,8,$16
203 cmpult $L1,$CC,$CC # 4 2 3 2
204 addq $17,8,$17
205 addq $A1,$CC,$CC # 4 3 2
206 stq $L1,-8($16) # 4 2 4
207
208 bgt $18,$145
209 ret $31,($26),1 # else exit
210
211 .align 4
212$143:
213 addq $18,4,$18
214 bgt $18,$145 # goto tail code
215 ret $31,($26),1 # else exit
216
217 .end bn_mul_words
218 .align 3
219 .globl bn_sqr_words
220 .ent bn_sqr_words
221bn_sqr_words:
222bn_sqr_words..ng:
223 .frame $30,0,$26,0
224 .prologue 0
225
226 subq $18,4,$18
227 blt $18,$543 # if we are -1, -2, -3 or -4 goto tail code
228 ldq $A1,0($17) # 1 1
229 .align 3
230$542:
231 mulq $A1,$A1,$L1 ######
232 ldq $A2,8($17) # 1 1
233 subq $18,4
234 umulh $A1,$A1,$R1 ######
235 ldq $A3,16($17) # 1 1
236 mulq $A2,$A2,$L2 ######
237 ldq $A4,24($17) # 1 1
238 stq $L1,0($16) # r[0]
239 umulh $A2,$A2,$R2 ######
240 stq $R1,8($16) # r[1]
241 mulq $A3,$A3,$L3 ######
242 stq $L2,16($16) # r[0]
243 umulh $A3,$A3,$R3 ######
244 stq $R2,24($16) # r[1]
245 mulq $A4,$A4,$L4 ######
246 stq $L3,32($16) # r[0]
247 umulh $A4,$A4,$R4 ######
248 stq $R3,40($16) # r[1]
249
250 addq $16,64,$16
251 addq $17,32,$17
252 stq $L4,-16($16) # r[0]
253 stq $R4,-8($16) # r[1]
254
255 blt $18,$543
256 ldq $A1,0($17) # 1 1
257 br $542
258
259$442:
260 ldq $A1,0($17) # a[0]
261 mulq $A1,$A1,$L1 # a[0]*w low part r2
262 addq $16,16,$16
263 addq $17,8,$17
264 subq $18,1,$18
265 umulh $A1,$A1,$R1 # a[0]*w high part r3
266 stq $L1,-16($16) # r[0]
267 stq $R1,-8($16) # r[1]
268
269 bgt $18,$442
270 ret $31,($26),1 # else exit
271
272 .align 4
273$543:
274 addq $18,4,$18
275 bgt $18,$442 # goto tail code
276 ret $31,($26),1 # else exit
277 .end bn_sqr_words
278
279 .align 3
280 .globl bn_add_words
281 .ent bn_add_words
282bn_add_words:
283bn_add_words..ng:
284 .frame $30,0,$26,0
285 .prologue 0
286
287 subq $19,4,$19
288 bis $31,$31,$CC # carry = 0
289 blt $19,$900
290 ldq $L1,0($17) # a[0]
291 ldq $R1,0($18) # b[1]
292 .align 3
293$901:
294 addq $R1,$L1,$R1 # r=a+b;
295 ldq $L2,8($17) # a[1]
296 cmpult $R1,$L1,$O1 # did we overflow?
297 ldq $R2,8($18) # b[1]
298 addq $R1,$CC,$R1 # c+= overflow
299 ldq $L3,16($17) # a[2]
300 cmpult $R1,$CC,$CC # overflow?
301 ldq $R3,16($18) # b[2]
302 addq $CC,$O1,$CC
303 ldq $L4,24($17) # a[3]
304 addq $R2,$L2,$R2 # r=a+b;
305 ldq $R4,24($18) # b[3]
306 cmpult $R2,$L2,$O2 # did we overflow?
307 addq $R3,$L3,$R3 # r=a+b;
308 addq $R2,$CC,$R2 # c+= overflow
309 cmpult $R3,$L3,$O3 # did we overflow?
310 cmpult $R2,$CC,$CC # overflow?
311 addq $R4,$L4,$R4 # r=a+b;
312 addq $CC,$O2,$CC
313 cmpult $R4,$L4,$O4 # did we overflow?
314 addq $R3,$CC,$R3 # c+= overflow
315 stq $R1,0($16) # r[0]=c
316 cmpult $R3,$CC,$CC # overflow?
317 stq $R2,8($16) # r[1]=c
318 addq $CC,$O3,$CC
319 stq $R3,16($16) # r[2]=c
320 addq $R4,$CC,$R4 # c+= overflow
321 subq $19,4,$19 # loop--
322 cmpult $R4,$CC,$CC # overflow?
323 addq $17,32,$17 # a++
324 addq $CC,$O4,$CC
325 stq $R4,24($16) # r[3]=c
326 addq $18,32,$18 # b++
327 addq $16,32,$16 # r++
328
329 blt $19,$900
330 ldq $L1,0($17) # a[0]
331 ldq $R1,0($18) # b[1]
332 br $901
333 .align 4
334$945:
335 ldq $L1,0($17) # a[0]
336 ldq $R1,0($18) # b[1]
337 addq $R1,$L1,$R1 # r=a+b;
338 subq $19,1,$19 # loop--
339 addq $R1,$CC,$R1 # c+= overflow
340 addq $17,8,$17 # a++
341 cmpult $R1,$L1,$O1 # did we overflow?
342 cmpult $R1,$CC,$CC # overflow?
343 addq $18,8,$18 # b++
344 stq $R1,0($16) # r[0]=c
345 addq $CC,$O1,$CC
346 addq $16,8,$16 # r++
347
348 bgt $19,$945
349 ret $31,($26),1 # else exit
350
351$900:
352 addq $19,4,$19
353 bgt $19,$945 # goto tail code
354 ret $31,($26),1 # else exit
355 .end bn_add_words
356
357 .align 3
358 .globl bn_sub_words
359 .ent bn_sub_words
360bn_sub_words:
361bn_sub_words..ng:
362 .frame $30,0,$26,0
363 .prologue 0
364
365 subq $19,4,$19
366 bis $31,$31,$CC # carry = 0
367 br $800
368 blt $19,$800
369 ldq $L1,0($17) # a[0]
370 ldq $R1,0($18) # b[1]
371 .align 3
372$801:
373 addq $R1,$L1,$R1 # r=a+b;
374 ldq $L2,8($17) # a[1]
375 cmpult $R1,$L1,$O1 # did we overflow?
376 ldq $R2,8($18) # b[1]
377 addq $R1,$CC,$R1 # c+= overflow
378 ldq $L3,16($17) # a[2]
379 cmpult $R1,$CC,$CC # overflow?
380 ldq $R3,16($18) # b[2]
381 addq $CC,$O1,$CC
382 ldq $L4,24($17) # a[3]
383 addq $R2,$L2,$R2 # r=a+b;
384 ldq $R4,24($18) # b[3]
385 cmpult $R2,$L2,$O2 # did we overflow?
386 addq $R3,$L3,$R3 # r=a+b;
387 addq $R2,$CC,$R2 # c+= overflow
388 cmpult $R3,$L3,$O3 # did we overflow?
389 cmpult $R2,$CC,$CC # overflow?
390 addq $R4,$L4,$R4 # r=a+b;
391 addq $CC,$O2,$CC
392 cmpult $R4,$L4,$O4 # did we overflow?
393 addq $R3,$CC,$R3 # c+= overflow
394 stq $R1,0($16) # r[0]=c
395 cmpult $R3,$CC,$CC # overflow?
396 stq $R2,8($16) # r[1]=c
397 addq $CC,$O3,$CC
398 stq $R3,16($16) # r[2]=c
399 addq $R4,$CC,$R4 # c+= overflow
400 subq $19,4,$19 # loop--
401 cmpult $R4,$CC,$CC # overflow?
402 addq $17,32,$17 # a++
403 addq $CC,$O4,$CC
404 stq $R4,24($16) # r[3]=c
405 addq $18,32,$18 # b++
406 addq $16,32,$16 # r++
407
408 blt $19,$800
409 ldq $L1,0($17) # a[0]
410 ldq $R1,0($18) # b[1]
411 br $801
412 .align 4
413$845:
414 ldq $L1,0($17) # a[0]
415 ldq $R1,0($18) # b[1]
416 cmpult $L1,$R1,$O1 # will we borrow?
417 subq $L1,$R1,$R1 # r=a-b;
418 subq $19,1,$19 # loop--
419 cmpult $R1,$CC,$O2 # will we borrow?
420 subq $R1,$CC,$R1 # c+= overflow
421 addq $17,8,$17 # a++
422 addq $18,8,$18 # b++
423 stq $R1,0($16) # r[0]=c
424 addq $O2,$O1,$CC
425 addq $16,8,$16 # r++
426
427 bgt $19,$845
428 ret $31,($26),1 # else exit
429
430$800:
431 addq $19,4,$19
432 bgt $19,$845 # goto tail code
433 ret $31,($26),1 # else exit
434 .end bn_sub_words
435
436 #
437 # What follows was taken directly from the C compiler with a few
438 # hacks to redo the lables.
439 #
440.text
441 .align 3
442 .globl bn_div_words
443 .ent bn_div_words
444bn_div_words:
445 ldgp $29,0($27)
446bn_div_words..ng:
447 lda $30,-48($30)
448 .frame $30,48,$26,0
449 stq $26,0($30)
450 stq $9,8($30)
451 stq $10,16($30)
452 stq $11,24($30)
453 stq $12,32($30)
454 stq $13,40($30)
455 .mask 0x4003e00,-48
456 .prologue 1
457 bis $16,$16,$9
458 bis $17,$17,$10
459 bis $18,$18,$11
460 bis $31,$31,$13
461 bis $31,2,$12
462 bne $11,$119
463 lda $0,-1
464 br $31,$136
465 .align 4
466$119:
467 bis $11,$11,$16
468 jsr $26,BN_num_bits_word
469 ldgp $29,0($26)
470 subq $0,64,$1
471 beq $1,$120
472 bis $31,1,$1
473 sll $1,$0,$1
474 cmpule $9,$1,$1
475 bne $1,$120
476 # lda $16,_IO_stderr_
477 # lda $17,$C32
478 # bis $0,$0,$18
479 # jsr $26,fprintf
480 # ldgp $29,0($26)
481 jsr $26,abort
482 ldgp $29,0($26)
483 .align 4
484$120:
485 bis $31,64,$3
486 cmpult $9,$11,$2
487 subq $3,$0,$1
488 addl $1,$31,$0
489 subq $9,$11,$1
490 cmoveq $2,$1,$9
491 beq $0,$122
492 zapnot $0,15,$2
493 subq $3,$0,$1
494 sll $11,$2,$11
495 sll $9,$2,$3
496 srl $10,$1,$1
497 sll $10,$2,$10
498 bis $3,$1,$9
499$122:
500 srl $11,32,$5
501 zapnot $11,15,$6
502 lda $7,-1
503 .align 5
504$123:
505 srl $9,32,$1
506 subq $1,$5,$1
507 bne $1,$126
508 zapnot $7,15,$27
509 br $31,$127
510 .align 4
511$126:
512 bis $9,$9,$24
513 bis $5,$5,$25
514 divqu $24,$25,$27
515$127:
516 srl $10,32,$4
517 .align 5
518$128:
519 mulq $27,$5,$1
520 subq $9,$1,$3
521 zapnot $3,240,$1
522 bne $1,$129
523 mulq $6,$27,$2
524 sll $3,32,$1
525 addq $1,$4,$1
526 cmpule $2,$1,$2
527 bne $2,$129
528 subq $27,1,$27
529 br $31,$128
530 .align 4
531$129:
532 mulq $27,$6,$1
533 mulq $27,$5,$4
534 srl $1,32,$3
535 sll $1,32,$1
536 addq $4,$3,$4
537 cmpult $10,$1,$2
538 subq $10,$1,$10
539 addq $2,$4,$2
540 cmpult $9,$2,$1
541 bis $2,$2,$4
542 beq $1,$134
543 addq $9,$11,$9
544 subq $27,1,$27
545$134:
546 subl $12,1,$12
547 subq $9,$4,$9
548 beq $12,$124
549 sll $27,32,$13
550 sll $9,32,$2
551 srl $10,32,$1
552 sll $10,32,$10
553 bis $2,$1,$9
554 br $31,$123
555 .align 4
556$124:
557 bis $13,$27,$0
558$136:
559 ldq $26,0($30)
560 ldq $9,8($30)
561 ldq $10,16($30)
562 ldq $11,24($30)
563 ldq $12,32($30)
564 ldq $13,40($30)
565 addq $30,48,$30
566 ret $31,($26),1
567 .end bn_div_words
568EOF
569 return($data);
570 }
571
diff --git a/src/lib/libcrypto/bn/asm/ca.pl b/src/lib/libcrypto/bn/asm/ca.pl
new file mode 100644
index 0000000000..c1ce67a6b4
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/ca.pl
@@ -0,0 +1,33 @@
1#!/usr/local/bin/perl
2# I have this in perl so I can use more usefull register names and then convert
3# them into alpha registers.
4#
5
6push(@INC,"perlasm","../../perlasm");
7require "alpha.pl";
8require "alpha/mul_add.pl";
9require "alpha/mul.pl";
10require "alpha/sqr.pl";
11require "alpha/add.pl";
12require "alpha/sub.pl";
13require "alpha/mul_c8.pl";
14require "alpha/mul_c4.pl";
15require "alpha/sqr_c4.pl";
16require "alpha/sqr_c8.pl";
17require "alpha/div.pl";
18
19&asm_init($ARGV[0],$0);
20
21&bn_mul_words("bn_mul_words");
22&bn_sqr_words("bn_sqr_words");
23&bn_mul_add_words("bn_mul_add_words");
24&bn_add_words("bn_add_words");
25&bn_sub_words("bn_sub_words");
26&bn_div_words("bn_div_words");
27&bn_mul_comba8("bn_mul_comba8");
28&bn_mul_comba4("bn_mul_comba4");
29&bn_sqr_comba4("bn_sqr_comba4");
30&bn_sqr_comba8("bn_sqr_comba8");
31
32&asm_finish();
33
diff --git a/src/lib/libcrypto/bn/asm/co-alpha.pl b/src/lib/libcrypto/bn/asm/co-alpha.pl
new file mode 100644
index 0000000000..67dad3e3d5
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/co-alpha.pl
@@ -0,0 +1,116 @@
1#!/usr/local/bin/perl
2# I have this in perl so I can use more usefull register names and then convert
3# them into alpha registers.
4#
5
6push(@INC,"perlasm","../../perlasm");
7require "alpha.pl";
8
9&asm_init($ARGV[0],$0);
10
11print &bn_sub_words("bn_sub_words");
12
13&asm_finish();
14
15sub bn_sub_words
16 {
17 local($name)=@_;
18 local($cc,$a,$b,$r);
19
20 $cc="r0";
21 $a0="r1"; $b0="r5"; $r0="r9"; $tmp="r13";
22 $a1="r2"; $b1="r6"; $r1="r10"; $t1="r14";
23 $a2="r3"; $b2="r7"; $r2="r11";
24 $a3="r4"; $b3="r8"; $r3="r12"; $t3="r15";
25
26 $rp=&wparam(0);
27 $ap=&wparam(1);
28 $bp=&wparam(2);
29 $count=&wparam(3);
30
31 &function_begin($name,"");
32
33 &comment("");
34 &sub($count,4,$count);
35 &mov("zero",$cc);
36 &blt($count,&label("finish"));
37
38 &ld($a0,&QWPw(0,$ap));
39 &ld($b0,&QWPw(0,$bp));
40
41##########################################################
42 &set_label("loop");
43
44 &ld($a1,&QWPw(1,$ap));
45 &cmpult($a0,$b0,$tmp); # will we borrow?
46 &ld($b1,&QWPw(1,$bp));
47 &sub($a0,$b0,$a0); # do the subtract
48 &ld($a2,&QWPw(2,$ap));
49 &cmpult($a0,$cc,$b0); # will we borrow?
50 &ld($b2,&QWPw(2,$bp));
51 &sub($a0,$cc,$a0); # will we borrow?
52 &ld($a3,&QWPw(3,$ap));
53 &add($b0,$tmp,$cc); # add the borrows
54
55 &cmpult($a1,$b1,$t1); # will we borrow?
56 &sub($a1,$b1,$a1); # do the subtract
57 &ld($b3,&QWPw(3,$bp));
58 &cmpult($a1,$cc,$b1); # will we borrow?
59 &sub($a1,$cc,$a1); # will we borrow?
60 &add($b1,$t1,$cc); # add the borrows
61
62 &cmpult($a2,$b2,$tmp); # will we borrow?
63 &sub($a2,$b2,$a2); # do the subtract
64 &st($a0,&QWPw(0,$rp)); # save
65 &cmpult($a2,$cc,$b2); # will we borrow?
66 &sub($a2,$cc,$a2); # will we borrow?
67 &add($b2,$tmp,$cc); # add the borrows
68
69 &cmpult($a3,$b3,$t3); # will we borrow?
70 &sub($a3,$b3,$a3); # do the subtract
71 &st($a1,&QWPw(1,$rp)); # save
72 &cmpult($a3,$cc,$b3); # will we borrow?
73 &sub($a3,$cc,$a3); # will we borrow?
74 &add($b3,$t3,$cc); # add the borrows
75
76 &st($a2,&QWPw(2,$rp)); # save
77 &sub($count,4,$count); # count-=4
78 &st($a3,&QWPw(3,$rp)); # save
79 &add($ap,4*$QWS,$ap); # count+=4
80 &add($bp,4*$QWS,$bp); # count+=4
81 &add($rp,4*$QWS,$rp); # count+=4
82
83 &blt($count,&label("finish"));
84 &ld($a0,&QWPw(0,$ap));
85 &ld($b0,&QWPw(0,$bp));
86 &br(&label("loop"));
87##################################################
88 # Do the last 0..3 words
89
90 &set_label("last_loop");
91
92 &ld($a0,&QWPw(0,$ap)); # get a
93 &ld($b0,&QWPw(0,$bp)); # get b
94 &cmpult($a0,$b0,$tmp); # will we borrow?
95 &sub($a0,$b0,$a0); # do the subtract
96 &cmpult($a0,$cc,$b0); # will we borrow?
97 &sub($a0,$cc,$a0); # will we borrow?
98 &st($a0,&QWPw(0,$rp)); # save
99 &add($b0,$tmp,$cc); # add the borrows
100
101 &add($ap,$QWS,$ap);
102 &add($bp,$QWS,$bp);
103 &add($rp,$QWS,$rp);
104 &sub($count,1,$count);
105 &bgt($count,&label("last_loop"));
106 &function_end_A($name);
107
108######################################################
109 &set_label("finish");
110 &add($count,4,$count);
111 &bgt($count,&label("last_loop"));
112
113 &set_label("end");
114 &function_end($name);
115 }
116
diff --git a/src/lib/libcrypto/bn/asm/mips1.s b/src/lib/libcrypto/bn/asm/mips1.s
new file mode 100644
index 0000000000..44fa1254c7
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/mips1.s
@@ -0,0 +1,539 @@
1/* This assember is for R2000/R3000 machines, or higher ones that do
2 * no want to do any 64 bit arithmatic.
3 * Make sure that the SSLeay bignum library is compiled with
4 * THIRTY_TWO_BIT set.
5 * This must either be compiled with the system CC, or, if you use GNU gas,
6 * cc -E mips1.s|gas -o mips1.o
7 */
8 .set reorder
9 .set noat
10
11#define R1 $1
12#define CC $2
13#define R2 $3
14#define R3 $8
15#define R4 $9
16#define L1 $10
17#define L2 $11
18#define L3 $12
19#define L4 $13
20#define H1 $14
21#define H2 $15
22#define H3 $24
23#define H4 $25
24
25#define P1 $4
26#define P2 $5
27#define P3 $6
28#define P4 $7
29
30 .align 2
31 .ent bn_mul_add_words
32 .globl bn_mul_add_words
33.text
34bn_mul_add_words:
35 .frame $sp,0,$31
36 .mask 0x00000000,0
37 .fmask 0x00000000,0
38
39 #blt P3,4,$lab34
40
41 subu R1,P3,4
42 move CC,$0
43 bltz R1,$lab34
44$lab2:
45 lw R1,0(P1)
46 lw L1,0(P2)
47 lw R2,4(P1)
48 lw L2,4(P2)
49 lw R3,8(P1)
50 lw L3,8(P2)
51 lw R4,12(P1)
52 lw L4,12(P2)
53 multu L1,P4
54 addu R1,R1,CC
55 mflo L1
56 sltu CC,R1,CC
57 addu R1,R1,L1
58 mfhi H1
59 sltu L1,R1,L1
60 sw R1,0(P1)
61 addu CC,CC,L1
62 multu L2,P4
63 addu CC,H1,CC
64 mflo L2
65 addu R2,R2,CC
66 sltu CC,R2,CC
67 mfhi H2
68 addu R2,R2,L2
69 addu P2,P2,16
70 sltu L2,R2,L2
71 sw R2,4(P1)
72 addu CC,CC,L2
73 multu L3,P4
74 addu CC,H2,CC
75 mflo L3
76 addu R3,R3,CC
77 sltu CC,R3,CC
78 mfhi H3
79 addu R3,R3,L3
80 addu P1,P1,16
81 sltu L3,R3,L3
82 sw R3,-8(P1)
83 addu CC,CC,L3
84 multu L4,P4
85 addu CC,H3,CC
86 mflo L4
87 addu R4,R4,CC
88 sltu CC,R4,CC
89 mfhi H4
90 addu R4,R4,L4
91 subu P3,P3,4
92 sltu L4,R4,L4
93 addu CC,CC,L4
94 addu CC,H4,CC
95
96 subu R1,P3,4
97 sw R4,-4(P1) # delay slot
98 bgez R1,$lab2
99
100 bleu P3,0,$lab3
101 .align 2
102$lab33:
103 lw L1,0(P2)
104 lw R1,0(P1)
105 multu L1,P4
106 addu R1,R1,CC
107 sltu CC,R1,CC
108 addu P1,P1,4
109 mflo L1
110 mfhi H1
111 addu R1,R1,L1
112 addu P2,P2,4
113 sltu L1,R1,L1
114 subu P3,P3,1
115 addu CC,CC,L1
116 sw R1,-4(P1)
117 addu CC,H1,CC
118 bgtz P3,$lab33
119 j $31
120 .align 2
121$lab3:
122 j $31
123 .align 2
124$lab34:
125 bgt P3,0,$lab33
126 j $31
127 .end bn_mul_add_words
128
129 .align 2
130 # Program Unit: bn_mul_words
131 .ent bn_mul_words
132 .globl bn_mul_words
133.text
134bn_mul_words:
135 .frame $sp,0,$31
136 .mask 0x00000000,0
137 .fmask 0x00000000,0
138
139 subu P3,P3,4
140 move CC,$0
141 bltz P3,$lab45
142$lab44:
143 lw L1,0(P2)
144 lw L2,4(P2)
145 lw L3,8(P2)
146 lw L4,12(P2)
147 multu L1,P4
148 subu P3,P3,4
149 mflo L1
150 mfhi H1
151 addu L1,L1,CC
152 multu L2,P4
153 sltu CC,L1,CC
154 sw L1,0(P1)
155 addu CC,H1,CC
156 mflo L2
157 mfhi H2
158 addu L2,L2,CC
159 multu L3,P4
160 sltu CC,L2,CC
161 sw L2,4(P1)
162 addu CC,H2,CC
163 mflo L3
164 mfhi H3
165 addu L3,L3,CC
166 multu L4,P4
167 sltu CC,L3,CC
168 sw L3,8(P1)
169 addu CC,H3,CC
170 mflo L4
171 mfhi H4
172 addu L4,L4,CC
173 addu P1,P1,16
174 sltu CC,L4,CC
175 addu P2,P2,16
176 addu CC,H4,CC
177 sw L4,-4(P1)
178
179 bgez P3,$lab44
180 b $lab45
181$lab46:
182 lw L1,0(P2)
183 addu P1,P1,4
184 multu L1,P4
185 addu P2,P2,4
186 mflo L1
187 mfhi H1
188 addu L1,L1,CC
189 subu P3,P3,1
190 sltu CC,L1,CC
191 sw L1,-4(P1)
192 addu CC,H1,CC
193 bgtz P3,$lab46
194 j $31
195$lab45:
196 addu P3,P3,4
197 bgtz P3,$lab46
198 j $31
199 .align 2
200 .end bn_mul_words
201
202 # Program Unit: bn_sqr_words
203 .ent bn_sqr_words
204 .globl bn_sqr_words
205.text
206bn_sqr_words:
207 .frame $sp,0,$31
208 .mask 0x00000000,0
209 .fmask 0x00000000,0
210
211 subu P3,P3,4
212 bltz P3,$lab55
213$lab54:
214 lw L1,0(P2)
215 lw L2,4(P2)
216 lw L3,8(P2)
217 lw L4,12(P2)
218
219 multu L1,L1
220 subu P3,P3,4
221 mflo L1
222 mfhi H1
223 sw L1,0(P1)
224 sw H1,4(P1)
225
226 multu L2,L2
227 addu P1,P1,32
228 mflo L2
229 mfhi H2
230 sw L2,-24(P1)
231 sw H2,-20(P1)
232
233 multu L3,L3
234 addu P2,P2,16
235 mflo L3
236 mfhi H3
237 sw L3,-16(P1)
238 sw H3,-12(P1)
239
240 multu L4,L4
241
242 mflo L4
243 mfhi H4
244 sw L4,-8(P1)
245 sw H4,-4(P1)
246
247 bgtz P3,$lab54
248 b $lab55
249$lab56:
250 lw L1,0(P2)
251 addu P1,P1,8
252 multu L1,L1
253 addu P2,P2,4
254 subu P3,P3,1
255 mflo L1
256 mfhi H1
257 sw L1,-8(P1)
258 sw H1,-4(P1)
259
260 bgtz P3,$lab56
261 j $31
262$lab55:
263 addu P3,P3,4
264 bgtz P3,$lab56
265 j $31
266 .align 2
267 .end bn_sqr_words
268
269 # Program Unit: bn_add_words
270 .ent bn_add_words
271 .globl bn_add_words
272.text
273bn_add_words: # 0x590
274 .frame $sp,0,$31
275 .mask 0x00000000,0
276 .fmask 0x00000000,0
277
278 subu P4,P4,4
279 move CC,$0
280 bltz P4,$lab65
281$lab64:
282 lw L1,0(P2)
283 lw R1,0(P3)
284 lw L2,4(P2)
285 lw R2,4(P3)
286
287 addu L1,L1,CC
288 lw L3,8(P2)
289 sltu CC,L1,CC
290 addu L1,L1,R1
291 sltu R1,L1,R1
292 lw R3,8(P3)
293 addu CC,CC,R1
294 lw L4,12(P2)
295
296 addu L2,L2,CC
297 lw R4,12(P3)
298 sltu CC,L2,CC
299 addu L2,L2,R2
300 sltu R2,L2,R2
301 sw L1,0(P1)
302 addu CC,CC,R2
303 addu P1,P1,16
304 addu L3,L3,CC
305 sw L2,-12(P1)
306
307 sltu CC,L3,CC
308 addu L3,L3,R3
309 sltu R3,L3,R3
310 addu P2,P2,16
311 addu CC,CC,R3
312
313 addu L4,L4,CC
314 addu P3,P3,16
315 sltu CC,L4,CC
316 addu L4,L4,R4
317 subu P4,P4,4
318 sltu R4,L4,R4
319 sw L3,-8(P1)
320 addu CC,CC,R4
321 sw L4,-4(P1)
322
323 bgtz P4,$lab64
324 b $lab65
325$lab66:
326 lw L1,0(P2)
327 lw R1,0(P3)
328 addu L1,L1,CC
329 addu P1,P1,4
330 sltu CC,L1,CC
331 addu P2,P2,4
332 addu P3,P3,4
333 addu L1,L1,R1
334 subu P4,P4,1
335 sltu R1,L1,R1
336 sw L1,-4(P1)
337 addu CC,CC,R1
338
339 bgtz P4,$lab66
340 j $31
341$lab65:
342 addu P4,P4,4
343 bgtz P4,$lab66
344 j $31
345 .end bn_add_words
346
347 # Program Unit: bn_div64
348 .set at
349 .set reorder
350 .text
351 .align 2
352 .globl bn_div64
353 # 321 {
354 .ent bn_div64 2
355bn_div64:
356 subu $sp, 64
357 sw $31, 56($sp)
358 sw $16, 48($sp)
359 .mask 0x80010000, -56
360 .frame $sp, 64, $31
361 move $9, $4
362 move $12, $5
363 move $16, $6
364 # 322 BN_ULONG dh,dl,q,ret=0,th,tl,t;
365 move $31, $0
366 # 323 int i,count=2;
367 li $13, 2
368 # 324
369 # 325 if (d == 0) return(BN_MASK2);
370 bne $16, 0, $80
371 li $2, -1
372 b $93
373$80:
374 # 326
375 # 327 i=BN_num_bits_word(d);
376 move $4, $16
377 sw $31, 16($sp)
378 sw $9, 24($sp)
379 sw $12, 32($sp)
380 sw $13, 40($sp)
381 .livereg 0x800ff0e,0xfff
382 jal BN_num_bits_word
383 li $4, 32
384 lw $31, 16($sp)
385 lw $9, 24($sp)
386 lw $12, 32($sp)
387 lw $13, 40($sp)
388 move $3, $2
389 # 328 if ((i != BN_BITS2) && (h > (BN_ULONG)1<<i))
390 beq $2, $4, $81
391 li $14, 1
392 sll $15, $14, $2
393 bleu $9, $15, $81
394 # 329 {
395 # 330 #if !defined(NO_STDIO) && !defined(WIN16)
396 # 331 fprintf(stderr,"Division would overflow (%d)\n",i);
397 # 332 #endif
398 # 333 abort();
399 sw $3, 8($sp)
400 sw $9, 24($sp)
401 sw $12, 32($sp)
402 sw $13, 40($sp)
403 sw $31, 26($sp)
404 .livereg 0xff0e,0xfff
405 jal abort
406 lw $3, 8($sp)
407 li $4, 32
408 lw $9, 24($sp)
409 lw $12, 32($sp)
410 lw $13, 40($sp)
411 lw $31, 26($sp)
412 # 334 }
413$81:
414 # 335 i=BN_BITS2-i;
415 subu $3, $4, $3
416 # 336 if (h >= d) h-=d;
417 bltu $9, $16, $82
418 subu $9, $9, $16
419$82:
420 # 337
421 # 338 if (i)
422 beq $3, 0, $83
423 # 339 {
424 # 340 d<<=i;
425 sll $16, $16, $3
426 # 341 h=(h<<i)|(l>>(BN_BITS2-i));
427 sll $24, $9, $3
428 subu $25, $4, $3
429 srl $14, $12, $25
430 or $9, $24, $14
431 # 342 l<<=i;
432 sll $12, $12, $3
433 # 343 }
434$83:
435 # 344 dh=(d&BN_MASK2h)>>BN_BITS4;
436 # 345 dl=(d&BN_MASK2l);
437 and $8, $16, -65536
438 srl $8, $8, 16
439 and $10, $16, 65535
440 li $6, -65536
441$84:
442 # 346 for (;;)
443 # 347 {
444 # 348 if ((h>>BN_BITS4) == dh)
445 srl $15, $9, 16
446 bne $8, $15, $85
447 # 349 q=BN_MASK2l;
448 li $5, 65535
449 b $86
450$85:
451 # 350 else
452 # 351 q=h/dh;
453 divu $5, $9, $8
454$86:
455 # 352
456 # 353 for (;;)
457 # 354 {
458 # 355 t=(h-q*dh);
459 mul $4, $5, $8
460 subu $2, $9, $4
461 move $3, $2
462 # 356 if ((t&BN_MASK2h) ||
463 # 357 ((dl*q) <= (
464 # 358 (t<<BN_BITS4)+
465 # 359 ((l&BN_MASK2h)>>BN_BITS4))))
466 and $25, $2, $6
467 bne $25, $0, $87
468 mul $24, $10, $5
469 sll $14, $3, 16
470 and $15, $12, $6
471 srl $25, $15, 16
472 addu $15, $14, $25
473 bgtu $24, $15, $88
474$87:
475 # 360 break;
476 mul $3, $10, $5
477 b $89
478$88:
479 # 361 q--;
480 addu $5, $5, -1
481 # 362 }
482 b $86
483$89:
484 # 363 th=q*dh;
485 # 364 tl=q*dl;
486 # 365 t=(tl>>BN_BITS4);
487 # 366 tl=(tl<<BN_BITS4)&BN_MASK2h;
488 sll $14, $3, 16
489 and $2, $14, $6
490 move $11, $2
491 # 367 th+=t;
492 srl $25, $3, 16
493 addu $7, $4, $25
494 # 368
495 # 369 if (l < tl) th++;
496 bgeu $12, $2, $90
497 addu $7, $7, 1
498$90:
499 # 370 l-=tl;
500 subu $12, $12, $11
501 # 371 if (h < th)
502 bgeu $9, $7, $91
503 # 372 {
504 # 373 h+=d;
505 addu $9, $9, $16
506 # 374 q--;
507 addu $5, $5, -1
508 # 375 }
509$91:
510 # 376 h-=th;
511 subu $9, $9, $7
512 # 377
513 # 378 if (--count == 0) break;
514 addu $13, $13, -1
515 beq $13, 0, $92
516 # 379
517 # 380 ret=q<<BN_BITS4;
518 sll $31, $5, 16
519 # 381 h=((h<<BN_BITS4)|(l>>BN_BITS4))&BN_MASK2;
520 sll $24, $9, 16
521 srl $15, $12, 16
522 or $9, $24, $15
523 # 382 l=(l&BN_MASK2l)<<BN_BITS4;
524 and $12, $12, 65535
525 sll $12, $12, 16
526 # 383 }
527 b $84
528$92:
529 # 384 ret|=q;
530 or $31, $31, $5
531 # 385 return(ret);
532 move $2, $31
533$93:
534 lw $16, 48($sp)
535 lw $31, 56($sp)
536 addu $sp, 64
537 j $31
538 .end bn_div64
539
diff --git a/src/lib/libcrypto/bn/asm/mips3.s b/src/lib/libcrypto/bn/asm/mips3.s
new file mode 100644
index 0000000000..191345d920
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/mips3.s
@@ -0,0 +1,2138 @@
1.rdata
2.asciiz "mips3.s, Version 1.0"
3.asciiz "MIPS III/IV ISA artwork by Andy Polyakov <appro@fy.chalmers.se>"
4
5/*
6 * ====================================================================
7 * Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
8 * project.
9 *
10 * Rights for redistribution and usage in source and binary forms are
11 * granted according to the OpenSSL license. Warranty of any kind is
12 * disclaimed.
13 * ====================================================================
14 */
15
16/*
17 * This is my modest contributon to the OpenSSL project (see
18 * http://www.openssl.org/ for more information about it) and is
19 * a drop-in MIPS III/IV ISA replacement for crypto/bn/bn_asm.c
20 * module. For updates see http://fy.chalmers.se/~appro/hpe/.
21 *
22 * The module is designed to work with either of the "new" MIPS ABI(5),
23 * namely N32 or N64, offered by IRIX 6.x. It's not ment to work under
24 * IRIX 5.x not only because it doesn't support new ABIs but also
25 * because 5.x kernels put R4x00 CPU into 32-bit mode and all those
26 * 64-bit instructions (daddu, dmultu, etc.) found below gonna only
27 * cause illegal instruction exception:-(
28 *
29 * In addition the code depends on preprocessor flags set up by MIPSpro
30 * compiler driver (either as or cc) and therefore (probably?) can't be
31 * compiled by the GNU assembler. GNU C driver manages fine though...
32 * I mean as long as -mmips-as is specified or is the default option,
33 * because then it simply invokes /usr/bin/as which in turn takes
34 * perfect care of the preprocessor definitions. Another neat feature
35 * offered by the MIPSpro assembler is an optimization pass. This gave
36 * me the opportunity to have the code looking more regular as all those
37 * architecture dependent instruction rescheduling details were left to
38 * the assembler. Cool, huh?
39 *
40 * Performance improvement is astonishing! 'apps/openssl speed rsa dsa'
41 * goes way over 3 times faster!
42 *
43 * <appro@fy.chalmers.se>
44 */
45#include <asm.h>
46#include <regdef.h>
47
48#if _MIPS_ISA>=4
49#define MOVNZ(cond,dst,src) \
50 movn dst,src,cond
51#else
52#define MOVNZ(cond,dst,src) \
53 .set noreorder; \
54 bnezl cond,.+8; \
55 move dst,src; \
56 .set reorder
57#endif
58
59.text
60
61.set noat
62.set reorder
63
64#define MINUS4 v1
65
66.align 5
67LEAF(bn_mul_add_words)
68 .set noreorder
69 bgtzl a2,.L_bn_mul_add_words_proceed
70 ld t0,0(a1)
71 jr ra
72 move v0,zero
73 .set reorder
74
75.L_bn_mul_add_words_proceed:
76 li MINUS4,-4
77 and ta0,a2,MINUS4
78 move v0,zero
79 beqz ta0,.L_bn_mul_add_words_tail
80
81.L_bn_mul_add_words_loop:
82 dmultu t0,a3
83 ld t1,0(a0)
84 ld t2,8(a1)
85 ld t3,8(a0)
86 ld ta0,16(a1)
87 ld ta1,16(a0)
88 daddu t1,v0
89 sltu v0,t1,v0 /* All manuals say it "compares 32-bit
90 * values", but it seems to work fine
91 * even on 64-bit registers. */
92 mflo AT
93 mfhi t0
94 daddu t1,AT
95 daddu v0,t0
96 sltu AT,t1,AT
97 sd t1,0(a0)
98 daddu v0,AT
99
100 dmultu t2,a3
101 ld ta2,24(a1)
102 ld ta3,24(a0)
103 daddu t3,v0
104 sltu v0,t3,v0
105 mflo AT
106 mfhi t2
107 daddu t3,AT
108 daddu v0,t2
109 sltu AT,t3,AT
110 sd t3,8(a0)
111 daddu v0,AT
112
113 dmultu ta0,a3
114 subu a2,4
115 PTR_ADD a0,32
116 PTR_ADD a1,32
117 daddu ta1,v0
118 sltu v0,ta1,v0
119 mflo AT
120 mfhi ta0
121 daddu ta1,AT
122 daddu v0,ta0
123 sltu AT,ta1,AT
124 sd ta1,-16(a0)
125 daddu v0,AT
126
127
128 dmultu ta2,a3
129 and ta0,a2,MINUS4
130 daddu ta3,v0
131 sltu v0,ta3,v0
132 mflo AT
133 mfhi ta2
134 daddu ta3,AT
135 daddu v0,ta2
136 sltu AT,ta3,AT
137 sd ta3,-8(a0)
138 daddu v0,AT
139 .set noreorder
140 bgtzl ta0,.L_bn_mul_add_words_loop
141 ld t0,0(a1)
142
143 bnezl a2,.L_bn_mul_add_words_tail
144 ld t0,0(a1)
145 .set reorder
146
147.L_bn_mul_add_words_return:
148 jr ra
149
150.L_bn_mul_add_words_tail:
151 dmultu t0,a3
152 ld t1,0(a0)
153 subu a2,1
154 daddu t1,v0
155 sltu v0,t1,v0
156 mflo AT
157 mfhi t0
158 daddu t1,AT
159 daddu v0,t0
160 sltu AT,t1,AT
161 sd t1,0(a0)
162 daddu v0,AT
163 beqz a2,.L_bn_mul_add_words_return
164
165 ld t0,8(a1)
166 dmultu t0,a3
167 ld t1,8(a0)
168 subu a2,1
169 daddu t1,v0
170 sltu v0,t1,v0
171 mflo AT
172 mfhi t0
173 daddu t1,AT
174 daddu v0,t0
175 sltu AT,t1,AT
176 sd t1,8(a0)
177 daddu v0,AT
178 beqz a2,.L_bn_mul_add_words_return
179
180 ld t0,16(a1)
181 dmultu t0,a3
182 ld t1,16(a0)
183 daddu t1,v0
184 sltu v0,t1,v0
185 mflo AT
186 mfhi t0
187 daddu t1,AT
188 daddu v0,t0
189 sltu AT,t1,AT
190 sd t1,16(a0)
191 daddu v0,AT
192 jr ra
193END(bn_mul_add_words)
194
195.align 5
196LEAF(bn_mul_words)
197 .set noreorder
198 bgtzl a2,.L_bn_mul_words_proceed
199 ld t0,0(a1)
200 jr ra
201 move v0,zero
202 .set reorder
203
204.L_bn_mul_words_proceed:
205 li MINUS4,-4
206 and ta0,a2,MINUS4
207 move v0,zero
208 beqz ta0,.L_bn_mul_words_tail
209
210.L_bn_mul_words_loop:
211 dmultu t0,a3
212 ld t2,8(a1)
213 ld ta0,16(a1)
214 ld ta2,24(a1)
215 mflo AT
216 mfhi t0
217 daddu v0,AT
218 sltu t1,v0,AT
219 sd v0,0(a0)
220 daddu v0,t1,t0
221
222 dmultu t2,a3
223 subu a2,4
224 PTR_ADD a0,32
225 PTR_ADD a1,32
226 mflo AT
227 mfhi t2
228 daddu v0,AT
229 sltu t3,v0,AT
230 sd v0,-24(a0)
231 daddu v0,t3,t2
232
233 dmultu ta0,a3
234 mflo AT
235 mfhi ta0
236 daddu v0,AT
237 sltu ta1,v0,AT
238 sd v0,-16(a0)
239 daddu v0,ta1,ta0
240
241
242 dmultu ta2,a3
243 and ta0,a2,MINUS4
244 mflo AT
245 mfhi ta2
246 daddu v0,AT
247 sltu ta3,v0,AT
248 sd v0,-8(a0)
249 daddu v0,ta3,ta2
250 .set noreorder
251 bgtzl ta0,.L_bn_mul_words_loop
252 ld t0,0(a1)
253
254 bnezl a2,.L_bn_mul_words_tail
255 ld t0,0(a1)
256 .set reorder
257
258.L_bn_mul_words_return:
259 jr ra
260
261.L_bn_mul_words_tail:
262 dmultu t0,a3
263 subu a2,1
264 mflo AT
265 mfhi t0
266 daddu v0,AT
267 sltu t1,v0,AT
268 sd v0,0(a0)
269 daddu v0,t1,t0
270 beqz a2,.L_bn_mul_words_return
271
272 ld t0,8(a1)
273 dmultu t0,a3
274 subu a2,1
275 mflo AT
276 mfhi t0
277 daddu v0,AT
278 sltu t1,v0,AT
279 sd v0,8(a0)
280 daddu v0,t1,t0
281 beqz a2,.L_bn_mul_words_return
282
283 ld t0,16(a1)
284 dmultu t0,a3
285 mflo AT
286 mfhi t0
287 daddu v0,AT
288 sltu t1,v0,AT
289 sd v0,16(a0)
290 daddu v0,t1,t0
291 jr ra
292END(bn_mul_words)
293
294.align 5
295LEAF(bn_sqr_words)
296 .set noreorder
297 bgtzl a2,.L_bn_sqr_words_proceed
298 ld t0,0(a1)
299 jr ra
300 move v0,zero
301 .set reorder
302
303.L_bn_sqr_words_proceed:
304 li MINUS4,-4
305 and ta0,a2,MINUS4
306 move v0,zero
307 beqz ta0,.L_bn_sqr_words_tail
308
309.L_bn_sqr_words_loop:
310 dmultu t0,t0
311 ld t2,8(a1)
312 ld ta0,16(a1)
313 ld ta2,24(a1)
314 mflo t1
315 mfhi t0
316 sd t1,0(a0)
317 sd t0,8(a0)
318
319 dmultu t2,t2
320 subu a2,4
321 PTR_ADD a0,64
322 PTR_ADD a1,32
323 mflo t3
324 mfhi t2
325 sd t3,-48(a0)
326 sd t2,-40(a0)
327
328 dmultu ta0,ta0
329 mflo ta1
330 mfhi ta0
331 sd ta1,-32(a0)
332 sd ta0,-24(a0)
333
334
335 dmultu ta2,ta2
336 and ta0,a2,MINUS4
337 mflo ta3
338 mfhi ta2
339 sd ta3,-16(a0)
340 sd ta2,-8(a0)
341
342 .set noreorder
343 bgtzl ta0,.L_bn_sqr_words_loop
344 ld t0,0(a1)
345
346 bnezl a2,.L_bn_sqr_words_tail
347 ld t0,0(a1)
348 .set reorder
349
350.L_bn_sqr_words_return:
351 move v0,zero
352 jr ra
353
354.L_bn_sqr_words_tail:
355 dmultu t0,t0
356 subu a2,1
357 mflo t1
358 mfhi t0
359 sd t1,0(a0)
360 sd t0,8(a0)
361 beqz a2,.L_bn_sqr_words_return
362
363 ld t0,8(a1)
364 dmultu t0,t0
365 subu a2,1
366 mflo t1
367 mfhi t0
368 sd t1,16(a0)
369 sd t0,24(a0)
370 beqz a2,.L_bn_sqr_words_return
371
372 ld t0,16(a1)
373 dmultu t0,t0
374 mflo t1
375 mfhi t0
376 sd t1,32(a0)
377 sd t0,40(a0)
378 jr ra
379END(bn_sqr_words)
380
381.align 5
382LEAF(bn_add_words)
383 .set noreorder
384 bgtzl a3,.L_bn_add_words_proceed
385 ld t0,0(a1)
386 jr ra
387 move v0,zero
388 .set reorder
389
390.L_bn_add_words_proceed:
391 li MINUS4,-4
392 and AT,a3,MINUS4
393 move v0,zero
394 beqz AT,.L_bn_add_words_tail
395
396.L_bn_add_words_loop:
397 ld ta0,0(a2)
398 ld t1,8(a1)
399 ld ta1,8(a2)
400 ld t2,16(a1)
401 ld ta2,16(a2)
402 ld t3,24(a1)
403 ld ta3,24(a2)
404 daddu ta0,t0
405 subu a3,4
406 sltu t8,ta0,t0
407 daddu t0,ta0,v0
408 PTR_ADD a0,32
409 sltu v0,t0,ta0
410 sd t0,-32(a0)
411 daddu v0,t8
412
413 daddu ta1,t1
414 PTR_ADD a1,32
415 sltu t9,ta1,t1
416 daddu t1,ta1,v0
417 PTR_ADD a2,32
418 sltu v0,t1,ta1
419 sd t1,-24(a0)
420 daddu v0,t9
421
422 daddu ta2,t2
423 and AT,a3,MINUS4
424 sltu t8,ta2,t2
425 daddu t2,ta2,v0
426 sltu v0,t2,ta2
427 sd t2,-16(a0)
428 daddu v0,t8
429
430 daddu ta3,t3
431 sltu t9,ta3,t3
432 daddu t3,ta3,v0
433 sltu v0,t3,ta3
434 sd t3,-8(a0)
435 daddu v0,t9
436
437 .set noreorder
438 bgtzl AT,.L_bn_add_words_loop
439 ld t0,0(a1)
440
441 bnezl a3,.L_bn_add_words_tail
442 ld t0,0(a1)
443 .set reorder
444
445.L_bn_add_words_return:
446 jr ra
447
448.L_bn_add_words_tail:
449 ld ta0,0(a2)
450 daddu ta0,t0
451 subu a3,1
452 sltu t8,ta0,t0
453 daddu t0,ta0,v0
454 sltu v0,t0,ta0
455 sd t0,0(a0)
456 daddu v0,t8
457 beqz a3,.L_bn_add_words_return
458
459 ld t1,8(a1)
460 ld ta1,8(a2)
461 daddu ta1,t1
462 subu a3,1
463 sltu t9,ta1,t1
464 daddu t1,ta1,v0
465 sltu v0,t1,ta1
466 sd t1,8(a0)
467 daddu v0,t9
468 beqz a3,.L_bn_add_words_return
469
470 ld t2,16(a1)
471 ld ta2,16(a2)
472 daddu ta2,t2
473 sltu t8,ta2,t2
474 daddu t2,ta2,v0
475 sltu v0,t2,ta2
476 sd t2,16(a0)
477 daddu v0,t8
478 jr ra
479END(bn_add_words)
480
481.align 5
482LEAF(bn_sub_words)
483 .set noreorder
484 bgtzl a3,.L_bn_sub_words_proceed
485 ld t0,0(a1)
486 jr ra
487 move v0,zero
488 .set reorder
489
490.L_bn_sub_words_proceed:
491 li MINUS4,-4
492 and AT,a3,MINUS4
493 move v0,zero
494 beqz AT,.L_bn_sub_words_tail
495
496.L_bn_sub_words_loop:
497 ld ta0,0(a2)
498 ld t1,8(a1)
499 ld ta1,8(a2)
500 ld t2,16(a1)
501 ld ta2,16(a2)
502 ld t3,24(a1)
503 ld ta3,24(a2)
504 sltu t8,t0,ta0
505 dsubu t0,ta0
506 subu a3,4
507 dsubu ta0,t0,v0
508 and AT,a3,MINUS4
509 sd ta0,0(a0)
510 MOVNZ (t0,v0,t8)
511
512 sltu t9,t1,ta1
513 dsubu t1,ta1
514 PTR_ADD a0,32
515 dsubu ta1,t1,v0
516 PTR_ADD a1,32
517 sd ta1,-24(a0)
518 MOVNZ (t1,v0,t9)
519
520
521 sltu t8,t2,ta2
522 dsubu t2,ta2
523 dsubu ta2,t2,v0
524 PTR_ADD a2,32
525 sd ta2,-16(a0)
526 MOVNZ (t2,v0,t8)
527
528 sltu t9,t3,ta3
529 dsubu t3,ta3
530 dsubu ta3,t3,v0
531 sd ta3,-8(a0)
532 MOVNZ (t3,v0,t9)
533
534 .set noreorder
535 bgtzl AT,.L_bn_sub_words_loop
536 ld t0,0(a1)
537
538 bnezl a3,.L_bn_sub_words_tail
539 ld t0,0(a1)
540 .set reorder
541
542.L_bn_sub_words_return:
543 jr ra
544
545.L_bn_sub_words_tail:
546 ld ta0,0(a2)
547 subu a3,1
548 sltu t8,t0,ta0
549 dsubu t0,ta0
550 dsubu ta0,t0,v0
551 MOVNZ (t0,v0,t8)
552 sd ta0,0(a0)
553 beqz a3,.L_bn_sub_words_return
554
555 ld t1,8(a1)
556 subu a3,1
557 ld ta1,8(a2)
558 sltu t9,t1,ta1
559 dsubu t1,ta1
560 dsubu ta1,t1,v0
561 MOVNZ (t1,v0,t9)
562 sd ta1,8(a0)
563 beqz a3,.L_bn_sub_words_return
564
565 ld t2,16(a1)
566 ld ta2,16(a2)
567 sltu t8,t2,ta2
568 dsubu t2,ta2
569 dsubu ta2,t2,v0
570 MOVNZ (t2,v0,t8)
571 sd ta2,16(a0)
572 jr ra
573END(bn_sub_words)
574
575#undef MINUS4
576
577.align 5
578LEAF(bn_div_words)
579 .set noreorder
580 bnezl a2,.L_bn_div_words_proceed
581 move v1,zero
582 jr ra
583 li v0,-1 /* I'd rather signal div-by-zero
584 * which can be done with 'break 7' */
585
586.L_bn_div_words_proceed:
587 bltz a2,.L_bn_div_words_body
588 move t9,v1
589 dsll a2,1
590 bgtz a2,.-4
591 addu t9,1
592
593 .set reorder
594 negu t1,t9
595 li t2,-1
596 dsll t2,t1
597 and t2,a0
598 dsrl AT,a1,t1
599 .set noreorder
600 bnezl t2,.+8
601 break 6 /* signal overflow */
602 .set reorder
603 dsll a0,t9
604 dsll a1,t9
605 or a0,AT
606
607#define QT ta0
608#define HH ta1
609#define DH v1
610.L_bn_div_words_body:
611 dsrl DH,a2,32
612 sgeu AT,a0,a2
613 .set noreorder
614 bnezl AT,.+8
615 dsubu a0,a2
616 .set reorder
617
618 li QT,-1
619 dsrl HH,a0,32
620 dsrl QT,32 /* q=0xffffffff */
621 beq DH,HH,.L_bn_div_words_skip_div1
622 ddivu zero,a0,DH
623 mflo QT
624.L_bn_div_words_skip_div1:
625 dmultu a2,QT
626 dsll t3,a0,32
627 dsrl AT,a1,32
628 or t3,AT
629 mflo t0
630 mfhi t1
631.L_bn_div_words_inner_loop1:
632 sltu t2,t3,t0
633 seq t8,HH,t1
634 sltu AT,HH,t1
635 and t2,t8
636 or AT,t2
637 .set noreorder
638 beqz AT,.L_bn_div_words_inner_loop1_done
639 sltu t2,t0,a2
640 .set reorder
641 dsubu QT,1
642 dsubu t0,a2
643 dsubu t1,t2
644 b .L_bn_div_words_inner_loop1
645.L_bn_div_words_inner_loop1_done:
646
647 dsll a1,32
648 dsubu a0,t3,t0
649 dsll v0,QT,32
650
651 li QT,-1
652 dsrl HH,a0,32
653 dsrl QT,32 /* q=0xffffffff */
654 beq DH,HH,.L_bn_div_words_skip_div2
655 ddivu zero,a0,DH
656 mflo QT
657.L_bn_div_words_skip_div2:
658 dmultu a2,QT
659 dsll t3,a0,32
660 dsrl AT,a1,32
661 or t3,AT
662 mflo t0
663 mfhi t1
664.L_bn_div_words_inner_loop2:
665 sltu t2,t3,t0
666 seq t8,HH,t1
667 sltu AT,HH,t1
668 and t2,t8
669 or AT,t2
670 .set noreorder
671 beqz AT,.L_bn_div_words_inner_loop2_done
672 sltu t2,t0,a2
673 .set reorder
674 dsubu QT,1
675 dsubu t0,a2
676 dsubu t1,t2
677 b .L_bn_div_words_inner_loop2
678.L_bn_div_words_inner_loop2_done:
679
680 dsubu a0,t3,t0
681 or v0,QT
682 dsrl v1,a0,t9 /* v1 contains remainder if anybody wants it */
683 dsrl a2,t9 /* restore a2 */
684 jr ra
685#undef HH
686#undef DH
687#undef QT
688END(bn_div_words)
689
690.align 5
691LEAF(bn_div_3_words)
692 .set reorder
693 move a3,a0 /* we know that bn_div_words doesn't
694 * touch a3, ta2, ta3 and preserves a2
695 * so that we can save two arguments
696 * and return address in registers
697 * instead of stack:-)
698 */
699 ld a0,(a3)
700 move ta2,a2
701 move a2,a1
702 ld a1,-8(a3)
703 move ta3,ra
704 move v1,zero
705 li v0,-1
706 beq a0,a2,.L_bn_div_3_words_skip_div
707 jal bn_div_words
708 move ra,ta3
709.L_bn_div_3_words_skip_div:
710 dmultu ta2,v0
711 ld t2,-16(a3)
712 mflo t0
713 mfhi t1
714.L_bn_div_3_words_inner_loop:
715 sgeu AT,t2,t0
716 seq t9,t1,v1
717 sltu t8,t1,v1
718 and AT,t9
719 or AT,t8
720 bnez AT,.L_bn_div_3_words_inner_loop_done
721 daddu v1,a2
722 sltu t3,t0,ta2
723 sltu AT,v1,a2
724 dsubu v0,1
725 dsubu t0,ta2
726 dsubu t1,t3
727 beqz AT,.L_bn_div_3_words_inner_loop
728.L_bn_div_3_words_inner_loop_done:
729 jr ra
730END(bn_div_3_words)
731
732#define a_0 t0
733#define a_1 t1
734#define a_2 t2
735#define a_3 t3
736#define b_0 ta0
737#define b_1 ta1
738#define b_2 ta2
739#define b_3 ta3
740
741#define a_4 s0
742#define a_5 s2
743#define a_6 s4
744#define a_7 a1 /* once we load a[7] we don't need a anymore */
745#define b_4 s1
746#define b_5 s3
747#define b_6 s5
748#define b_7 a2 /* once we load b[7] we don't need b anymore */
749
750#define t_1 t8
751#define t_2 t9
752
753#define c_1 v0
754#define c_2 v1
755#define c_3 a3
756
757#define FRAME_SIZE 48
758
759.align 5
760LEAF(bn_mul_comba8)
761 .set noreorder
762 PTR_SUB sp,FRAME_SIZE
763 .frame sp,64,ra
764 .set reorder
765 ld a_0,0(a1) /* If compiled with -mips3 option on
766 * R5000 box assembler barks on this
767 * line with "shouldn't have mult/div
768 * as last instruction in bb (R10K
769 * bug)" warning. If anybody out there
770 * has a clue about how to circumvent
771 * this do send me a note.
772 * <appro@fy.chalmers.se>
773 */
774 ld b_0,0(a2)
775 ld a_1,8(a1)
776 ld a_2,16(a1)
777 ld a_3,24(a1)
778 ld b_1,8(a2)
779 ld b_2,16(a2)
780 ld b_3,24(a2)
781 dmultu a_0,b_0 /* mul_add_c(a[0],b[0],c1,c2,c3); */
782 sd s0,0(sp)
783 sd s1,8(sp)
784 sd s2,16(sp)
785 sd s3,24(sp)
786 sd s4,32(sp)
787 sd s5,40(sp)
788 mflo c_1
789 mfhi c_2
790
791 dmultu a_0,b_1 /* mul_add_c(a[0],b[1],c2,c3,c1); */
792 ld a_4,32(a1)
793 ld a_5,40(a1)
794 ld a_6,48(a1)
795 ld a_7,56(a1)
796 ld b_4,32(a2)
797 ld b_5,40(a2)
798 mflo t_1
799 mfhi t_2
800 daddu c_2,t_1
801 sltu AT,c_2,t_1
802 daddu c_3,t_2,AT
803 dmultu a_1,b_0 /* mul_add_c(a[1],b[0],c2,c3,c1); */
804 ld b_6,48(a2)
805 ld b_7,56(a2)
806 sd c_1,0(a0) /* r[0]=c1; */
807 mflo t_1
808 mfhi t_2
809 daddu c_2,t_1
810 sltu AT,c_2,t_1
811 daddu t_2,AT
812 daddu c_3,t_2
813 sltu c_1,c_3,t_2
814 sd c_2,8(a0) /* r[1]=c2; */
815
816 dmultu a_2,b_0 /* mul_add_c(a[2],b[0],c3,c1,c2); */
817 mflo t_1
818 mfhi t_2
819 daddu c_3,t_1
820 sltu AT,c_3,t_1
821 daddu t_2,AT
822 daddu c_1,t_2
823 dmultu a_1,b_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */
824 mflo t_1
825 mfhi t_2
826 daddu c_3,t_1
827 sltu AT,c_3,t_1
828 daddu t_2,AT
829 daddu c_1,t_2
830 sltu c_2,c_1,t_2
831 dmultu a_0,b_2 /* mul_add_c(a[0],b[2],c3,c1,c2); */
832 mflo t_1
833 mfhi t_2
834 daddu c_3,t_1
835 sltu AT,c_3,t_1
836 daddu t_2,AT
837 daddu c_1,t_2
838 sltu AT,c_1,t_2
839 daddu c_2,AT
840 sd c_3,16(a0) /* r[2]=c3; */
841
842 dmultu a_0,b_3 /* mul_add_c(a[0],b[3],c1,c2,c3); */
843 mflo t_1
844 mfhi t_2
845 daddu c_1,t_1
846 sltu AT,c_1,t_1
847 daddu t_2,AT
848 daddu c_2,t_2
849 dmultu a_1,b_2 /* mul_add_c(a[1],b[2],c1,c2,c3); */
850 mflo t_1
851 mfhi t_2
852 daddu c_1,t_1
853 sltu AT,c_1,t_1
854 daddu t_2,AT
855 daddu c_2,t_2
856 sltu c_3,c_2,t_2
857 dmultu a_2,b_1 /* mul_add_c(a[2],b[1],c1,c2,c3); */
858 mflo t_1
859 mfhi t_2
860 daddu c_1,t_1
861 sltu AT,c_1,t_1
862 daddu t_2,AT
863 daddu c_2,t_2
864 sltu AT,c_2,t_2
865 daddu c_3,AT
866 dmultu a_3,b_0 /* mul_add_c(a[3],b[0],c1,c2,c3); */
867 mflo t_1
868 mfhi t_2
869 daddu c_1,t_1
870 sltu AT,c_1,t_1
871 daddu t_2,AT
872 daddu c_2,t_2
873 sltu AT,c_2,t_2
874 daddu c_3,AT
875 sd c_1,24(a0) /* r[3]=c1; */
876
877 dmultu a_4,b_0 /* mul_add_c(a[4],b[0],c2,c3,c1); */
878 mflo t_1
879 mfhi t_2
880 daddu c_2,t_1
881 sltu AT,c_2,t_1
882 daddu t_2,AT
883 daddu c_3,t_2
884 dmultu a_3,b_1 /* mul_add_c(a[3],b[1],c2,c3,c1); */
885 mflo t_1
886 mfhi t_2
887 daddu c_2,t_1
888 sltu AT,c_2,t_1
889 daddu t_2,AT
890 daddu c_3,t_2
891 sltu c_1,c_3,t_2
892 dmultu a_2,b_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */
893 mflo t_1
894 mfhi t_2
895 daddu c_2,t_1
896 sltu AT,c_2,t_1
897 daddu t_2,AT
898 daddu c_3,t_2
899 sltu AT,c_3,t_2
900 daddu c_1,AT
901 dmultu a_1,b_3 /* mul_add_c(a[1],b[3],c2,c3,c1); */
902 mflo t_1
903 mfhi t_2
904 daddu c_2,t_1
905 sltu AT,c_2,t_1
906 daddu t_2,AT
907 daddu c_3,t_2
908 sltu AT,c_3,t_2
909 daddu c_1,AT
910 dmultu a_0,b_4 /* mul_add_c(a[0],b[4],c2,c3,c1); */
911 mflo t_1
912 mfhi t_2
913 daddu c_2,t_1
914 sltu AT,c_2,t_1
915 daddu t_2,AT
916 daddu c_3,t_2
917 sltu AT,c_3,t_2
918 daddu c_1,AT
919 sd c_2,32(a0) /* r[4]=c2; */
920
921 dmultu a_0,b_5 /* mul_add_c(a[0],b[5],c3,c1,c2); */
922 mflo t_1
923 mfhi t_2
924 daddu c_3,t_1
925 sltu AT,c_3,t_1
926 daddu t_2,AT
927 daddu c_1,t_2
928 dmultu a_1,b_4 /* mul_add_c(a[1],b[4],c3,c1,c2); */
929 mflo t_1
930 mfhi t_2
931 daddu c_3,t_1
932 sltu AT,c_3,t_1
933 daddu t_2,AT
934 daddu c_1,t_2
935 sltu c_2,c_1,t_2
936 dmultu a_2,b_3 /* mul_add_c(a[2],b[3],c3,c1,c2); */
937 mflo t_1
938 mfhi t_2
939 daddu c_3,t_1
940 sltu AT,c_3,t_1
941 daddu t_2,AT
942 daddu c_1,t_2
943 sltu AT,c_1,t_2
944 daddu c_2,AT
945 dmultu a_3,b_2 /* mul_add_c(a[3],b[2],c3,c1,c2); */
946 mflo t_1
947 mfhi t_2
948 daddu c_3,t_1
949 sltu AT,c_3,t_1
950 daddu t_2,AT
951 daddu c_1,t_2
952 sltu AT,c_1,t_2
953 daddu c_2,AT
954 dmultu a_4,b_1 /* mul_add_c(a[4],b[1],c3,c1,c2); */
955 mflo t_1
956 mfhi t_2
957 daddu c_3,t_1
958 sltu AT,c_3,t_1
959 daddu t_2,AT
960 daddu c_1,t_2
961 sltu AT,c_1,t_2
962 daddu c_2,AT
963 dmultu a_5,b_0 /* mul_add_c(a[5],b[0],c3,c1,c2); */
964 mflo t_1
965 mfhi t_2
966 daddu c_3,t_1
967 sltu AT,c_3,t_1
968 daddu t_2,AT
969 daddu c_1,t_2
970 sltu AT,c_1,t_2
971 daddu c_2,AT
972 sd c_3,40(a0) /* r[5]=c3; */
973
974 dmultu a_6,b_0 /* mul_add_c(a[6],b[0],c1,c2,c3); */
975 mflo t_1
976 mfhi t_2
977 daddu c_1,t_1
978 sltu AT,c_1,t_1
979 daddu t_2,AT
980 daddu c_2,t_2
981 dmultu a_5,b_1 /* mul_add_c(a[5],b[1],c1,c2,c3); */
982 mflo t_1
983 mfhi t_2
984 daddu c_1,t_1
985 sltu AT,c_1,t_1
986 daddu t_2,AT
987 daddu c_2,t_2
988 sltu c_3,c_2,t_2
989 dmultu a_4,b_2 /* mul_add_c(a[4],b[2],c1,c2,c3); */
990 mflo t_1
991 mfhi t_2
992 daddu c_1,t_1
993 sltu AT,c_1,t_1
994 daddu t_2,AT
995 daddu c_2,t_2
996 sltu AT,c_2,t_2
997 daddu c_3,AT
998 dmultu a_3,b_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */
999 mflo t_1
1000 mfhi t_2
1001 daddu c_1,t_1
1002 sltu AT,c_1,t_1
1003 daddu t_2,AT
1004 daddu c_2,t_2
1005 sltu AT,c_2,t_2
1006 daddu c_3,AT
1007 dmultu a_2,b_4 /* mul_add_c(a[2],b[4],c1,c2,c3); */
1008 mflo t_1
1009 mfhi t_2
1010 daddu c_1,t_1
1011 sltu AT,c_1,t_1
1012 daddu t_2,AT
1013 daddu c_2,t_2
1014 sltu AT,c_2,t_2
1015 daddu c_3,AT
1016 dmultu a_1,b_5 /* mul_add_c(a[1],b[5],c1,c2,c3); */
1017 mflo t_1
1018 mfhi t_2
1019 daddu c_1,t_1
1020 sltu AT,c_1,t_1
1021 daddu t_2,AT
1022 daddu c_2,t_2
1023 sltu AT,c_2,t_2
1024 daddu c_3,AT
1025 dmultu a_0,b_6 /* mul_add_c(a[0],b[6],c1,c2,c3); */
1026 mflo t_1
1027 mfhi t_2
1028 daddu c_1,t_1
1029 sltu AT,c_1,t_1
1030 daddu t_2,AT
1031 daddu c_2,t_2
1032 sltu AT,c_2,t_2
1033 daddu c_3,AT
1034 sd c_1,48(a0) /* r[6]=c1; */
1035
1036 dmultu a_0,b_7 /* mul_add_c(a[0],b[7],c2,c3,c1); */
1037 mflo t_1
1038 mfhi t_2
1039 daddu c_2,t_1
1040 sltu AT,c_2,t_1
1041 daddu t_2,AT
1042 daddu c_3,t_2
1043 dmultu a_1,b_6 /* mul_add_c(a[1],b[6],c2,c3,c1); */
1044 mflo t_1
1045 mfhi t_2
1046 daddu c_2,t_1
1047 sltu AT,c_2,t_1
1048 daddu t_2,AT
1049 daddu c_3,t_2
1050 sltu c_1,c_3,t_2
1051 dmultu a_2,b_5 /* mul_add_c(a[2],b[5],c2,c3,c1); */
1052 mflo t_1
1053 mfhi t_2
1054 daddu c_2,t_1
1055 sltu AT,c_2,t_1
1056 daddu t_2,AT
1057 daddu c_3,t_2
1058 sltu AT,c_3,t_2
1059 daddu c_1,AT
1060 dmultu a_3,b_4 /* mul_add_c(a[3],b[4],c2,c3,c1); */
1061 mflo t_1
1062 mfhi t_2
1063 daddu c_2,t_1
1064 sltu AT,c_2,t_1
1065 daddu t_2,AT
1066 daddu c_3,t_2
1067 sltu AT,c_3,t_2
1068 daddu c_1,AT
1069 dmultu a_4,b_3 /* mul_add_c(a[4],b[3],c2,c3,c1); */
1070 mflo t_1
1071 mfhi t_2
1072 daddu c_2,t_1
1073 sltu AT,c_2,t_1
1074 daddu t_2,AT
1075 daddu c_3,t_2
1076 sltu AT,c_3,t_2
1077 daddu c_1,AT
1078 dmultu a_5,b_2 /* mul_add_c(a[5],b[2],c2,c3,c1); */
1079 mflo t_1
1080 mfhi t_2
1081 daddu c_2,t_1
1082 sltu AT,c_2,t_1
1083 daddu t_2,AT
1084 daddu c_3,t_2
1085 sltu AT,c_3,t_2
1086 daddu c_1,AT
1087 dmultu a_6,b_1 /* mul_add_c(a[6],b[1],c2,c3,c1); */
1088 mflo t_1
1089 mfhi t_2
1090 daddu c_2,t_1
1091 sltu AT,c_2,t_1
1092 daddu t_2,AT
1093 daddu c_3,t_2
1094 sltu AT,c_3,t_2
1095 daddu c_1,AT
1096 dmultu a_7,b_0 /* mul_add_c(a[7],b[0],c2,c3,c1); */
1097 mflo t_1
1098 mfhi t_2
1099 daddu c_2,t_1
1100 sltu AT,c_2,t_1
1101 daddu t_2,AT
1102 daddu c_3,t_2
1103 sltu AT,c_3,t_2
1104 daddu c_1,AT
1105 sd c_2,56(a0) /* r[7]=c2; */
1106
1107 dmultu a_7,b_1 /* mul_add_c(a[7],b[1],c3,c1,c2); */
1108 mflo t_1
1109 mfhi t_2
1110 daddu c_3,t_1
1111 sltu AT,c_3,t_1
1112 daddu t_2,AT
1113 daddu c_1,t_2
1114 dmultu a_6,b_2 /* mul_add_c(a[6],b[2],c3,c1,c2); */
1115 mflo t_1
1116 mfhi t_2
1117 daddu c_3,t_1
1118 sltu AT,c_3,t_1
1119 daddu t_2,AT
1120 daddu c_1,t_2
1121 sltu c_2,c_1,t_2
1122 dmultu a_5,b_3 /* mul_add_c(a[5],b[3],c3,c1,c2); */
1123 mflo t_1
1124 mfhi t_2
1125 daddu c_3,t_1
1126 sltu AT,c_3,t_1
1127 daddu t_2,AT
1128 daddu c_1,t_2
1129 sltu AT,c_1,t_2
1130 daddu c_2,AT
1131 dmultu a_4,b_4 /* mul_add_c(a[4],b[4],c3,c1,c2); */
1132 mflo t_1
1133 mfhi t_2
1134 daddu c_3,t_1
1135 sltu AT,c_3,t_1
1136 daddu t_2,AT
1137 daddu c_1,t_2
1138 sltu AT,c_1,t_2
1139 daddu c_2,AT
1140 dmultu a_3,b_5 /* mul_add_c(a[3],b[5],c3,c1,c2); */
1141 mflo t_1
1142 mfhi t_2
1143 daddu c_3,t_1
1144 sltu AT,c_3,t_1
1145 daddu t_2,AT
1146 daddu c_1,t_2
1147 sltu AT,c_1,t_2
1148 daddu c_2,AT
1149 dmultu a_2,b_6 /* mul_add_c(a[2],b[6],c3,c1,c2); */
1150 mflo t_1
1151 mfhi t_2
1152 daddu c_3,t_1
1153 sltu AT,c_3,t_1
1154 daddu t_2,AT
1155 daddu c_1,t_2
1156 sltu AT,c_1,t_2
1157 daddu c_2,AT
1158 dmultu a_1,b_7 /* mul_add_c(a[1],b[7],c3,c1,c2); */
1159 mflo t_1
1160 mfhi t_2
1161 daddu c_3,t_1
1162 sltu AT,c_3,t_1
1163 daddu t_2,AT
1164 daddu c_1,t_2
1165 sltu AT,c_1,t_2
1166 daddu c_2,AT
1167 sd c_3,64(a0) /* r[8]=c3; */
1168
1169 dmultu a_2,b_7 /* mul_add_c(a[2],b[7],c1,c2,c3); */
1170 mflo t_1
1171 mfhi t_2
1172 daddu c_1,t_1
1173 sltu AT,c_1,t_1
1174 daddu t_2,AT
1175 daddu c_2,t_2
1176 dmultu a_3,b_6 /* mul_add_c(a[3],b[6],c1,c2,c3); */
1177 mflo t_1
1178 mfhi t_2
1179 daddu c_1,t_1
1180 sltu AT,c_1,t_1
1181 daddu t_2,AT
1182 daddu c_2,t_2
1183 sltu c_3,c_2,t_2
1184 dmultu a_4,b_5 /* mul_add_c(a[4],b[5],c1,c2,c3); */
1185 mflo t_1
1186 mfhi t_2
1187 daddu c_1,t_1
1188 sltu AT,c_1,t_1
1189 daddu t_2,AT
1190 daddu c_2,t_2
1191 sltu AT,c_2,t_2
1192 daddu c_3,AT
1193 dmultu a_5,b_4 /* mul_add_c(a[5],b[4],c1,c2,c3); */
1194 mflo t_1
1195 mfhi t_2
1196 daddu c_1,t_1
1197 sltu AT,c_1,t_1
1198 daddu t_2,AT
1199 daddu c_2,t_2
1200 sltu AT,c_2,t_2
1201 daddu c_3,AT
1202 dmultu a_6,b_3 /* mul_add_c(a[6],b[3],c1,c2,c3); */
1203 mflo t_1
1204 mfhi t_2
1205 daddu c_1,t_1
1206 sltu AT,c_1,t_1
1207 daddu t_2,AT
1208 daddu c_2,t_2
1209 sltu AT,c_2,t_2
1210 daddu c_3,AT
1211 dmultu a_7,b_2 /* mul_add_c(a[7],b[2],c1,c2,c3); */
1212 mflo t_1
1213 mfhi t_2
1214 daddu c_1,t_1
1215 sltu AT,c_1,t_1
1216 daddu t_2,AT
1217 daddu c_2,t_2
1218 sltu AT,c_2,t_2
1219 daddu c_3,AT
1220 sd c_1,72(a0) /* r[9]=c1; */
1221
1222 dmultu a_7,b_3 /* mul_add_c(a[7],b[3],c2,c3,c1); */
1223 mflo t_1
1224 mfhi t_2
1225 daddu c_2,t_1
1226 sltu AT,c_2,t_1
1227 daddu t_2,AT
1228 daddu c_3,t_2
1229 dmultu a_6,b_4 /* mul_add_c(a[6],b[4],c2,c3,c1); */
1230 mflo t_1
1231 mfhi t_2
1232 daddu c_2,t_1
1233 sltu AT,c_2,t_1
1234 daddu t_2,AT
1235 daddu c_3,t_2
1236 sltu c_1,c_3,t_2
1237 dmultu a_5,b_5 /* mul_add_c(a[5],b[5],c2,c3,c1); */
1238 mflo t_1
1239 mfhi t_2
1240 daddu c_2,t_1
1241 sltu AT,c_2,t_1
1242 daddu t_2,AT
1243 daddu c_3,t_2
1244 sltu AT,c_3,t_2
1245 daddu c_1,AT
1246 dmultu a_4,b_6 /* mul_add_c(a[4],b[6],c2,c3,c1); */
1247 mflo t_1
1248 mfhi t_2
1249 daddu c_2,t_1
1250 sltu AT,c_2,t_1
1251 daddu t_2,AT
1252 daddu c_3,t_2
1253 sltu AT,c_3,t_2
1254 daddu c_1,AT
1255 dmultu a_3,b_7 /* mul_add_c(a[3],b[7],c2,c3,c1); */
1256 mflo t_1
1257 mfhi t_2
1258 daddu c_2,t_1
1259 sltu AT,c_2,t_1
1260 daddu t_2,AT
1261 daddu c_3,t_2
1262 sltu AT,c_3,t_2
1263 daddu c_1,AT
1264 sd c_2,80(a0) /* r[10]=c2; */
1265
1266 dmultu a_4,b_7 /* mul_add_c(a[4],b[7],c3,c1,c2); */
1267 mflo t_1
1268 mfhi t_2
1269 daddu c_3,t_1
1270 sltu AT,c_3,t_1
1271 daddu t_2,AT
1272 daddu c_1,t_2
1273 dmultu a_5,b_6 /* mul_add_c(a[5],b[6],c3,c1,c2); */
1274 mflo t_1
1275 mfhi t_2
1276 daddu c_3,t_1
1277 sltu AT,c_3,t_1
1278 daddu t_2,AT
1279 daddu c_1,t_2
1280 sltu c_2,c_1,t_2
1281 dmultu a_6,b_5 /* mul_add_c(a[6],b[5],c3,c1,c2); */
1282 mflo t_1
1283 mfhi t_2
1284 daddu c_3,t_1
1285 sltu AT,c_3,t_1
1286 daddu t_2,AT
1287 daddu c_1,t_2
1288 sltu AT,c_1,t_2
1289 daddu c_2,AT
1290 dmultu a_7,b_4 /* mul_add_c(a[7],b[4],c3,c1,c2); */
1291 mflo t_1
1292 mfhi t_2
1293 daddu c_3,t_1
1294 sltu AT,c_3,t_1
1295 daddu t_2,AT
1296 daddu c_1,t_2
1297 sltu AT,c_1,t_2
1298 daddu c_2,AT
1299 sd c_3,88(a0) /* r[11]=c3; */
1300
1301 dmultu a_7,b_5 /* mul_add_c(a[7],b[5],c1,c2,c3); */
1302 mflo t_1
1303 mfhi t_2
1304 daddu c_1,t_1
1305 sltu AT,c_1,t_1
1306 daddu t_2,AT
1307 daddu c_2,t_2
1308 dmultu a_6,b_6 /* mul_add_c(a[6],b[6],c1,c2,c3); */
1309 mflo t_1
1310 mfhi t_2
1311 daddu c_1,t_1
1312 sltu AT,c_1,t_1
1313 daddu t_2,AT
1314 daddu c_2,t_2
1315 sltu c_3,c_2,t_2
1316 dmultu a_5,b_7 /* mul_add_c(a[5],b[7],c1,c2,c3); */
1317 mflo t_1
1318 mfhi t_2
1319 daddu c_1,t_1
1320 sltu AT,c_1,t_1
1321 daddu t_2,AT
1322 daddu c_2,t_2
1323 sltu AT,c_2,t_2
1324 daddu c_3,AT
1325 sd c_1,96(a0) /* r[12]=c1; */
1326
1327 dmultu a_6,b_7 /* mul_add_c(a[6],b[7],c2,c3,c1); */
1328 mflo t_1
1329 mfhi t_2
1330 daddu c_2,t_1
1331 sltu AT,c_2,t_1
1332 daddu t_2,AT
1333 daddu c_3,t_2
1334 dmultu a_7,b_6 /* mul_add_c(a[7],b[6],c2,c3,c1); */
1335 mflo t_1
1336 mfhi t_2
1337 daddu c_2,t_1
1338 sltu AT,c_2,t_1
1339 daddu t_2,AT
1340 daddu c_3,t_2
1341 sltu c_1,c_3,t_2
1342 sd c_2,104(a0) /* r[13]=c2; */
1343
1344 dmultu a_7,b_7 /* mul_add_c(a[7],b[7],c3,c1,c2); */
1345 ld s0,0(sp)
1346 ld s1,8(sp)
1347 ld s2,16(sp)
1348 ld s3,24(sp)
1349 ld s4,32(sp)
1350 ld s5,40(sp)
1351 mflo t_1
1352 mfhi t_2
1353 daddu c_3,t_1
1354 sltu AT,c_3,t_1
1355 daddu t_2,AT
1356 daddu c_1,t_2
1357 sd c_3,112(a0) /* r[14]=c3; */
1358 sd c_1,120(a0) /* r[15]=c1; */
1359
1360 PTR_ADD sp,FRAME_SIZE
1361
1362 jr ra
1363END(bn_mul_comba8)
1364
1365.align 5
1366LEAF(bn_mul_comba4)
1367 .set reorder
1368 ld a_0,0(a1)
1369 ld b_0,0(a2)
1370 ld a_1,8(a1)
1371 ld a_2,16(a1)
1372 dmultu a_0,b_0 /* mul_add_c(a[0],b[0],c1,c2,c3); */
1373 ld a_3,24(a1)
1374 ld b_1,8(a2)
1375 ld b_2,16(a2)
1376 ld b_3,24(a2)
1377 mflo c_1
1378 mfhi c_2
1379 sd c_1,0(a0)
1380
1381 dmultu a_0,b_1 /* mul_add_c(a[0],b[1],c2,c3,c1); */
1382 mflo t_1
1383 mfhi t_2
1384 daddu c_2,t_1
1385 sltu AT,c_2,t_1
1386 daddu c_3,t_2,AT
1387 dmultu a_1,b_0 /* mul_add_c(a[1],b[0],c2,c3,c1); */
1388 mflo t_1
1389 mfhi t_2
1390 daddu c_2,t_1
1391 sltu AT,c_2,t_1
1392 daddu t_2,AT
1393 daddu c_3,t_2
1394 sltu c_1,c_3,t_2
1395 sd c_2,8(a0)
1396
1397 dmultu a_2,b_0 /* mul_add_c(a[2],b[0],c3,c1,c2); */
1398 mflo t_1
1399 mfhi t_2
1400 daddu c_3,t_1
1401 sltu AT,c_3,t_1
1402 daddu t_2,AT
1403 daddu c_1,t_2
1404 dmultu a_1,b_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */
1405 mflo t_1
1406 mfhi t_2
1407 daddu c_3,t_1
1408 sltu AT,c_3,t_1
1409 daddu t_2,AT
1410 daddu c_1,t_2
1411 sltu c_2,c_1,t_2
1412 dmultu a_0,b_2 /* mul_add_c(a[0],b[2],c3,c1,c2); */
1413 mflo t_1
1414 mfhi t_2
1415 daddu c_3,t_1
1416 sltu AT,c_3,t_1
1417 daddu t_2,AT
1418 daddu c_1,t_2
1419 sltu AT,c_1,t_2
1420 daddu c_2,AT
1421 sd c_3,16(a0)
1422
1423 dmultu a_0,b_3 /* mul_add_c(a[0],b[3],c1,c2,c3); */
1424 mflo t_1
1425 mfhi t_2
1426 daddu c_1,t_1
1427 sltu AT,c_1,t_1
1428 daddu t_2,AT
1429 daddu c_2,t_2
1430 dmultu a_1,b_2 /* mul_add_c(a[1],b[2],c1,c2,c3); */
1431 mflo t_1
1432 mfhi t_2
1433 daddu c_1,t_1
1434 sltu AT,c_1,t_1
1435 daddu t_2,AT
1436 daddu c_2,t_2
1437 sltu c_3,c_2,t_2
1438 dmultu a_2,b_1 /* mul_add_c(a[2],b[1],c1,c2,c3); */
1439 mflo t_1
1440 mfhi t_2
1441 daddu c_1,t_1
1442 sltu AT,c_1,t_1
1443 daddu t_2,AT
1444 daddu c_2,t_2
1445 sltu AT,c_2,t_2
1446 daddu c_3,AT
1447 dmultu a_3,b_0 /* mul_add_c(a[3],b[0],c1,c2,c3); */
1448 mflo t_1
1449 mfhi t_2
1450 daddu c_1,t_1
1451 sltu AT,c_1,t_1
1452 daddu t_2,AT
1453 daddu c_2,t_2
1454 sltu AT,c_2,t_2
1455 daddu c_3,AT
1456 sd c_1,24(a0)
1457
1458 dmultu a_3,b_1 /* mul_add_c(a[3],b[1],c2,c3,c1); */
1459 mflo t_1
1460 mfhi t_2
1461 daddu c_2,t_1
1462 sltu AT,c_2,t_1
1463 daddu t_2,AT
1464 daddu c_3,t_2
1465 dmultu a_2,b_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */
1466 mflo t_1
1467 mfhi t_2
1468 daddu c_2,t_1
1469 sltu AT,c_2,t_1
1470 daddu t_2,AT
1471 daddu c_3,t_2
1472 sltu c_1,c_3,t_2
1473 dmultu a_1,b_3 /* mul_add_c(a[1],b[3],c2,c3,c1); */
1474 mflo t_1
1475 mfhi t_2
1476 daddu c_2,t_1
1477 sltu AT,c_2,t_1
1478 daddu t_2,AT
1479 daddu c_3,t_2
1480 sltu AT,c_3,t_2
1481 daddu c_1,AT
1482 sd c_2,32(a0)
1483
1484 dmultu a_2,b_3 /* mul_add_c(a[2],b[3],c3,c1,c2); */
1485 mflo t_1
1486 mfhi t_2
1487 daddu c_3,t_1
1488 sltu AT,c_3,t_1
1489 daddu t_2,AT
1490 daddu c_1,t_2
1491 dmultu a_3,b_2 /* mul_add_c(a[3],b[2],c3,c1,c2); */
1492 mflo t_1
1493 mfhi t_2
1494 daddu c_3,t_1
1495 sltu AT,c_3,t_1
1496 daddu t_2,AT
1497 daddu c_1,t_2
1498 sltu c_2,c_1,t_2
1499 sd c_3,40(a0)
1500
1501 dmultu a_3,b_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */
1502 mflo t_1
1503 mfhi t_2
1504 daddu c_1,t_1
1505 sltu AT,c_1,t_1
1506 daddu t_2,AT
1507 daddu c_2,t_2
1508 sd c_1,48(a0)
1509 sd c_2,56(a0)
1510
1511 jr ra
1512END(bn_mul_comba4)
1513
1514#undef a_4
1515#undef a_5
1516#undef a_6
1517#undef a_7
1518#define a_4 b_0
1519#define a_5 b_1
1520#define a_6 b_2
1521#define a_7 b_3
1522
1523.align 5
1524LEAF(bn_sqr_comba8)
1525 .set reorder
1526 ld a_0,0(a1)
1527 ld a_1,8(a1)
1528 ld a_2,16(a1)
1529 ld a_3,24(a1)
1530
1531 dmultu a_0,a_0 /* mul_add_c(a[0],b[0],c1,c2,c3); */
1532 ld a_4,32(a1)
1533 ld a_5,40(a1)
1534 ld a_6,48(a1)
1535 ld a_7,56(a1)
1536 mflo c_1
1537 mfhi c_2
1538 sd c_1,0(a0)
1539
1540 dmultu a_0,a_1 /* mul_add_c2(a[0],b[1],c2,c3,c1); */
1541 mflo t_1
1542 mfhi t_2
1543 daddu c_2,t_1
1544 sltu AT,c_2,t_1
1545 daddu c_3,t_2,AT
1546 daddu c_2,t_1
1547 sltu AT,c_2,t_1
1548 daddu t_2,AT
1549 daddu c_3,t_2
1550 sltu c_1,c_3,t_2
1551 sd c_2,8(a0)
1552
1553 dmultu a_2,a_0 /* mul_add_c2(a[2],b[0],c3,c1,c2); */
1554 mflo t_1
1555 mfhi t_2
1556 daddu c_3,t_1
1557 sltu AT,c_3,t_1
1558 daddu a2,t_2,AT
1559 daddu c_1,a2
1560 daddu c_3,t_1
1561 sltu AT,c_3,t_1
1562 daddu t_2,AT
1563 daddu c_1,t_2
1564 sltu c_2,c_1,t_2
1565 dmultu a_1,a_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */
1566 mflo t_1
1567 mfhi t_2
1568 daddu c_3,t_1
1569 sltu AT,c_3,t_1
1570 daddu t_2,AT
1571 daddu c_1,t_2
1572 sltu AT,c_1,t_2
1573 daddu c_2,AT
1574 sd c_3,16(a0)
1575
1576 dmultu a_0,a_3 /* mul_add_c2(a[0],b[3],c1,c2,c3); */
1577 mflo t_1
1578 mfhi t_2
1579 daddu c_1,t_1
1580 sltu AT,c_1,t_1
1581 daddu a2,t_2,AT
1582 daddu c_2,a2
1583 daddu c_1,t_1
1584 sltu AT,c_1,t_1
1585 daddu t_2,AT
1586 daddu c_2,t_2
1587 sltu c_3,c_2,t_2
1588 dmultu a_1,a_2 /* mul_add_c2(a[1],b[2],c1,c2,c3); */
1589 mflo t_1
1590 mfhi t_2
1591 daddu c_1,t_1
1592 sltu AT,c_1,t_1
1593 daddu a2,t_2,AT
1594 daddu c_2,a2
1595 sltu AT,c_2,a2
1596 daddu c_3,AT
1597 daddu c_1,t_1
1598 sltu AT,c_1,t_1
1599 daddu t_2,AT
1600 daddu c_2,t_2
1601 sltu AT,c_2,t_2
1602 daddu c_3,AT
1603 sd c_1,24(a0)
1604
1605 dmultu a_4,a_0 /* mul_add_c2(a[4],b[0],c2,c3,c1); */
1606 mflo t_1
1607 mfhi t_2
1608 daddu c_2,t_1
1609 sltu AT,c_2,t_1
1610 daddu a2,t_2,AT
1611 daddu c_3,a2
1612 daddu c_2,t_1
1613 sltu AT,c_2,t_1
1614 daddu t_2,AT
1615 daddu c_3,t_2
1616 sltu c_1,c_3,t_2
1617 dmultu a_3,a_1 /* mul_add_c2(a[3],b[1],c2,c3,c1); */
1618 mflo t_1
1619 mfhi t_2
1620 daddu c_2,t_1
1621 sltu AT,c_2,t_1
1622 daddu a2,t_2,AT
1623 daddu c_3,a2
1624 sltu AT,c_3,a2
1625 daddu c_1,AT
1626 daddu c_2,t_1
1627 sltu AT,c_2,t_1
1628 daddu t_2,AT
1629 daddu c_3,t_2
1630 sltu AT,c_3,t_2
1631 daddu c_1,AT
1632 dmultu a_2,a_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */
1633 mflo t_1
1634 mfhi t_2
1635 daddu c_2,t_1
1636 sltu AT,c_2,t_1
1637 daddu t_2,AT
1638 daddu c_3,t_2
1639 sltu AT,c_3,t_2
1640 daddu c_1,AT
1641 sd c_2,32(a0)
1642
1643 dmultu a_0,a_5 /* mul_add_c2(a[0],b[5],c3,c1,c2); */
1644 mflo t_1
1645 mfhi t_2
1646 daddu c_3,t_1
1647 sltu AT,c_3,t_1
1648 daddu a2,t_2,AT
1649 daddu c_1,a2
1650 daddu c_3,t_1
1651 sltu AT,c_3,t_1
1652 daddu t_2,AT
1653 daddu c_1,t_2
1654 sltu c_2,c_1,t_2
1655 dmultu a_1,a_4 /* mul_add_c2(a[1],b[4],c3,c1,c2); */
1656 mflo t_1
1657 mfhi t_2
1658 daddu c_3,t_1
1659 sltu AT,c_3,t_1
1660 daddu a2,t_2,AT
1661 daddu c_1,a2
1662 sltu AT,c_1,a2
1663 daddu c_2,AT
1664 daddu c_3,t_1
1665 sltu AT,c_3,t_1
1666 daddu t_2,AT
1667 daddu c_1,t_2
1668 sltu AT,c_1,t_2
1669 daddu c_2,AT
1670 dmultu a_2,a_3 /* mul_add_c2(a[2],b[3],c3,c1,c2); */
1671 mflo t_1
1672 mfhi t_2
1673 daddu c_3,t_1
1674 sltu AT,c_3,t_1
1675 daddu a2,t_2,AT
1676 daddu c_1,a2
1677 sltu AT,c_1,a2
1678 daddu c_2,AT
1679 daddu c_3,t_1
1680 sltu AT,c_3,t_1
1681 daddu t_2,AT
1682 daddu c_1,t_2
1683 sltu AT,c_1,t_2
1684 daddu c_2,AT
1685 sd c_3,40(a0)
1686
1687 dmultu a_6,a_0 /* mul_add_c2(a[6],b[0],c1,c2,c3); */
1688 mflo t_1
1689 mfhi t_2
1690 daddu c_1,t_1
1691 sltu AT,c_1,t_1
1692 daddu a2,t_2,AT
1693 daddu c_2,a2
1694 daddu c_1,t_1
1695 sltu AT,c_1,t_1
1696 daddu t_2,AT
1697 daddu c_2,t_2
1698 sltu c_3,c_2,t_2
1699 dmultu a_5,a_1 /* mul_add_c2(a[5],b[1],c1,c2,c3); */
1700 mflo t_1
1701 mfhi t_2
1702 daddu c_1,t_1
1703 sltu AT,c_1,t_1
1704 daddu a2,t_2,AT
1705 daddu c_2,a2
1706 sltu AT,c_2,a2
1707 daddu c_3,AT
1708 daddu c_1,t_1
1709 sltu AT,c_1,t_1
1710 daddu t_2,AT
1711 daddu c_2,t_2
1712 sltu AT,c_2,t_2
1713 daddu c_3,AT
1714 dmultu a_4,a_2 /* mul_add_c2(a[4],b[2],c1,c2,c3); */
1715 mflo t_1
1716 mfhi t_2
1717 daddu c_1,t_1
1718 sltu AT,c_1,t_1
1719 daddu a2,t_2,AT
1720 daddu c_2,a2
1721 sltu AT,c_2,a2
1722 daddu c_3,AT
1723 daddu c_1,t_1
1724 sltu AT,c_1,t_1
1725 daddu t_2,AT
1726 daddu c_2,t_2
1727 sltu AT,c_2,t_2
1728 daddu c_3,AT
1729 dmultu a_3,a_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */
1730 mflo t_1
1731 mfhi t_2
1732 daddu c_1,t_1
1733 sltu AT,c_1,t_1
1734 daddu t_2,AT
1735 daddu c_2,t_2
1736 sltu AT,c_2,t_2
1737 daddu c_3,AT
1738 sd c_1,48(a0)
1739
1740 dmultu a_0,a_7 /* mul_add_c2(a[0],b[7],c2,c3,c1); */
1741 mflo t_1
1742 mfhi t_2
1743 daddu c_2,t_1
1744 sltu AT,c_2,t_1
1745 daddu a2,t_2,AT
1746 daddu c_3,a2
1747 daddu c_2,t_1
1748 sltu AT,c_2,t_1
1749 daddu t_2,AT
1750 daddu c_3,t_2
1751 sltu c_1,c_3,t_2
1752 dmultu a_1,a_6 /* mul_add_c2(a[1],b[6],c2,c3,c1); */
1753 mflo t_1
1754 mfhi t_2
1755 daddu c_2,t_1
1756 sltu AT,c_2,t_1
1757 daddu a2,t_2,AT
1758 daddu c_3,a2
1759 sltu AT,c_3,a2
1760 daddu c_1,AT
1761 daddu c_2,t_1
1762 sltu AT,c_2,t_1
1763 daddu t_2,AT
1764 daddu c_3,t_2
1765 sltu AT,c_3,t_2
1766 daddu c_1,AT
1767 dmultu a_2,a_5 /* mul_add_c2(a[2],b[5],c2,c3,c1); */
1768 mflo t_1
1769 mfhi t_2
1770 daddu c_2,t_1
1771 sltu AT,c_2,t_1
1772 daddu a2,t_2,AT
1773 daddu c_3,a2
1774 sltu AT,c_3,a2
1775 daddu c_1,AT
1776 daddu c_2,t_1
1777 sltu AT,c_2,t_1
1778 daddu t_2,AT
1779 daddu c_3,t_2
1780 sltu AT,c_3,t_2
1781 daddu c_1,AT
1782 dmultu a_3,a_4 /* mul_add_c2(a[3],b[4],c2,c3,c1); */
1783 mflo t_1
1784 mfhi t_2
1785 daddu c_2,t_1
1786 sltu AT,c_2,t_1
1787 daddu a2,t_2,AT
1788 daddu c_3,a2
1789 sltu AT,c_3,a2
1790 daddu c_1,AT
1791 daddu c_2,t_1
1792 sltu AT,c_2,t_1
1793 daddu t_2,AT
1794 daddu c_3,t_2
1795 sltu AT,c_3,t_2
1796 daddu c_1,AT
1797 sd c_2,56(a0)
1798
1799 dmultu a_7,a_1 /* mul_add_c2(a[7],b[1],c3,c1,c2); */
1800 mflo t_1
1801 mfhi t_2
1802 daddu c_3,t_1
1803 sltu AT,c_3,t_1
1804 daddu a2,t_2,AT
1805 daddu c_1,a2
1806 daddu c_3,t_1
1807 sltu AT,c_3,t_1
1808 daddu t_2,AT
1809 daddu c_1,t_2
1810 sltu c_2,c_1,t_2
1811 dmultu a_6,a_2 /* mul_add_c2(a[6],b[2],c3,c1,c2); */
1812 mflo t_1
1813 mfhi t_2
1814 daddu c_3,t_1
1815 sltu AT,c_3,t_1
1816 daddu a2,t_2,AT
1817 daddu c_1,a2
1818 sltu AT,c_1,a2
1819 daddu c_2,AT
1820 daddu c_3,t_1
1821 sltu AT,c_3,t_1
1822 daddu t_2,AT
1823 daddu c_1,t_2
1824 sltu AT,c_1,t_2
1825 daddu c_2,AT
1826 dmultu a_5,a_3 /* mul_add_c2(a[5],b[3],c3,c1,c2); */
1827 mflo t_1
1828 mfhi t_2
1829 daddu c_3,t_1
1830 sltu AT,c_3,t_1
1831 daddu a2,t_2,AT
1832 daddu c_1,a2
1833 sltu AT,c_1,a2
1834 daddu c_2,AT
1835 daddu c_3,t_1
1836 sltu AT,c_3,t_1
1837 daddu t_2,AT
1838 daddu c_1,t_2
1839 sltu AT,c_1,t_2
1840 daddu c_2,AT
1841 dmultu a_4,a_4 /* mul_add_c(a[4],b[4],c3,c1,c2); */
1842 mflo t_1
1843 mfhi t_2
1844 daddu c_3,t_1
1845 sltu AT,c_3,t_1
1846 daddu t_2,AT
1847 daddu c_1,t_2
1848 sltu AT,c_1,t_2
1849 daddu c_2,AT
1850 sd c_3,64(a0)
1851
1852 dmultu a_2,a_7 /* mul_add_c2(a[2],b[7],c1,c2,c3); */
1853 mflo t_1
1854 mfhi t_2
1855 daddu c_1,t_1
1856 sltu AT,c_1,t_1
1857 daddu a2,t_2,AT
1858 daddu c_2,a2
1859 daddu c_1,t_1
1860 sltu AT,c_1,t_1
1861 daddu t_2,AT
1862 daddu c_2,t_2
1863 sltu c_3,c_2,t_2
1864 dmultu a_3,a_6 /* mul_add_c2(a[3],b[6],c1,c2,c3); */
1865 mflo t_1
1866 mfhi t_2
1867 daddu c_1,t_1
1868 sltu AT,c_1,t_1
1869 daddu a2,t_2,AT
1870 daddu c_2,a2
1871 sltu AT,c_2,a2
1872 daddu c_3,AT
1873 daddu c_1,t_1
1874 sltu AT,c_1,t_1
1875 daddu t_2,AT
1876 daddu c_2,t_2
1877 sltu AT,c_2,t_2
1878 daddu c_3,AT
1879 dmultu a_4,a_5 /* mul_add_c2(a[4],b[5],c1,c2,c3); */
1880 mflo t_1
1881 mfhi t_2
1882 daddu c_1,t_1
1883 sltu AT,c_1,t_1
1884 daddu a2,t_2,AT
1885 daddu c_2,a2
1886 sltu AT,c_2,a2
1887 daddu c_3,AT
1888 daddu c_1,t_1
1889 sltu AT,c_1,t_1
1890 daddu t_2,AT
1891 daddu c_2,t_2
1892 sltu AT,c_2,t_2
1893 daddu c_3,AT
1894 sd c_1,72(a0)
1895
1896 dmultu a_7,a_3 /* mul_add_c2(a[7],b[3],c2,c3,c1); */
1897 mflo t_1
1898 mfhi t_2
1899 daddu c_2,t_1
1900 sltu AT,c_2,t_1
1901 daddu a2,t_2,AT
1902 daddu c_3,a2
1903 daddu c_2,t_1
1904 sltu AT,c_2,t_1
1905 daddu t_2,AT
1906 daddu c_3,t_2
1907 sltu c_1,c_3,t_2
1908 dmultu a_6,a_4 /* mul_add_c2(a[6],b[4],c2,c3,c1); */
1909 mflo t_1
1910 mfhi t_2
1911 daddu c_2,t_1
1912 sltu AT,c_2,t_1
1913 daddu a2,t_2,AT
1914 daddu c_3,a2
1915 sltu AT,c_3,a2
1916 daddu c_1,AT
1917 daddu c_2,t_1
1918 sltu AT,c_2,t_1
1919 daddu t_2,AT
1920 daddu c_3,t_2
1921 sltu AT,c_3,t_2
1922 daddu c_1,AT
1923 dmultu a_5,a_5 /* mul_add_c(a[5],b[5],c2,c3,c1); */
1924 mflo t_1
1925 mfhi t_2
1926 daddu c_2,t_1
1927 sltu AT,c_2,t_1
1928 daddu t_2,AT
1929 daddu c_3,t_2
1930 sltu AT,c_3,t_2
1931 daddu c_1,AT
1932 sd c_2,80(a0)
1933
1934 dmultu a_4,a_7 /* mul_add_c2(a[4],b[7],c3,c1,c2); */
1935 mflo t_1
1936 mfhi t_2
1937 daddu c_3,t_1
1938 sltu AT,c_3,t_1
1939 daddu a2,t_2,AT
1940 daddu c_1,a2
1941 daddu c_3,t_1
1942 sltu AT,c_3,t_1
1943 daddu t_2,AT
1944 daddu c_1,t_2
1945 sltu c_2,c_1,t_2
1946 dmultu a_5,a_6 /* mul_add_c2(a[5],b[6],c3,c1,c2); */
1947 mflo t_1
1948 mfhi t_2
1949 daddu c_3,t_1
1950 sltu AT,c_3,t_1
1951 daddu a2,t_2,AT
1952 daddu c_1,a2
1953 sltu AT,c_1,a2
1954 daddu c_2,AT
1955 daddu c_3,t_1
1956 sltu AT,c_3,t_1
1957 daddu t_2,AT
1958 daddu c_1,t_2
1959 sltu AT,c_1,t_2
1960 daddu c_2,AT
1961 sd c_3,88(a0)
1962
1963 dmultu a_7,a_5 /* mul_add_c2(a[7],b[5],c1,c2,c3); */
1964 mflo t_1
1965 mfhi t_2
1966 daddu c_1,t_1
1967 sltu AT,c_1,t_1
1968 daddu a2,t_2,AT
1969 daddu c_2,a2
1970 daddu c_1,t_1
1971 sltu AT,c_1,t_1
1972 daddu t_2,AT
1973 daddu c_2,t_2
1974 sltu c_3,c_2,t_2
1975 dmultu a_6,a_6 /* mul_add_c(a[6],b[6],c1,c2,c3); */
1976 mflo t_1
1977 mfhi t_2
1978 daddu c_1,t_1
1979 sltu AT,c_1,t_1
1980 daddu t_2,AT
1981 daddu c_2,t_2
1982 sltu AT,c_2,t_2
1983 daddu c_3,AT
1984 sd c_1,96(a0)
1985
1986 dmultu a_6,a_7 /* mul_add_c2(a[6],b[7],c2,c3,c1); */
1987 mflo t_1
1988 mfhi t_2
1989 daddu c_2,t_1
1990 sltu AT,c_2,t_1
1991 daddu a2,t_2,AT
1992 daddu c_3,a2
1993 daddu c_2,t_1
1994 sltu AT,c_2,t_1
1995 daddu t_2,AT
1996 daddu c_3,t_2
1997 sltu c_1,c_3,t_2
1998 sd c_2,104(a0)
1999
2000 dmultu a_7,a_7 /* mul_add_c(a[7],b[7],c3,c1,c2); */
2001 mflo t_1
2002 mfhi t_2
2003 daddu c_3,t_1
2004 sltu AT,c_3,t_1
2005 daddu t_2,AT
2006 daddu c_1,t_2
2007 sd c_3,112(a0)
2008 sd c_1,120(a0)
2009
2010 jr ra
2011END(bn_sqr_comba8)
2012
2013.align 5
2014LEAF(bn_sqr_comba4)
2015 .set reorder
2016 ld a_0,0(a1)
2017 ld a_1,8(a1)
2018 ld a_2,16(a1)
2019 ld a_3,24(a1)
2020 dmultu a_0,a_0 /* mul_add_c(a[0],b[0],c1,c2,c3); */
2021 mflo c_1
2022 mfhi c_2
2023 sd c_1,0(a0)
2024
2025 dmultu a_0,a_1 /* mul_add_c2(a[0],b[1],c2,c3,c1); */
2026 mflo t_1
2027 mfhi t_2
2028 daddu c_2,t_1
2029 sltu AT,c_2,t_1
2030 daddu c_3,t_2,AT
2031 daddu c_2,t_1
2032 sltu AT,c_2,t_1
2033 daddu t_2,AT
2034 daddu c_3,t_2
2035 sltu c_1,c_3,t_2
2036 sd c_2,8(a0)
2037
2038 dmultu a_2,a_0 /* mul_add_c2(a[2],b[0],c3,c1,c2); */
2039 mflo t_1
2040 mfhi t_2
2041 daddu c_3,t_1
2042 sltu AT,c_3,t_1
2043 daddu a2,t_2,AT
2044 daddu c_1,a2
2045 daddu c_3,t_1
2046 sltu AT,c_3,t_1
2047 daddu t_2,AT
2048 daddu c_1,t_2
2049 sltu c_2,c_1,t_2
2050 dmultu a_1,a_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */
2051 mflo t_1
2052 mfhi t_2
2053 daddu c_3,t_1
2054 sltu AT,c_3,t_1
2055 daddu t_2,AT
2056 daddu c_1,t_2
2057 sltu AT,c_1,t_2
2058 daddu c_2,AT
2059 sd c_3,16(a0)
2060
2061 dmultu a_0,a_3 /* mul_add_c2(a[0],b[3],c1,c2,c3); */
2062 mflo t_1
2063 mfhi t_2
2064 daddu c_1,t_1
2065 sltu AT,c_1,t_1
2066 daddu a2,t_2,AT
2067 daddu c_2,a2
2068 daddu c_1,t_1
2069 sltu AT,c_1,t_1
2070 daddu t_2,AT
2071 daddu c_2,t_2
2072 sltu c_3,c_2,t_2
2073 dmultu a_1,a_2 /* mul_add_c(a2[1],b[2],c1,c2,c3); */
2074 mflo t_1
2075 mfhi t_2
2076 daddu c_1,t_1
2077 sltu AT,c_1,t_1
2078 daddu a2,t_2,AT
2079 daddu c_2,a2
2080 sltu AT,c_2,a2
2081 daddu c_3,AT
2082 daddu c_1,t_1
2083 sltu AT,c_1,t_1
2084 daddu t_2,AT
2085 daddu c_2,t_2
2086 sltu AT,c_2,t_2
2087 daddu c_3,AT
2088 sd c_1,24(a0)
2089
2090 dmultu a_3,a_1 /* mul_add_c2(a[3],b[1],c2,c3,c1); */
2091 mflo t_1
2092 mfhi t_2
2093 daddu c_2,t_1
2094 sltu AT,c_2,t_1
2095 daddu a2,t_2,AT
2096 daddu c_3,a2
2097 daddu c_2,t_1
2098 sltu AT,c_2,t_1
2099 daddu t_2,AT
2100 daddu c_3,t_2
2101 sltu c_1,c_3,t_2
2102 dmultu a_2,a_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */
2103 mflo t_1
2104 mfhi t_2
2105 daddu c_2,t_1
2106 sltu AT,c_2,t_1
2107 daddu t_2,AT
2108 daddu c_3,t_2
2109 sltu AT,c_3,t_2
2110 daddu c_1,AT
2111 sd c_2,32(a0)
2112
2113 dmultu a_2,a_3 /* mul_add_c2(a[2],b[3],c3,c1,c2); */
2114 mflo t_1
2115 mfhi t_2
2116 daddu c_3,t_1
2117 sltu AT,c_3,t_1
2118 daddu a2,t_2,AT
2119 daddu c_1,a2
2120 daddu c_3,t_1
2121 sltu AT,c_3,t_1
2122 daddu t_2,AT
2123 daddu c_1,t_2
2124 sltu c_2,c_1,t_2
2125 sd c_3,40(a0)
2126
2127 dmultu a_3,a_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */
2128 mflo t_1
2129 mfhi t_2
2130 daddu c_1,t_1
2131 sltu AT,c_1,t_1
2132 daddu t_2,AT
2133 daddu c_2,t_2
2134 sd c_1,48(a0)
2135 sd c_2,56(a0)
2136
2137 jr ra
2138END(bn_sqr_comba4)
diff --git a/src/lib/libcrypto/bn/asm/vms.mar b/src/lib/libcrypto/bn/asm/vms.mar
new file mode 100644
index 0000000000..ac9d57d7b0
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/vms.mar
@@ -0,0 +1,6695 @@
1 .title vax_bn_mul_add_word unsigned multiply & add, 32*32+32+32=>64
2;
3; w.j.m. 15-jan-1999
4;
5; it's magic ...
6;
7; ULONG bn_mul_add_words(ULONG r[],ULONG a[],int n,ULONG w) {
8; ULONG c = 0;
9; int i;
10; for(i = 0; i < n; i++) <c,r[i]> := r[i] + c + a[i] * w ;
11; return c;
12; }
13
14r=4 ;(AP)
15a=8 ;(AP)
16n=12 ;(AP) n by value (input)
17w=16 ;(AP) w by value (input)
18
19
20 .psect code,nowrt
21
22.entry bn_mul_add_words,^m<r2,r3,r4,r5,r6>
23
24 moval @r(ap),r2
25 moval @a(ap),r3
26 movl n(ap),r4 ; assumed >0 by C code
27 movl w(ap),r5
28 clrl r6 ; c
29
300$:
31 emul r5,(r3),(r2),r0 ; w, a[], r[] considered signed
32
33 ; fixup for "negative" r[]
34 tstl (r2)
35 bgeq 10$
36 incl r1
3710$:
38
39 ; add in c
40 addl2 r6,r0
41 adwc #0,r1
42
43 ; combined fixup for "negative" w, a[]
44 tstl r5
45 bgeq 20$
46 addl2 (r3),r1
4720$:
48 tstl (r3)
49 bgeq 30$
50 addl2 r5,r1
5130$:
52
53 movl r0,(r2)+ ; store lo result in r[] & advance
54 addl #4,r3 ; advance a[]
55 movl r1,r6 ; store hi result => c
56
57 sobgtr r4,0$
58
59 movl r6,r0 ; return c
60 ret
61
62 .title vax_bn_mul_word unsigned multiply & add, 32*32+32=>64
63;
64; w.j.m. 15-jan-1999
65;
66; it's magic ...
67;
68; ULONG bn_mul_words(ULONG r[],ULONG a[],int n,ULONG w) {
69; ULONG c = 0;
70; int i;
71; for(i = 0; i < num; i++) <c,r[i]> := a[i] * w + c ;
72; return(c);
73; }
74
75r=4 ;(AP)
76a=8 ;(AP)
77n=12 ;(AP) n by value (input)
78w=16 ;(AP) w by value (input)
79
80
81 .psect code,nowrt
82
83.entry bn_mul_words,^m<r2,r3,r4,r5,r6>
84
85 moval @r(ap),r2 ; r2 -> r[]
86 moval @a(ap),r3 ; r3 -> a[]
87 movl n(ap),r4 ; r4 = loop count (assumed >0 by C code)
88 movl w(ap),r5 ; r5 = w
89 clrl r6 ; r6 = c
90
910$:
92 ; <r1,r0> := w * a[] + c
93 emul r5,(r3),r6,r0 ; w, a[], c considered signed
94
95 ; fixup for "negative" c
96 tstl r6 ; c
97 bgeq 10$
98 incl r1
9910$:
100
101 ; combined fixup for "negative" w, a[]
102 tstl r5 ; w
103 bgeq 20$
104 addl2 (r3),r1 ; a[]
10520$:
106 tstl (r3) ; a[]
107 bgeq 30$
108 addl2 r5,r1 ; w
10930$:
110
111 movl r0,(r2)+ ; store lo result in r[] & advance
112 addl #4,r3 ; advance a[]
113 movl r1,r6 ; store hi result => c
114
115 sobgtr r4,0$
116
117 movl r6,r0 ; return c
118 ret
119
120 .title vax_bn_sqr_words unsigned square, 32*32=>64
121;
122; w.j.m. 15-jan-1999
123;
124; it's magic ...
125;
126; void bn_sqr_words(ULONG r[],ULONG a[],int n) {
127; int i;
128; for(i = 0; i < n; i++) <r[2*i+1],r[2*i]> := a[i] * a[i] ;
129; }
130
131r=4 ;(AP)
132a=8 ;(AP)
133n=12 ;(AP) n by value (input)
134
135
136 .psect code,nowrt
137
138.entry bn_sqr_words,^m<r2,r3,r4,r5>
139
140 moval @r(ap),r2 ; r2 -> r[]
141 moval @a(ap),r3 ; r3 -> a[]
142 movl n(ap),r4 ; r4 = n (assumed >0 by C code)
143
1440$:
145 movl (r3)+,r5 ; r5 = a[] & advance
146
147 ; <r1,r0> := a[] * a[]
148 emul r5,r5,#0,r0 ; a[] considered signed
149
150 ; fixup for "negative" a[]
151 tstl r5 ; a[]
152 bgeq 30$
153 addl2 r5,r1 ; a[]
154 addl2 r5,r1 ; a[]
15530$:
156
157 movl r0,(r2)+ ; store lo result in r[] & advance
158 movl r1,(r2)+ ; store hi result in r[] & advance
159
160 sobgtr r4,0$
161
162 movl #1,r0 ; return SS$_NORMAL
163 ret
164
165 .title (generated)
166
167 .psect code,nowrt
168
169.entry BN_DIV_WORDS,^m<r2,r3,r4,r5,r6,r7,r8,r9,r10>
170 subl2 #4,sp
171
172 clrl r9
173 movl #2,r8
174
175 tstl 12(ap)
176 bneq noname.2
177 mnegl #1,r10
178 brw noname.3
179 tstl r0
180 nop
181noname.2:
182
183 pushl 12(ap)
184 calls #1,BN_NUM_BITS_WORD
185 movl r0,r7
186
187 cmpl r7,#32
188 beql noname.4
189 ashl r7,#1,r2
190 cmpl 4(ap),r2
191 blequ noname.4
192
193 pushl r7
194 calls #1,BN_DIV_WORDS_ABORT
195noname.4:
196
197 subl3 r7,#32,r7
198
199 movl 12(ap),r2
200 cmpl 4(ap),r2
201 blssu noname.5
202 subl2 r2,4(ap)
203noname.5:
204
205 tstl r7
206 beql noname.6
207
208 ashl r7,r2,12(ap)
209
210 ashl r7,4(ap),r4
211 subl3 r7,#32,r3
212 subl3 r3,#32,r2
213 extzv r3,r2,8(ap),r2
214 bisl3 r4,r2,4(ap)
215
216 ashl r7,8(ap),8(ap)
217noname.6:
218
219 bicl3 #65535,12(ap),r2
220 extzv #16,#16,r2,r5
221
222 bicl3 #-65536,12(ap),r6
223
224noname.7:
225
226 moval 4(ap),r2
227 movzwl 2(r2),r0
228 cmpl r0,r5
229 bneq noname.8
230
231 movzwl #65535,r4
232 brb noname.9
233noname.8:
234
235 clrl r1
236 movl (r2),r0
237 movl r5,r2
238 bgeq vcg.1
239 cmpl r2,r0
240 bgtru vcg.2
241 incl r1
242 brb vcg.2
243 nop
244vcg.1:
245 ediv r2,r0,r1,r0
246vcg.2:
247 movl r1,r4
248noname.9:
249
250noname.10:
251
252 mull3 r5,r4,r0
253 subl3 r0,4(ap),r3
254
255 bicl3 #65535,r3,r0
256 bneq noname.13
257 mull3 r6,r4,r2
258 ashl #16,r3,r1
259 bicl3 #65535,8(ap),r0
260 extzv #16,#16,r0,r0
261 addl2 r0,r1
262 cmpl r2,r1
263 bgtru noname.12
264noname.11:
265
266 brb noname.13
267 nop
268noname.12:
269
270 decl r4
271 brb noname.10
272noname.13:
273
274 mull3 r5,r4,r1
275
276 mull3 r6,r4,r0
277
278 extzv #16,#16,r0,r3
279
280 ashl #16,r0,r2
281 bicl3 #65535,r2,r0
282
283 addl2 r3,r1
284
285 moval 8(ap),r3
286 cmpl (r3),r0
287 bgequ noname.15
288 incl r1
289noname.15:
290
291 subl2 r0,(r3)
292
293 cmpl 4(ap),r1
294 bgequ noname.16
295
296 addl2 12(ap),4(ap)
297
298 decl r4
299noname.16:
300
301 subl2 r1,4(ap)
302
303 decl r8
304 beql noname.18
305noname.17:
306
307 ashl #16,r4,r9
308
309 ashl #16,4(ap),r2
310 movzwl 2(r3),r0
311 bisl2 r0,r2
312 bicl3 #0,r2,4(ap)
313
314 bicl3 #-65536,(r3),r0
315 ashl #16,r0,(r3)
316 brw noname.7
317 nop
318noname.18:
319
320 bisl2 r4,r9
321
322 movl r9,r10
323
324noname.3:
325 movl r10,r0
326 ret
327 tstl r0
328
329
330 .psect code,nowrt
331
332.entry BN_ADD_WORDS,^m<r2,r3,r4,r5,r6,r7>
333
334 tstl 16(ap)
335 bgtr noname.21
336 clrl r7
337 brw noname.22
338noname.21:
339
340 clrl r4
341
342 tstl r0
343noname.23:
344
345 movl 8(ap),r6
346 addl3 r4,(r6),r2
347
348 bicl2 #0,r2
349
350 clrl r0
351 cmpl r2,r4
352 bgequ vcg.3
353 incl r0
354vcg.3:
355 movl r0,r4
356
357 movl 12(ap),r5
358 addl3 (r5),r2,r1
359 bicl2 #0,r1
360
361 clrl r0
362 cmpl r1,r2
363 bgequ vcg.4
364 incl r0
365vcg.4:
366 addl2 r0,r4
367
368 movl 4(ap),r3
369 movl r1,(r3)
370
371 decl 16(ap)
372 bgtr gen.1
373 brw noname.25
374gen.1:
375noname.24:
376
377 addl3 r4,4(r6),r2
378
379 bicl2 #0,r2
380
381 clrl r0
382 cmpl r2,r4
383 bgequ vcg.5
384 incl r0
385vcg.5:
386 movl r0,r4
387
388 addl3 4(r5),r2,r1
389 bicl2 #0,r1
390
391 clrl r0
392 cmpl r1,r2
393 bgequ vcg.6
394 incl r0
395vcg.6:
396 addl2 r0,r4
397
398 movl r1,4(r3)
399
400 decl 16(ap)
401 bleq noname.25
402noname.26:
403
404 addl3 r4,8(r6),r2
405
406 bicl2 #0,r2
407
408 clrl r0
409 cmpl r2,r4
410 bgequ vcg.7
411 incl r0
412vcg.7:
413 movl r0,r4
414
415 addl3 8(r5),r2,r1
416 bicl2 #0,r1
417
418 clrl r0
419 cmpl r1,r2
420 bgequ vcg.8
421 incl r0
422vcg.8:
423 addl2 r0,r4
424
425 movl r1,8(r3)
426
427 decl 16(ap)
428 bleq noname.25
429noname.27:
430
431 addl3 r4,12(r6),r2
432
433 bicl2 #0,r2
434
435 clrl r0
436 cmpl r2,r4
437 bgequ vcg.9
438 incl r0
439vcg.9:
440 movl r0,r4
441
442 addl3 12(r5),r2,r1
443 bicl2 #0,r1
444
445 clrl r0
446 cmpl r1,r2
447 bgequ vcg.10
448 incl r0
449vcg.10:
450 addl2 r0,r4
451
452 movl r1,12(r3)
453
454 decl 16(ap)
455 bleq noname.25
456noname.28:
457
458 addl3 #16,r6,8(ap)
459
460 addl3 #16,r5,12(ap)
461
462 addl3 #16,r3,4(ap)
463 brw noname.23
464 tstl r0
465noname.25:
466
467 movl r4,r7
468
469noname.22:
470 movl r7,r0
471 ret
472 nop
473
474
475
476;r=4 ;(AP)
477;a=8 ;(AP)
478;b=12 ;(AP)
479;n=16 ;(AP) n by value (input)
480
481 .psect code,nowrt
482
483.entry BN_SUB_WORDS,^m<r2,r3,r4,r5,r6,r7>
484
485 clrl r6
486
487 tstl 16(ap)
488 bgtr noname.31
489 clrl r7
490 brw noname.32
491 tstl r0
492noname.31:
493
494noname.33:
495
496 movl 8(ap),r5
497 movl (r5),r1
498 movl 12(ap),r4
499 movl (r4),r2
500
501 movl 4(ap),r3
502 subl3 r2,r1,r0
503 subl2 r6,r0
504 bicl3 #0,r0,(r3)
505
506 cmpl r1,r2
507 beql noname.34
508 clrl r0
509 cmpl r1,r2
510 bgequ vcg.11
511 incl r0
512vcg.11:
513 movl r0,r6
514noname.34:
515
516 decl 16(ap)
517 bgtr gen.2
518 brw noname.36
519gen.2:
520noname.35:
521
522 movl 4(r5),r2
523 movl 4(r4),r1
524
525 subl3 r1,r2,r0
526 subl2 r6,r0
527 bicl3 #0,r0,4(r3)
528
529 cmpl r2,r1
530 beql noname.37
531 clrl r0
532 cmpl r2,r1
533 bgequ vcg.12
534 incl r0
535vcg.12:
536 movl r0,r6
537noname.37:
538
539 decl 16(ap)
540 bleq noname.36
541noname.38:
542
543 movl 8(r5),r1
544 movl 8(r4),r2
545
546 subl3 r2,r1,r0
547 subl2 r6,r0
548 bicl3 #0,r0,8(r3)
549
550 cmpl r1,r2
551 beql noname.39
552 clrl r0
553 cmpl r1,r2
554 bgequ vcg.13
555 incl r0
556vcg.13:
557 movl r0,r6
558noname.39:
559
560 decl 16(ap)
561 bleq noname.36
562noname.40:
563
564 movl 12(r5),r1
565 movl 12(r4),r2
566
567 subl3 r2,r1,r0
568 subl2 r6,r0
569 bicl3 #0,r0,12(r3)
570
571 cmpl r1,r2
572 beql noname.41
573 clrl r0
574 cmpl r1,r2
575 bgequ vcg.14
576 incl r0
577vcg.14:
578 movl r0,r6
579noname.41:
580
581 decl 16(ap)
582 bleq noname.36
583noname.42:
584
585 addl3 #16,r5,8(ap)
586
587 addl3 #16,r4,12(ap)
588
589 addl3 #16,r3,4(ap)
590 brw noname.33
591 tstl r0
592noname.36:
593
594 movl r6,r7
595
596noname.32:
597 movl r7,r0
598 ret
599 nop
600
601
602
603;r=4 ;(AP)
604;a=8 ;(AP)
605;b=12 ;(AP)
606;n=16 ;(AP) n by value (input)
607
608 .psect code,nowrt
609
610.entry BN_MUL_COMBA8,^m<r2,r3,r4,r5,r6,r7,r8,r9,r10,r11>
611 movab -924(sp),sp
612 clrq r8
613
614 clrl r10
615
616 movl 8(ap),r6
617 movzwl 2(r6),r3
618 movl 12(ap),r7
619 bicl3 #-65536,(r7),r2
620 movzwl 2(r7),r0
621 bicl2 #-65536,r0
622 bicl3 #-65536,(r6),-12(fp)
623 bicl3 #-65536,r3,-16(fp)
624 mull3 r0,-12(fp),-4(fp)
625 mull2 r2,-12(fp)
626 mull3 r2,-16(fp),-8(fp)
627 mull2 r0,-16(fp)
628 addl3 -4(fp),-8(fp),r0
629 bicl3 #0,r0,-4(fp)
630 cmpl -4(fp),-8(fp)
631 bgequ noname.45
632 addl2 #65536,-16(fp)
633noname.45:
634 movzwl -2(fp),r0
635 bicl2 #-65536,r0
636 addl2 r0,-16(fp)
637 bicl3 #-65536,-4(fp),r0
638 ashl #16,r0,-8(fp)
639 addl3 -8(fp),-12(fp),r0
640 bicl3 #0,r0,-12(fp)
641 cmpl -12(fp),-8(fp)
642 bgequ noname.46
643 incl -16(fp)
644noname.46:
645 movl -12(fp),r1
646 movl -16(fp),r2
647 addl2 r1,r9
648 bicl2 #0,r9
649 cmpl r9,r1
650 bgequ noname.47
651 incl r2
652noname.47:
653 addl2 r2,r8
654 bicl2 #0,r8
655 cmpl r8,r2
656 bgequ noname.48
657 incl r10
658noname.48:
659
660 movl 4(ap),r11
661 movl r9,(r11)
662
663 clrl r9
664
665 movzwl 2(r6),r2
666 bicl3 #-65536,4(r7),r3
667 movzwl 6(r7),r0
668 bicl2 #-65536,r0
669 bicl3 #-65536,(r6),-28(fp)
670 bicl3 #-65536,r2,-32(fp)
671 mull3 r0,-28(fp),-20(fp)
672 mull2 r3,-28(fp)
673 mull3 r3,-32(fp),-24(fp)
674 mull2 r0,-32(fp)
675 addl3 -20(fp),-24(fp),r0
676 bicl3 #0,r0,-20(fp)
677 cmpl -20(fp),-24(fp)
678 bgequ noname.49
679 addl2 #65536,-32(fp)
680noname.49:
681 movzwl -18(fp),r0
682 bicl2 #-65536,r0
683 addl2 r0,-32(fp)
684 bicl3 #-65536,-20(fp),r0
685 ashl #16,r0,-24(fp)
686 addl3 -24(fp),-28(fp),r0
687 bicl3 #0,r0,-28(fp)
688 cmpl -28(fp),-24(fp)
689 bgequ noname.50
690 incl -32(fp)
691noname.50:
692 movl -28(fp),r1
693 movl -32(fp),r2
694 addl2 r1,r8
695 bicl2 #0,r8
696 cmpl r8,r1
697 bgequ noname.51
698 incl r2
699noname.51:
700 addl2 r2,r10
701 bicl2 #0,r10
702 cmpl r10,r2
703 bgequ noname.52
704 incl r9
705noname.52:
706
707 movzwl 6(r6),r2
708 bicl3 #-65536,(r7),r3
709 movzwl 2(r7),r0
710 bicl2 #-65536,r0
711 bicl3 #-65536,4(r6),-44(fp)
712 bicl3 #-65536,r2,-48(fp)
713 mull3 r0,-44(fp),-36(fp)
714 mull2 r3,-44(fp)
715 mull3 r3,-48(fp),-40(fp)
716 mull2 r0,-48(fp)
717 addl3 -36(fp),-40(fp),r0
718 bicl3 #0,r0,-36(fp)
719 cmpl -36(fp),-40(fp)
720 bgequ noname.53
721 addl2 #65536,-48(fp)
722noname.53:
723 movzwl -34(fp),r0
724 bicl2 #-65536,r0
725 addl2 r0,-48(fp)
726 bicl3 #-65536,-36(fp),r0
727 ashl #16,r0,-40(fp)
728 addl3 -40(fp),-44(fp),r0
729 bicl3 #0,r0,-44(fp)
730 cmpl -44(fp),-40(fp)
731 bgequ noname.54
732 incl -48(fp)
733noname.54:
734 movl -44(fp),r1
735 movl -48(fp),r2
736 addl2 r1,r8
737 bicl2 #0,r8
738 cmpl r8,r1
739 bgequ noname.55
740 incl r2
741noname.55:
742 addl2 r2,r10
743 bicl2 #0,r10
744 cmpl r10,r2
745 bgequ noname.56
746 incl r9
747noname.56:
748
749 movl r8,4(r11)
750
751 clrl r8
752
753 movzwl 10(r6),r2
754 bicl3 #-65536,(r7),r3
755 movzwl 2(r7),r0
756 bicl2 #-65536,r0
757 bicl3 #-65536,8(r6),-60(fp)
758 bicl3 #-65536,r2,-64(fp)
759 mull3 r0,-60(fp),-52(fp)
760 mull2 r3,-60(fp)
761 mull3 r3,-64(fp),-56(fp)
762 mull2 r0,-64(fp)
763 addl3 -52(fp),-56(fp),r0
764 bicl3 #0,r0,-52(fp)
765 cmpl -52(fp),-56(fp)
766 bgequ noname.57
767 addl2 #65536,-64(fp)
768noname.57:
769 movzwl -50(fp),r0
770 bicl2 #-65536,r0
771 addl2 r0,-64(fp)
772 bicl3 #-65536,-52(fp),r0
773 ashl #16,r0,-56(fp)
774 addl3 -56(fp),-60(fp),r0
775 bicl3 #0,r0,-60(fp)
776 cmpl -60(fp),-56(fp)
777 bgequ noname.58
778 incl -64(fp)
779noname.58:
780 movl -60(fp),r1
781 movl -64(fp),r2
782 addl2 r1,r10
783 bicl2 #0,r10
784 cmpl r10,r1
785 bgequ noname.59
786 incl r2
787noname.59:
788 addl2 r2,r9
789 bicl2 #0,r9
790 cmpl r9,r2
791 bgequ noname.60
792 incl r8
793noname.60:
794
795 movzwl 6(r6),r2
796 bicl3 #-65536,4(r7),r3
797 movzwl 6(r7),r0
798 bicl2 #-65536,r0
799 bicl3 #-65536,4(r6),-76(fp)
800 bicl3 #-65536,r2,-80(fp)
801 mull3 r0,-76(fp),-68(fp)
802 mull2 r3,-76(fp)
803 mull3 r3,-80(fp),-72(fp)
804 mull2 r0,-80(fp)
805 addl3 -68(fp),-72(fp),r0
806 bicl3 #0,r0,-68(fp)
807 cmpl -68(fp),-72(fp)
808 bgequ noname.61
809 addl2 #65536,-80(fp)
810noname.61:
811 movzwl -66(fp),r0
812 bicl2 #-65536,r0
813 addl2 r0,-80(fp)
814 bicl3 #-65536,-68(fp),r0
815 ashl #16,r0,-72(fp)
816 addl3 -72(fp),-76(fp),r0
817 bicl3 #0,r0,-76(fp)
818 cmpl -76(fp),-72(fp)
819 bgequ noname.62
820 incl -80(fp)
821noname.62:
822 movl -76(fp),r1
823 movl -80(fp),r2
824 addl2 r1,r10
825 bicl2 #0,r10
826 cmpl r10,r1
827 bgequ noname.63
828 incl r2
829noname.63:
830 addl2 r2,r9
831 bicl2 #0,r9
832 cmpl r9,r2
833 bgequ noname.64
834 incl r8
835noname.64:
836
837 movzwl 2(r6),r2
838 bicl3 #-65536,8(r7),r3
839 movzwl 10(r7),r0
840 bicl2 #-65536,r0
841 bicl3 #-65536,(r6),-92(fp)
842 bicl3 #-65536,r2,-96(fp)
843 mull3 r0,-92(fp),-84(fp)
844 mull2 r3,-92(fp)
845 mull3 r3,-96(fp),-88(fp)
846 mull2 r0,-96(fp)
847 addl3 -84(fp),-88(fp),r0
848 bicl3 #0,r0,-84(fp)
849 cmpl -84(fp),-88(fp)
850 bgequ noname.65
851 addl2 #65536,-96(fp)
852noname.65:
853 movzwl -82(fp),r0
854 bicl2 #-65536,r0
855 addl2 r0,-96(fp)
856 bicl3 #-65536,-84(fp),r0
857 ashl #16,r0,-88(fp)
858 addl3 -88(fp),-92(fp),r0
859 bicl3 #0,r0,-92(fp)
860 cmpl -92(fp),-88(fp)
861 bgequ noname.66
862 incl -96(fp)
863noname.66:
864 movl -92(fp),r1
865 movl -96(fp),r2
866 addl2 r1,r10
867 bicl2 #0,r10
868 cmpl r10,r1
869 bgequ noname.67
870 incl r2
871noname.67:
872 addl2 r2,r9
873 bicl2 #0,r9
874 cmpl r9,r2
875 bgequ noname.68
876 incl r8
877noname.68:
878
879 movl r10,8(r11)
880
881 clrl r10
882
883 movzwl 2(r6),r2
884 bicl3 #-65536,12(r7),r3
885 movzwl 14(r7),r0
886 bicl2 #-65536,r0
887 bicl3 #-65536,(r6),-108(fp)
888 bicl3 #-65536,r2,-112(fp)
889 mull3 r0,-108(fp),-100(fp)
890 mull2 r3,-108(fp)
891 mull3 r3,-112(fp),-104(fp)
892 mull2 r0,-112(fp)
893 addl3 -100(fp),-104(fp),r0
894 bicl3 #0,r0,-100(fp)
895 cmpl -100(fp),-104(fp)
896 bgequ noname.69
897 addl2 #65536,-112(fp)
898noname.69:
899 movzwl -98(fp),r0
900 bicl2 #-65536,r0
901 addl2 r0,-112(fp)
902 bicl3 #-65536,-100(fp),r0
903 ashl #16,r0,-104(fp)
904 addl3 -104(fp),-108(fp),r0
905 bicl3 #0,r0,-108(fp)
906 cmpl -108(fp),-104(fp)
907 bgequ noname.70
908 incl -112(fp)
909noname.70:
910 movl -108(fp),r1
911 movl -112(fp),r2
912 addl2 r1,r9
913 bicl2 #0,r9
914 cmpl r9,r1
915 bgequ noname.71
916 incl r2
917noname.71:
918 addl2 r2,r8
919 bicl2 #0,r8
920 cmpl r8,r2
921 bgequ noname.72
922 incl r10
923noname.72:
924
925 movzwl 6(r6),r2
926 bicl3 #-65536,8(r7),r3
927 movzwl 10(r7),r0
928 bicl2 #-65536,r0
929 bicl3 #-65536,4(r6),-124(fp)
930 bicl3 #-65536,r2,-128(fp)
931 mull3 r0,-124(fp),-116(fp)
932 mull2 r3,-124(fp)
933 mull3 r3,-128(fp),-120(fp)
934 mull2 r0,-128(fp)
935 addl3 -116(fp),-120(fp),r0
936 bicl3 #0,r0,-116(fp)
937 cmpl -116(fp),-120(fp)
938 bgequ noname.73
939 addl2 #65536,-128(fp)
940noname.73:
941 movzwl -114(fp),r0
942 bicl2 #-65536,r0
943 addl2 r0,-128(fp)
944 bicl3 #-65536,-116(fp),r0
945 ashl #16,r0,-120(fp)
946 addl3 -120(fp),-124(fp),r0
947 bicl3 #0,r0,-124(fp)
948 cmpl -124(fp),-120(fp)
949 bgequ noname.74
950 incl -128(fp)
951noname.74:
952 movl -124(fp),r1
953 movl -128(fp),r2
954 addl2 r1,r9
955 bicl2 #0,r9
956 cmpl r9,r1
957 bgequ noname.75
958 incl r2
959noname.75:
960 addl2 r2,r8
961 bicl2 #0,r8
962 cmpl r8,r2
963 bgequ noname.76
964 incl r10
965noname.76:
966
967 movzwl 10(r6),r2
968 bicl3 #-65536,4(r7),r3
969 movzwl 6(r7),r0
970 bicl2 #-65536,r0
971 bicl3 #-65536,8(r6),-140(fp)
972 bicl3 #-65536,r2,-144(fp)
973 mull3 r0,-140(fp),-132(fp)
974 mull2 r3,-140(fp)
975 mull3 r3,-144(fp),-136(fp)
976 mull2 r0,-144(fp)
977 addl3 -132(fp),-136(fp),r0
978 bicl3 #0,r0,-132(fp)
979 cmpl -132(fp),-136(fp)
980 bgequ noname.77
981 addl2 #65536,-144(fp)
982noname.77:
983 movzwl -130(fp),r0
984 bicl2 #-65536,r0
985 addl2 r0,-144(fp)
986 bicl3 #-65536,-132(fp),r0
987 ashl #16,r0,-136(fp)
988 addl3 -136(fp),-140(fp),r0
989 bicl3 #0,r0,-140(fp)
990 cmpl -140(fp),-136(fp)
991 bgequ noname.78
992 incl -144(fp)
993noname.78:
994 movl -140(fp),r1
995 movl -144(fp),r2
996 addl2 r1,r9
997 bicl2 #0,r9
998 cmpl r9,r1
999 bgequ noname.79
1000 incl r2
1001noname.79:
1002 addl2 r2,r8
1003 bicl2 #0,r8
1004 cmpl r8,r2
1005 bgequ noname.80
1006 incl r10
1007noname.80:
1008
1009 movzwl 14(r6),r2
1010 bicl3 #-65536,(r7),r3
1011 movzwl 2(r7),r0
1012 bicl2 #-65536,r0
1013 bicl3 #-65536,12(r6),-156(fp)
1014 bicl3 #-65536,r2,-160(fp)
1015 mull3 r0,-156(fp),-148(fp)
1016 mull2 r3,-156(fp)
1017 mull3 r3,-160(fp),-152(fp)
1018 mull2 r0,-160(fp)
1019 addl3 -148(fp),-152(fp),r0
1020 bicl3 #0,r0,-148(fp)
1021 cmpl -148(fp),-152(fp)
1022 bgequ noname.81
1023 addl2 #65536,-160(fp)
1024noname.81:
1025 movzwl -146(fp),r0
1026 bicl2 #-65536,r0
1027 addl2 r0,-160(fp)
1028 bicl3 #-65536,-148(fp),r0
1029 ashl #16,r0,-152(fp)
1030 addl3 -152(fp),-156(fp),r0
1031 bicl3 #0,r0,-156(fp)
1032 cmpl -156(fp),-152(fp)
1033 bgequ noname.82
1034 incl -160(fp)
1035noname.82:
1036 movl -156(fp),r1
1037 movl -160(fp),r2
1038 addl2 r1,r9
1039 bicl2 #0,r9
1040 cmpl r9,r1
1041 bgequ noname.83
1042 incl r2
1043noname.83:
1044 addl2 r2,r8
1045 bicl2 #0,r8
1046 cmpl r8,r2
1047 bgequ noname.84
1048 incl r10
1049noname.84:
1050
1051 movl r9,12(r11)
1052
1053 clrl r9
1054
1055 movzwl 18(r6),r2
1056 bicl3 #-65536,(r7),r3
1057 movzwl 2(r7),r0
1058 bicl2 #-65536,r0
1059 bicl3 #-65536,16(r6),-172(fp)
1060 bicl3 #-65536,r2,-176(fp)
1061 mull3 r0,-172(fp),-164(fp)
1062 mull2 r3,-172(fp)
1063 mull3 r3,-176(fp),-168(fp)
1064 mull2 r0,-176(fp)
1065 addl3 -164(fp),-168(fp),r0
1066 bicl3 #0,r0,-164(fp)
1067 cmpl -164(fp),-168(fp)
1068 bgequ noname.85
1069 addl2 #65536,-176(fp)
1070noname.85:
1071 movzwl -162(fp),r0
1072 bicl2 #-65536,r0
1073 addl2 r0,-176(fp)
1074 bicl3 #-65536,-164(fp),r0
1075 ashl #16,r0,-168(fp)
1076 addl3 -168(fp),-172(fp),r0
1077 bicl3 #0,r0,-172(fp)
1078 cmpl -172(fp),-168(fp)
1079 bgequ noname.86
1080 incl -176(fp)
1081noname.86:
1082 movl -172(fp),r1
1083 movl -176(fp),r2
1084 addl2 r1,r8
1085 bicl2 #0,r8
1086 cmpl r8,r1
1087 bgequ noname.87
1088 incl r2
1089noname.87:
1090 addl2 r2,r10
1091 bicl2 #0,r10
1092 cmpl r10,r2
1093 bgequ noname.88
1094 incl r9
1095noname.88:
1096
1097 movzwl 14(r6),r2
1098 bicl3 #-65536,4(r7),r3
1099 movzwl 6(r7),r0
1100 bicl2 #-65536,r0
1101 bicl3 #-65536,12(r6),-188(fp)
1102 bicl3 #-65536,r2,-192(fp)
1103 mull3 r0,-188(fp),-180(fp)
1104 mull2 r3,-188(fp)
1105 mull3 r3,-192(fp),-184(fp)
1106 mull2 r0,-192(fp)
1107 addl3 -180(fp),-184(fp),r0
1108 bicl3 #0,r0,-180(fp)
1109 cmpl -180(fp),-184(fp)
1110 bgequ noname.89
1111 addl2 #65536,-192(fp)
1112noname.89:
1113 movzwl -178(fp),r0
1114 bicl2 #-65536,r0
1115 addl2 r0,-192(fp)
1116 bicl3 #-65536,-180(fp),r0
1117 ashl #16,r0,-184(fp)
1118 addl3 -184(fp),-188(fp),r0
1119 bicl3 #0,r0,-188(fp)
1120 cmpl -188(fp),-184(fp)
1121 bgequ noname.90
1122 incl -192(fp)
1123noname.90:
1124 movl -188(fp),r1
1125 movl -192(fp),r2
1126 addl2 r1,r8
1127 bicl2 #0,r8
1128 cmpl r8,r1
1129 bgequ noname.91
1130 incl r2
1131noname.91:
1132 addl2 r2,r10
1133 bicl2 #0,r10
1134 cmpl r10,r2
1135 bgequ noname.92
1136 incl r9
1137noname.92:
1138
1139 movzwl 10(r6),r2
1140 bicl3 #-65536,8(r7),r3
1141 movzwl 10(r7),r0
1142 bicl2 #-65536,r0
1143 bicl3 #-65536,8(r6),-204(fp)
1144 bicl3 #-65536,r2,-208(fp)
1145 mull3 r0,-204(fp),-196(fp)
1146 mull2 r3,-204(fp)
1147 mull3 r3,-208(fp),-200(fp)
1148 mull2 r0,-208(fp)
1149 addl3 -196(fp),-200(fp),r0
1150 bicl3 #0,r0,-196(fp)
1151 cmpl -196(fp),-200(fp)
1152 bgequ noname.93
1153 addl2 #65536,-208(fp)
1154noname.93:
1155 movzwl -194(fp),r0
1156 bicl2 #-65536,r0
1157 addl2 r0,-208(fp)
1158 bicl3 #-65536,-196(fp),r0
1159 ashl #16,r0,-200(fp)
1160 addl3 -200(fp),-204(fp),r0
1161 bicl3 #0,r0,-204(fp)
1162 cmpl -204(fp),-200(fp)
1163 bgequ noname.94
1164 incl -208(fp)
1165noname.94:
1166 movl -204(fp),r1
1167 movl -208(fp),r2
1168 addl2 r1,r8
1169 bicl2 #0,r8
1170 cmpl r8,r1
1171 bgequ noname.95
1172 incl r2
1173noname.95:
1174 addl2 r2,r10
1175 bicl2 #0,r10
1176 cmpl r10,r2
1177 bgequ noname.96
1178 incl r9
1179noname.96:
1180
1181 movzwl 6(r6),r2
1182 bicl3 #-65536,12(r7),r3
1183 movzwl 14(r7),r0
1184 bicl2 #-65536,r0
1185 bicl3 #-65536,4(r6),-220(fp)
1186 bicl3 #-65536,r2,-224(fp)
1187 mull3 r0,-220(fp),-212(fp)
1188 mull2 r3,-220(fp)
1189 mull3 r3,-224(fp),-216(fp)
1190 mull2 r0,-224(fp)
1191 addl3 -212(fp),-216(fp),r0
1192 bicl3 #0,r0,-212(fp)
1193 cmpl -212(fp),-216(fp)
1194 bgequ noname.97
1195 addl2 #65536,-224(fp)
1196noname.97:
1197 movzwl -210(fp),r0
1198 bicl2 #-65536,r0
1199 addl2 r0,-224(fp)
1200 bicl3 #-65536,-212(fp),r0
1201 ashl #16,r0,-216(fp)
1202 addl3 -216(fp),-220(fp),r0
1203 bicl3 #0,r0,-220(fp)
1204 cmpl -220(fp),-216(fp)
1205 bgequ noname.98
1206 incl -224(fp)
1207noname.98:
1208 movl -220(fp),r1
1209 movl -224(fp),r2
1210 addl2 r1,r8
1211 bicl2 #0,r8
1212 cmpl r8,r1
1213 bgequ noname.99
1214 incl r2
1215noname.99:
1216 addl2 r2,r10
1217 bicl2 #0,r10
1218 cmpl r10,r2
1219 bgequ noname.100
1220 incl r9
1221noname.100:
1222
1223 movzwl 2(r6),r2
1224 bicl3 #-65536,16(r7),r3
1225 movzwl 18(r7),r0
1226 bicl2 #-65536,r0
1227 bicl3 #-65536,(r6),-236(fp)
1228 bicl3 #-65536,r2,-240(fp)
1229 mull3 r0,-236(fp),-228(fp)
1230 mull2 r3,-236(fp)
1231 mull3 r3,-240(fp),-232(fp)
1232 mull2 r0,-240(fp)
1233 addl3 -228(fp),-232(fp),r0
1234 bicl3 #0,r0,-228(fp)
1235 cmpl -228(fp),-232(fp)
1236 bgequ noname.101
1237 addl2 #65536,-240(fp)
1238noname.101:
1239 movzwl -226(fp),r0
1240 bicl2 #-65536,r0
1241 addl2 r0,-240(fp)
1242 bicl3 #-65536,-228(fp),r0
1243 ashl #16,r0,-232(fp)
1244 addl3 -232(fp),-236(fp),r0
1245 bicl3 #0,r0,-236(fp)
1246 cmpl -236(fp),-232(fp)
1247 bgequ noname.102
1248 incl -240(fp)
1249noname.102:
1250 movl -236(fp),r1
1251 movl -240(fp),r2
1252 addl2 r1,r8
1253 bicl2 #0,r8
1254 cmpl r8,r1
1255 bgequ noname.103
1256 incl r2
1257noname.103:
1258 addl2 r2,r10
1259 bicl2 #0,r10
1260 cmpl r10,r2
1261 bgequ noname.104
1262 incl r9
1263noname.104:
1264
1265 movl r8,16(r11)
1266
1267 clrl r8
1268
1269 movzwl 2(r6),r2
1270 bicl3 #-65536,20(r7),r3
1271 movzwl 22(r7),r0
1272 bicl2 #-65536,r0
1273 bicl3 #-65536,(r6),-252(fp)
1274 bicl3 #-65536,r2,-256(fp)
1275 mull3 r0,-252(fp),-244(fp)
1276 mull2 r3,-252(fp)
1277 mull3 r3,-256(fp),-248(fp)
1278 mull2 r0,-256(fp)
1279 addl3 -244(fp),-248(fp),r0
1280 bicl3 #0,r0,-244(fp)
1281 cmpl -244(fp),-248(fp)
1282 bgequ noname.105
1283 addl2 #65536,-256(fp)
1284noname.105:
1285 movzwl -242(fp),r0
1286 bicl2 #-65536,r0
1287 addl2 r0,-256(fp)
1288 bicl3 #-65536,-244(fp),r0
1289 ashl #16,r0,-248(fp)
1290 addl3 -248(fp),-252(fp),r0
1291 bicl3 #0,r0,-252(fp)
1292 cmpl -252(fp),-248(fp)
1293 bgequ noname.106
1294 incl -256(fp)
1295noname.106:
1296 movl -252(fp),r1
1297 movl -256(fp),r2
1298 addl2 r1,r10
1299 bicl2 #0,r10
1300 cmpl r10,r1
1301 bgequ noname.107
1302 incl r2
1303noname.107:
1304 addl2 r2,r9
1305 bicl2 #0,r9
1306 cmpl r9,r2
1307 bgequ noname.108
1308 incl r8
1309noname.108:
1310
1311 movzwl 6(r6),r2
1312 bicl3 #-65536,16(r7),r3
1313 movzwl 18(r7),r0
1314 bicl2 #-65536,r0
1315 bicl3 #-65536,4(r6),-268(fp)
1316 bicl3 #-65536,r2,-272(fp)
1317 mull3 r0,-268(fp),-260(fp)
1318 mull2 r3,-268(fp)
1319 mull3 r3,-272(fp),-264(fp)
1320 mull2 r0,-272(fp)
1321 addl3 -260(fp),-264(fp),r0
1322 bicl3 #0,r0,-260(fp)
1323 cmpl -260(fp),-264(fp)
1324 bgequ noname.109
1325 addl2 #65536,-272(fp)
1326noname.109:
1327 movzwl -258(fp),r0
1328 bicl2 #-65536,r0
1329 addl2 r0,-272(fp)
1330 bicl3 #-65536,-260(fp),r0
1331 ashl #16,r0,-264(fp)
1332 addl3 -264(fp),-268(fp),r0
1333 bicl3 #0,r0,-268(fp)
1334 cmpl -268(fp),-264(fp)
1335 bgequ noname.110
1336 incl -272(fp)
1337noname.110:
1338 movl -268(fp),r1
1339 movl -272(fp),r2
1340 addl2 r1,r10
1341 bicl2 #0,r10
1342 cmpl r10,r1
1343 bgequ noname.111
1344 incl r2
1345noname.111:
1346 addl2 r2,r9
1347 bicl2 #0,r9
1348 cmpl r9,r2
1349 bgequ noname.112
1350 incl r8
1351noname.112:
1352
1353 movzwl 10(r6),r2
1354 bicl3 #-65536,12(r7),r3
1355 movzwl 14(r7),r0
1356 bicl2 #-65536,r0
1357 bicl3 #-65536,8(r6),-284(fp)
1358 bicl3 #-65536,r2,-288(fp)
1359 mull3 r0,-284(fp),-276(fp)
1360 mull2 r3,-284(fp)
1361 mull3 r3,-288(fp),-280(fp)
1362 mull2 r0,-288(fp)
1363 addl3 -276(fp),-280(fp),r0
1364 bicl3 #0,r0,-276(fp)
1365 cmpl -276(fp),-280(fp)
1366 bgequ noname.113
1367 addl2 #65536,-288(fp)
1368noname.113:
1369 movzwl -274(fp),r0
1370 bicl2 #-65536,r0
1371 addl2 r0,-288(fp)
1372 bicl3 #-65536,-276(fp),r0
1373 ashl #16,r0,-280(fp)
1374 addl3 -280(fp),-284(fp),r0
1375 bicl3 #0,r0,-284(fp)
1376 cmpl -284(fp),-280(fp)
1377 bgequ noname.114
1378 incl -288(fp)
1379noname.114:
1380 movl -284(fp),r1
1381 movl -288(fp),r2
1382 addl2 r1,r10
1383 bicl2 #0,r10
1384 cmpl r10,r1
1385 bgequ noname.115
1386 incl r2
1387noname.115:
1388 addl2 r2,r9
1389 bicl2 #0,r9
1390 cmpl r9,r2
1391 bgequ noname.116
1392 incl r8
1393noname.116:
1394
1395 movzwl 14(r6),r2
1396 bicl3 #-65536,8(r7),r3
1397 movzwl 10(r7),r0
1398 bicl2 #-65536,r0
1399 bicl3 #-65536,12(r6),-300(fp)
1400 bicl3 #-65536,r2,-304(fp)
1401 mull3 r0,-300(fp),-292(fp)
1402 mull2 r3,-300(fp)
1403 mull3 r3,-304(fp),-296(fp)
1404 mull2 r0,-304(fp)
1405 addl3 -292(fp),-296(fp),r0
1406 bicl3 #0,r0,-292(fp)
1407 cmpl -292(fp),-296(fp)
1408 bgequ noname.117
1409 addl2 #65536,-304(fp)
1410noname.117:
1411 movzwl -290(fp),r0
1412 bicl2 #-65536,r0
1413 addl2 r0,-304(fp)
1414 bicl3 #-65536,-292(fp),r0
1415 ashl #16,r0,-296(fp)
1416 addl3 -296(fp),-300(fp),r0
1417 bicl3 #0,r0,-300(fp)
1418 cmpl -300(fp),-296(fp)
1419 bgequ noname.118
1420 incl -304(fp)
1421noname.118:
1422 movl -300(fp),r1
1423 movl -304(fp),r2
1424 addl2 r1,r10
1425 bicl2 #0,r10
1426 cmpl r10,r1
1427 bgequ noname.119
1428 incl r2
1429noname.119:
1430 addl2 r2,r9
1431 bicl2 #0,r9
1432 cmpl r9,r2
1433 bgequ noname.120
1434 incl r8
1435noname.120:
1436
1437 movzwl 18(r6),r2
1438 bicl3 #-65536,4(r7),r3
1439 movzwl 6(r7),r0
1440 bicl2 #-65536,r0
1441 bicl3 #-65536,16(r6),-316(fp)
1442 bicl3 #-65536,r2,-320(fp)
1443 mull3 r0,-316(fp),-308(fp)
1444 mull2 r3,-316(fp)
1445 mull3 r3,-320(fp),-312(fp)
1446 mull2 r0,-320(fp)
1447 addl3 -308(fp),-312(fp),r0
1448 bicl3 #0,r0,-308(fp)
1449 cmpl -308(fp),-312(fp)
1450 bgequ noname.121
1451 addl2 #65536,-320(fp)
1452noname.121:
1453 movzwl -306(fp),r0
1454 bicl2 #-65536,r0
1455 addl2 r0,-320(fp)
1456 bicl3 #-65536,-308(fp),r0
1457 ashl #16,r0,-312(fp)
1458 addl3 -312(fp),-316(fp),r0
1459 bicl3 #0,r0,-316(fp)
1460 cmpl -316(fp),-312(fp)
1461 bgequ noname.122
1462 incl -320(fp)
1463noname.122:
1464 movl -316(fp),r1
1465 movl -320(fp),r2
1466 addl2 r1,r10
1467 bicl2 #0,r10
1468 cmpl r10,r1
1469 bgequ noname.123
1470 incl r2
1471
1472noname.123:
1473 addl2 r2,r9
1474 bicl2 #0,r9
1475 cmpl r9,r2
1476 bgequ noname.124
1477 incl r8
1478noname.124:
1479
1480 movzwl 22(r6),r2
1481 bicl3 #-65536,(r7),r3
1482 movzwl 2(r7),r0
1483 bicl2 #-65536,r0
1484 bicl3 #-65536,20(r6),-332(fp)
1485 bicl3 #-65536,r2,-336(fp)
1486 mull3 r0,-332(fp),-324(fp)
1487 mull2 r3,-332(fp)
1488 mull3 r3,-336(fp),-328(fp)
1489 mull2 r0,-336(fp)
1490 addl3 -324(fp),-328(fp),r0
1491 bicl3 #0,r0,-324(fp)
1492 cmpl -324(fp),-328(fp)
1493 bgequ noname.125
1494 addl2 #65536,-336(fp)
1495noname.125:
1496 movzwl -322(fp),r0
1497 bicl2 #-65536,r0
1498 addl2 r0,-336(fp)
1499 bicl3 #-65536,-324(fp),r0
1500 ashl #16,r0,-328(fp)
1501 addl3 -328(fp),-332(fp),r0
1502 bicl3 #0,r0,-332(fp)
1503 cmpl -332(fp),-328(fp)
1504 bgequ noname.126
1505 incl -336(fp)
1506noname.126:
1507 movl -332(fp),r1
1508 movl -336(fp),r2
1509 addl2 r1,r10
1510 bicl2 #0,r10
1511 cmpl r10,r1
1512 bgequ noname.127
1513 incl r2
1514noname.127:
1515 addl2 r2,r9
1516 bicl2 #0,r9
1517 cmpl r9,r2
1518 bgequ noname.128
1519 incl r8
1520noname.128:
1521
1522 movl r10,20(r11)
1523
1524 clrl r10
1525
1526 movzwl 26(r6),r2
1527 bicl3 #-65536,(r7),r3
1528 movzwl 2(r7),r0
1529 bicl2 #-65536,r0
1530 bicl3 #-65536,24(r6),-348(fp)
1531 bicl3 #-65536,r2,-352(fp)
1532 mull3 r0,-348(fp),-340(fp)
1533 mull2 r3,-348(fp)
1534 mull3 r3,-352(fp),-344(fp)
1535 mull2 r0,-352(fp)
1536 addl3 -340(fp),-344(fp),r0
1537 bicl3 #0,r0,-340(fp)
1538 cmpl -340(fp),-344(fp)
1539 bgequ noname.129
1540 addl2 #65536,-352(fp)
1541noname.129:
1542 movzwl -338(fp),r0
1543 bicl2 #-65536,r0
1544 addl2 r0,-352(fp)
1545 bicl3 #-65536,-340(fp),r0
1546 ashl #16,r0,-344(fp)
1547 addl3 -344(fp),-348(fp),r0
1548 bicl3 #0,r0,-348(fp)
1549 cmpl -348(fp),-344(fp)
1550 bgequ noname.130
1551 incl -352(fp)
1552noname.130:
1553 movl -348(fp),r1
1554 movl -352(fp),r2
1555 addl2 r1,r9
1556 bicl2 #0,r9
1557 cmpl r9,r1
1558 bgequ noname.131
1559 incl r2
1560noname.131:
1561 addl2 r2,r8
1562 bicl2 #0,r8
1563 cmpl r8,r2
1564 bgequ noname.132
1565 incl r10
1566noname.132:
1567
1568 movzwl 22(r6),r2
1569 bicl3 #-65536,4(r7),r3
1570 movzwl 6(r7),r0
1571 bicl2 #-65536,r0
1572 bicl3 #-65536,20(r6),-364(fp)
1573 bicl3 #-65536,r2,-368(fp)
1574 mull3 r0,-364(fp),-356(fp)
1575 mull2 r3,-364(fp)
1576 mull3 r3,-368(fp),-360(fp)
1577 mull2 r0,-368(fp)
1578 addl3 -356(fp),-360(fp),r0
1579 bicl3 #0,r0,-356(fp)
1580 cmpl -356(fp),-360(fp)
1581 bgequ noname.133
1582 addl2 #65536,-368(fp)
1583noname.133:
1584 movzwl -354(fp),r0
1585 bicl2 #-65536,r0
1586 addl2 r0,-368(fp)
1587 bicl3 #-65536,-356(fp),r0
1588 ashl #16,r0,-360(fp)
1589 addl3 -360(fp),-364(fp),r0
1590 bicl3 #0,r0,-364(fp)
1591 cmpl -364(fp),-360(fp)
1592 bgequ noname.134
1593 incl -368(fp)
1594noname.134:
1595 movl -364(fp),r1
1596 movl -368(fp),r2
1597 addl2 r1,r9
1598 bicl2 #0,r9
1599 cmpl r9,r1
1600 bgequ noname.135
1601 incl r2
1602noname.135:
1603 addl2 r2,r8
1604 bicl2 #0,r8
1605 cmpl r8,r2
1606 bgequ noname.136
1607 incl r10
1608noname.136:
1609
1610 movzwl 18(r6),r2
1611 bicl3 #-65536,8(r7),r3
1612 movzwl 10(r7),r0
1613 bicl2 #-65536,r0
1614 bicl3 #-65536,16(r6),-380(fp)
1615 bicl3 #-65536,r2,-384(fp)
1616 mull3 r0,-380(fp),-372(fp)
1617 mull2 r3,-380(fp)
1618 mull3 r3,-384(fp),-376(fp)
1619 mull2 r0,-384(fp)
1620 addl3 -372(fp),-376(fp),r0
1621 bicl3 #0,r0,-372(fp)
1622 cmpl -372(fp),-376(fp)
1623 bgequ noname.137
1624 addl2 #65536,-384(fp)
1625noname.137:
1626 movzwl -370(fp),r0
1627 bicl2 #-65536,r0
1628 addl2 r0,-384(fp)
1629 bicl3 #-65536,-372(fp),r0
1630 ashl #16,r0,-376(fp)
1631 addl3 -376(fp),-380(fp),r0
1632 bicl3 #0,r0,-380(fp)
1633 cmpl -380(fp),-376(fp)
1634 bgequ noname.138
1635 incl -384(fp)
1636noname.138:
1637 movl -380(fp),r1
1638 movl -384(fp),r2
1639 addl2 r1,r9
1640 bicl2 #0,r9
1641 cmpl r9,r1
1642 bgequ noname.139
1643 incl r2
1644noname.139:
1645 addl2 r2,r8
1646 bicl2 #0,r8
1647 cmpl r8,r2
1648 bgequ noname.140
1649 incl r10
1650noname.140:
1651
1652 movzwl 14(r6),r2
1653 bicl3 #-65536,12(r7),r3
1654 movzwl 14(r7),r0
1655 bicl2 #-65536,r0
1656 bicl3 #-65536,12(r6),-396(fp)
1657 bicl3 #-65536,r2,-400(fp)
1658 mull3 r0,-396(fp),-388(fp)
1659 mull2 r3,-396(fp)
1660 mull3 r3,-400(fp),-392(fp)
1661 mull2 r0,-400(fp)
1662 addl3 -388(fp),-392(fp),r0
1663 bicl3 #0,r0,-388(fp)
1664 cmpl -388(fp),-392(fp)
1665 bgequ noname.141
1666 addl2 #65536,-400(fp)
1667noname.141:
1668 movzwl -386(fp),r0
1669 bicl2 #-65536,r0
1670 addl2 r0,-400(fp)
1671 bicl3 #-65536,-388(fp),r0
1672 ashl #16,r0,-392(fp)
1673 addl3 -392(fp),-396(fp),r0
1674 bicl3 #0,r0,-396(fp)
1675 cmpl -396(fp),-392(fp)
1676 bgequ noname.142
1677 incl -400(fp)
1678noname.142:
1679 movl -396(fp),r1
1680 movl -400(fp),r2
1681 addl2 r1,r9
1682 bicl2 #0,r9
1683 cmpl r9,r1
1684 bgequ noname.143
1685 incl r2
1686noname.143:
1687 addl2 r2,r8
1688 bicl2 #0,r8
1689 cmpl r8,r2
1690 bgequ noname.144
1691 incl r10
1692noname.144:
1693
1694 movzwl 10(r6),r2
1695 bicl3 #-65536,16(r7),r3
1696 movzwl 18(r7),r0
1697 bicl2 #-65536,r0
1698 bicl3 #-65536,8(r6),-412(fp)
1699 bicl3 #-65536,r2,-416(fp)
1700 mull3 r0,-412(fp),-404(fp)
1701 mull2 r3,-412(fp)
1702 mull3 r3,-416(fp),-408(fp)
1703 mull2 r0,-416(fp)
1704 addl3 -404(fp),-408(fp),r0
1705 bicl3 #0,r0,-404(fp)
1706 cmpl -404(fp),-408(fp)
1707 bgequ noname.145
1708 addl2 #65536,-416(fp)
1709noname.145:
1710 movzwl -402(fp),r0
1711 bicl2 #-65536,r0
1712 addl2 r0,-416(fp)
1713 bicl3 #-65536,-404(fp),r0
1714 ashl #16,r0,-408(fp)
1715 addl3 -408(fp),-412(fp),r0
1716 bicl3 #0,r0,-412(fp)
1717 cmpl -412(fp),-408(fp)
1718 bgequ noname.146
1719 incl -416(fp)
1720noname.146:
1721 movl -412(fp),r1
1722 movl -416(fp),r2
1723 addl2 r1,r9
1724 bicl2 #0,r9
1725 cmpl r9,r1
1726 bgequ noname.147
1727 incl r2
1728noname.147:
1729 addl2 r2,r8
1730 bicl2 #0,r8
1731 cmpl r8,r2
1732 bgequ noname.148
1733 incl r10
1734noname.148:
1735
1736 movzwl 6(r6),r2
1737 bicl3 #-65536,20(r7),r3
1738 movzwl 22(r7),r0
1739 bicl2 #-65536,r0
1740 bicl3 #-65536,4(r6),-428(fp)
1741 bicl3 #-65536,r2,-432(fp)
1742 mull3 r0,-428(fp),-420(fp)
1743 mull2 r3,-428(fp)
1744 mull3 r3,-432(fp),-424(fp)
1745 mull2 r0,-432(fp)
1746 addl3 -420(fp),-424(fp),r0
1747 bicl3 #0,r0,-420(fp)
1748 cmpl -420(fp),-424(fp)
1749 bgequ noname.149
1750 addl2 #65536,-432(fp)
1751noname.149:
1752 movzwl -418(fp),r0
1753 bicl2 #-65536,r0
1754 addl2 r0,-432(fp)
1755 bicl3 #-65536,-420(fp),r0
1756 ashl #16,r0,-424(fp)
1757 addl3 -424(fp),-428(fp),r0
1758 bicl3 #0,r0,-428(fp)
1759 cmpl -428(fp),-424(fp)
1760 bgequ noname.150
1761 incl -432(fp)
1762noname.150:
1763 movl -428(fp),r1
1764 movl -432(fp),r2
1765 addl2 r1,r9
1766 bicl2 #0,r9
1767 cmpl r9,r1
1768 bgequ noname.151
1769 incl r2
1770noname.151:
1771 addl2 r2,r8
1772 bicl2 #0,r8
1773 cmpl r8,r2
1774 bgequ noname.152
1775 incl r10
1776noname.152:
1777
1778 movzwl 2(r6),r2
1779 bicl3 #-65536,24(r7),r3
1780 movzwl 26(r7),r0
1781 bicl2 #-65536,r0
1782 bicl3 #-65536,(r6),-444(fp)
1783 bicl3 #-65536,r2,-448(fp)
1784 mull3 r0,-444(fp),-436(fp)
1785 mull2 r3,-444(fp)
1786 mull3 r3,-448(fp),-440(fp)
1787 mull2 r0,-448(fp)
1788 addl3 -436(fp),-440(fp),r0
1789 bicl3 #0,r0,-436(fp)
1790 cmpl -436(fp),-440(fp)
1791 bgequ noname.153
1792 addl2 #65536,-448(fp)
1793noname.153:
1794 movzwl -434(fp),r0
1795 bicl2 #-65536,r0
1796 addl2 r0,-448(fp)
1797 bicl3 #-65536,-436(fp),r0
1798 ashl #16,r0,-440(fp)
1799 addl3 -440(fp),-444(fp),r0
1800 bicl3 #0,r0,-444(fp)
1801 cmpl -444(fp),-440(fp)
1802 bgequ noname.154
1803 incl -448(fp)
1804noname.154:
1805 movl -444(fp),r1
1806 movl -448(fp),r2
1807 addl2 r1,r9
1808 bicl2 #0,r9
1809 cmpl r9,r1
1810 bgequ noname.155
1811 incl r2
1812noname.155:
1813 addl2 r2,r8
1814 bicl2 #0,r8
1815 cmpl r8,r2
1816 bgequ noname.156
1817 incl r10
1818noname.156:
1819
1820 movl r9,24(r11)
1821
1822 clrl r9
1823
1824 movzwl 2(r6),r2
1825 bicl3 #-65536,28(r7),r3
1826 movzwl 30(r7),r0
1827 bicl2 #-65536,r0
1828 bicl3 #-65536,(r6),-460(fp)
1829 bicl3 #-65536,r2,-464(fp)
1830 mull3 r0,-460(fp),-452(fp)
1831 mull2 r3,-460(fp)
1832 mull3 r3,-464(fp),-456(fp)
1833 mull2 r0,-464(fp)
1834 addl3 -452(fp),-456(fp),r0
1835 bicl3 #0,r0,-452(fp)
1836 cmpl -452(fp),-456(fp)
1837 bgequ noname.157
1838 addl2 #65536,-464(fp)
1839noname.157:
1840 movzwl -450(fp),r0
1841 bicl2 #-65536,r0
1842 addl2 r0,-464(fp)
1843 bicl3 #-65536,-452(fp),r0
1844 ashl #16,r0,-456(fp)
1845 addl3 -456(fp),-460(fp),r0
1846 bicl3 #0,r0,-460(fp)
1847 cmpl -460(fp),-456(fp)
1848 bgequ noname.158
1849 incl -464(fp)
1850noname.158:
1851 movl -460(fp),r1
1852 movl -464(fp),r2
1853 addl2 r1,r8
1854 bicl2 #0,r8
1855 cmpl r8,r1
1856 bgequ noname.159
1857 incl r2
1858noname.159:
1859 addl2 r2,r10
1860 bicl2 #0,r10
1861 cmpl r10,r2
1862 bgequ noname.160
1863 incl r9
1864noname.160:
1865
1866 movzwl 6(r6),r2
1867 bicl3 #-65536,24(r7),r3
1868 movzwl 26(r7),r0
1869 bicl2 #-65536,r0
1870 bicl3 #-65536,4(r6),-476(fp)
1871 bicl3 #-65536,r2,-480(fp)
1872 mull3 r0,-476(fp),-468(fp)
1873 mull2 r3,-476(fp)
1874 mull3 r3,-480(fp),-472(fp)
1875 mull2 r0,-480(fp)
1876 addl3 -468(fp),-472(fp),r0
1877 bicl3 #0,r0,-468(fp)
1878 cmpl -468(fp),-472(fp)
1879 bgequ noname.161
1880 addl2 #65536,-480(fp)
1881noname.161:
1882 movzwl -466(fp),r0
1883 bicl2 #-65536,r0
1884 addl2 r0,-480(fp)
1885 bicl3 #-65536,-468(fp),r0
1886 ashl #16,r0,-472(fp)
1887 addl3 -472(fp),-476(fp),r0
1888 bicl3 #0,r0,-476(fp)
1889 cmpl -476(fp),-472(fp)
1890 bgequ noname.162
1891 incl -480(fp)
1892noname.162:
1893 movl -476(fp),r1
1894 movl -480(fp),r2
1895 addl2 r1,r8
1896 bicl2 #0,r8
1897 cmpl r8,r1
1898 bgequ noname.163
1899 incl r2
1900noname.163:
1901 addl2 r2,r10
1902 bicl2 #0,r10
1903 cmpl r10,r2
1904 bgequ noname.164
1905 incl r9
1906noname.164:
1907
1908 movzwl 10(r6),r2
1909 bicl3 #-65536,20(r7),r3
1910 movzwl 22(r7),r0
1911 bicl2 #-65536,r0
1912 bicl3 #-65536,8(r6),-492(fp)
1913 bicl3 #-65536,r2,-496(fp)
1914 mull3 r0,-492(fp),-484(fp)
1915 mull2 r3,-492(fp)
1916 mull3 r3,-496(fp),-488(fp)
1917 mull2 r0,-496(fp)
1918 addl3 -484(fp),-488(fp),r0
1919 bicl3 #0,r0,-484(fp)
1920 cmpl -484(fp),-488(fp)
1921 bgequ noname.165
1922 addl2 #65536,-496(fp)
1923noname.165:
1924 movzwl -482(fp),r0
1925 bicl2 #-65536,r0
1926 addl2 r0,-496(fp)
1927 bicl3 #-65536,-484(fp),r0
1928 ashl #16,r0,-488(fp)
1929 addl3 -488(fp),-492(fp),r0
1930 bicl3 #0,r0,-492(fp)
1931 cmpl -492(fp),-488(fp)
1932 bgequ noname.166
1933 incl -496(fp)
1934noname.166:
1935 movl -492(fp),r1
1936 movl -496(fp),r2
1937 addl2 r1,r8
1938 bicl2 #0,r8
1939 cmpl r8,r1
1940 bgequ noname.167
1941 incl r2
1942noname.167:
1943 addl2 r2,r10
1944 bicl2 #0,r10
1945 cmpl r10,r2
1946 bgequ noname.168
1947 incl r9
1948noname.168:
1949
1950 movzwl 14(r6),r2
1951 bicl3 #-65536,16(r7),r3
1952 movzwl 18(r7),r0
1953 bicl2 #-65536,r0
1954 bicl3 #-65536,12(r6),-508(fp)
1955 bicl3 #-65536,r2,-512(fp)
1956 mull3 r0,-508(fp),-500(fp)
1957 mull2 r3,-508(fp)
1958 mull3 r3,-512(fp),-504(fp)
1959 mull2 r0,-512(fp)
1960 addl3 -500(fp),-504(fp),r0
1961 bicl3 #0,r0,-500(fp)
1962 cmpl -500(fp),-504(fp)
1963 bgequ noname.169
1964 addl2 #65536,-512(fp)
1965noname.169:
1966 movzwl -498(fp),r0
1967 bicl2 #-65536,r0
1968 addl2 r0,-512(fp)
1969 bicl3 #-65536,-500(fp),r0
1970 ashl #16,r0,-504(fp)
1971 addl3 -504(fp),-508(fp),r0
1972 bicl3 #0,r0,-508(fp)
1973 cmpl -508(fp),-504(fp)
1974 bgequ noname.170
1975 incl -512(fp)
1976noname.170:
1977 movl -508(fp),r1
1978 movl -512(fp),r2
1979 addl2 r1,r8
1980 bicl2 #0,r8
1981 cmpl r8,r1
1982 bgequ noname.171
1983 incl r2
1984noname.171:
1985 addl2 r2,r10
1986 bicl2 #0,r10
1987 cmpl r10,r2
1988 bgequ noname.172
1989 incl r9
1990noname.172:
1991
1992 movzwl 18(r6),r2
1993 bicl3 #-65536,12(r7),r3
1994 movzwl 14(r7),r0
1995 bicl2 #-65536,r0
1996 bicl3 #-65536,16(r6),-524(fp)
1997 bicl3 #-65536,r2,-528(fp)
1998 mull3 r0,-524(fp),-516(fp)
1999 mull2 r3,-524(fp)
2000 mull3 r3,-528(fp),-520(fp)
2001 mull2 r0,-528(fp)
2002 addl3 -516(fp),-520(fp),r0
2003 bicl3 #0,r0,-516(fp)
2004 cmpl -516(fp),-520(fp)
2005 bgequ noname.173
2006 addl2 #65536,-528(fp)
2007noname.173:
2008 movzwl -514(fp),r0
2009 bicl2 #-65536,r0
2010 addl2 r0,-528(fp)
2011 bicl3 #-65536,-516(fp),r0
2012 ashl #16,r0,-520(fp)
2013 addl3 -520(fp),-524(fp),r0
2014 bicl3 #0,r0,-524(fp)
2015 cmpl -524(fp),-520(fp)
2016 bgequ noname.174
2017 incl -528(fp)
2018noname.174:
2019 movl -524(fp),r1
2020 movl -528(fp),r2
2021 addl2 r1,r8
2022 bicl2 #0,r8
2023 cmpl r8,r1
2024 bgequ noname.175
2025 incl r2
2026noname.175:
2027 addl2 r2,r10
2028 bicl2 #0,r10
2029 cmpl r10,r2
2030 bgequ noname.176
2031 incl r9
2032noname.176:
2033
2034 movzwl 22(r6),r2
2035 bicl3 #-65536,8(r7),r3
2036 movzwl 10(r7),r0
2037 bicl2 #-65536,r0
2038 bicl3 #-65536,20(r6),-540(fp)
2039 bicl3 #-65536,r2,-544(fp)
2040 mull3 r0,-540(fp),-532(fp)
2041 mull2 r3,-540(fp)
2042 mull3 r3,-544(fp),-536(fp)
2043 mull2 r0,-544(fp)
2044 addl3 -532(fp),-536(fp),r0
2045 bicl3 #0,r0,-532(fp)
2046 cmpl -532(fp),-536(fp)
2047 bgequ noname.177
2048 addl2 #65536,-544(fp)
2049noname.177:
2050 movzwl -530(fp),r0
2051 bicl2 #-65536,r0
2052 addl2 r0,-544(fp)
2053 bicl3 #-65536,-532(fp),r0
2054 ashl #16,r0,-536(fp)
2055 addl3 -536(fp),-540(fp),r0
2056 bicl3 #0,r0,-540(fp)
2057 cmpl -540(fp),-536(fp)
2058 bgequ noname.178
2059 incl -544(fp)
2060noname.178:
2061 movl -540(fp),r1
2062 movl -544(fp),r2
2063 addl2 r1,r8
2064 bicl2 #0,r8
2065 cmpl r8,r1
2066 bgequ noname.179
2067 incl r2
2068noname.179:
2069 addl2 r2,r10
2070 bicl2 #0,r10
2071 cmpl r10,r2
2072 bgequ noname.180
2073 incl r9
2074noname.180:
2075
2076 movzwl 26(r6),r2
2077 bicl3 #-65536,4(r7),r3
2078 movzwl 6(r7),r0
2079 bicl2 #-65536,r0
2080 bicl3 #-65536,24(r6),-556(fp)
2081 bicl3 #-65536,r2,-560(fp)
2082 mull3 r0,-556(fp),-548(fp)
2083 mull2 r3,-556(fp)
2084 mull3 r3,-560(fp),-552(fp)
2085 mull2 r0,-560(fp)
2086 addl3 -548(fp),-552(fp),r0
2087 bicl3 #0,r0,-548(fp)
2088 cmpl -548(fp),-552(fp)
2089 bgequ noname.181
2090 addl2 #65536,-560(fp)
2091noname.181:
2092 movzwl -546(fp),r0
2093 bicl2 #-65536,r0
2094 addl2 r0,-560(fp)
2095 bicl3 #-65536,-548(fp),r0
2096 ashl #16,r0,-552(fp)
2097 addl3 -552(fp),-556(fp),r0
2098 bicl3 #0,r0,-556(fp)
2099 cmpl -556(fp),-552(fp)
2100 bgequ noname.182
2101 incl -560(fp)
2102noname.182:
2103 movl -556(fp),r1
2104 movl -560(fp),r2
2105 addl2 r1,r8
2106 bicl2 #0,r8
2107 cmpl r8,r1
2108 bgequ noname.183
2109 incl r2
2110noname.183:
2111 addl2 r2,r10
2112 bicl2 #0,r10
2113 cmpl r10,r2
2114 bgequ noname.184
2115 incl r9
2116noname.184:
2117
2118 movzwl 30(r6),r2
2119 bicl3 #-65536,(r7),r3
2120 movzwl 2(r7),r0
2121 bicl2 #-65536,r0
2122 bicl3 #-65536,28(r6),-572(fp)
2123 bicl3 #-65536,r2,-576(fp)
2124 mull3 r0,-572(fp),-564(fp)
2125 mull2 r3,-572(fp)
2126 mull3 r3,-576(fp),-568(fp)
2127 mull2 r0,-576(fp)
2128 addl3 -564(fp),-568(fp),r0
2129 bicl3 #0,r0,-564(fp)
2130 cmpl -564(fp),-568(fp)
2131 bgequ noname.185
2132 addl2 #65536,-576(fp)
2133noname.185:
2134 movzwl -562(fp),r0
2135 bicl2 #-65536,r0
2136 addl2 r0,-576(fp)
2137 bicl3 #-65536,-564(fp),r0
2138 ashl #16,r0,-568(fp)
2139 addl3 -568(fp),-572(fp),r0
2140 bicl3 #0,r0,-572(fp)
2141 cmpl -572(fp),-568(fp)
2142 bgequ noname.186
2143 incl -576(fp)
2144noname.186:
2145 movl -572(fp),r1
2146 movl -576(fp),r2
2147 addl2 r1,r8
2148 bicl2 #0,r8
2149 cmpl r8,r1
2150 bgequ noname.187
2151 incl r2
2152noname.187:
2153 addl2 r2,r10
2154 bicl2 #0,r10
2155 cmpl r10,r2
2156 bgequ noname.188
2157 incl r9
2158noname.188:
2159
2160 movl r8,28(r11)
2161
2162 clrl r8
2163
2164 movzwl 30(r6),r2
2165 bicl3 #-65536,4(r7),r3
2166 movzwl 6(r7),r0
2167 bicl2 #-65536,r0
2168 bicl3 #-65536,28(r6),-588(fp)
2169 bicl3 #-65536,r2,-592(fp)
2170 mull3 r0,-588(fp),-580(fp)
2171 mull2 r3,-588(fp)
2172 mull3 r3,-592(fp),-584(fp)
2173 mull2 r0,-592(fp)
2174 addl3 -580(fp),-584(fp),r0
2175 bicl3 #0,r0,-580(fp)
2176 cmpl -580(fp),-584(fp)
2177 bgequ noname.189
2178 addl2 #65536,-592(fp)
2179noname.189:
2180 movzwl -578(fp),r0
2181 bicl2 #-65536,r0
2182 addl2 r0,-592(fp)
2183 bicl3 #-65536,-580(fp),r0
2184 ashl #16,r0,-584(fp)
2185 addl3 -584(fp),-588(fp),r0
2186 bicl3 #0,r0,-588(fp)
2187 cmpl -588(fp),-584(fp)
2188 bgequ noname.190
2189 incl -592(fp)
2190noname.190:
2191 movl -588(fp),r1
2192 movl -592(fp),r2
2193 addl2 r1,r10
2194 bicl2 #0,r10
2195 cmpl r10,r1
2196 bgequ noname.191
2197 incl r2
2198noname.191:
2199 addl2 r2,r9
2200 bicl2 #0,r9
2201 cmpl r9,r2
2202 bgequ noname.192
2203 incl r8
2204noname.192:
2205
2206 movzwl 26(r6),r2
2207 bicl3 #-65536,8(r7),r3
2208 movzwl 10(r7),r0
2209 bicl2 #-65536,r0
2210 bicl3 #-65536,24(r6),-604(fp)
2211 bicl3 #-65536,r2,-608(fp)
2212 mull3 r0,-604(fp),-596(fp)
2213 mull2 r3,-604(fp)
2214 mull3 r3,-608(fp),-600(fp)
2215 mull2 r0,-608(fp)
2216 addl3 -596(fp),-600(fp),r0
2217 bicl3 #0,r0,-596(fp)
2218 cmpl -596(fp),-600(fp)
2219 bgequ noname.193
2220 addl2 #65536,-608(fp)
2221noname.193:
2222 movzwl -594(fp),r0
2223 bicl2 #-65536,r0
2224 addl2 r0,-608(fp)
2225 bicl3 #-65536,-596(fp),r0
2226 ashl #16,r0,-600(fp)
2227 addl3 -600(fp),-604(fp),r0
2228 bicl3 #0,r0,-604(fp)
2229 cmpl -604(fp),-600(fp)
2230 bgequ noname.194
2231 incl -608(fp)
2232noname.194:
2233 movl -604(fp),r1
2234 movl -608(fp),r2
2235 addl2 r1,r10
2236 bicl2 #0,r10
2237 cmpl r10,r1
2238 bgequ noname.195
2239 incl r2
2240noname.195:
2241 addl2 r2,r9
2242 bicl2 #0,r9
2243 cmpl r9,r2
2244 bgequ noname.196
2245 incl r8
2246noname.196:
2247
2248 movzwl 22(r6),r2
2249 bicl3 #-65536,12(r7),r3
2250 movzwl 14(r7),r0
2251 bicl2 #-65536,r0
2252 bicl3 #-65536,20(r6),-620(fp)
2253 bicl3 #-65536,r2,-624(fp)
2254 mull3 r0,-620(fp),-612(fp)
2255 mull2 r3,-620(fp)
2256 mull3 r3,-624(fp),-616(fp)
2257 mull2 r0,-624(fp)
2258 addl3 -612(fp),-616(fp),r0
2259 bicl3 #0,r0,-612(fp)
2260 cmpl -612(fp),-616(fp)
2261 bgequ noname.197
2262 addl2 #65536,-624(fp)
2263noname.197:
2264 movzwl -610(fp),r0
2265 bicl2 #-65536,r0
2266 addl2 r0,-624(fp)
2267 bicl3 #-65536,-612(fp),r0
2268 ashl #16,r0,-616(fp)
2269 addl3 -616(fp),-620(fp),r0
2270 bicl3 #0,r0,-620(fp)
2271 cmpl -620(fp),-616(fp)
2272 bgequ noname.198
2273 incl -624(fp)
2274noname.198:
2275 movl -620(fp),r1
2276 movl -624(fp),r2
2277 addl2 r1,r10
2278 bicl2 #0,r10
2279 cmpl r10,r1
2280 bgequ noname.199
2281 incl r2
2282noname.199:
2283 addl2 r2,r9
2284 bicl2 #0,r9
2285 cmpl r9,r2
2286 bgequ noname.200
2287 incl r8
2288noname.200:
2289
2290 movzwl 18(r6),r2
2291 bicl3 #-65536,16(r7),r3
2292 movzwl 18(r7),r0
2293 bicl2 #-65536,r0
2294 bicl3 #-65536,16(r6),-636(fp)
2295 bicl3 #-65536,r2,-640(fp)
2296 mull3 r0,-636(fp),-628(fp)
2297 mull2 r3,-636(fp)
2298 mull3 r3,-640(fp),-632(fp)
2299 mull2 r0,-640(fp)
2300 addl3 -628(fp),-632(fp),r0
2301 bicl3 #0,r0,-628(fp)
2302 cmpl -628(fp),-632(fp)
2303 bgequ noname.201
2304 addl2 #65536,-640(fp)
2305noname.201:
2306 movzwl -626(fp),r0
2307 bicl2 #-65536,r0
2308 addl2 r0,-640(fp)
2309 bicl3 #-65536,-628(fp),r0
2310 ashl #16,r0,-632(fp)
2311 addl3 -632(fp),-636(fp),r0
2312 bicl3 #0,r0,-636(fp)
2313 cmpl -636(fp),-632(fp)
2314 bgequ noname.202
2315 incl -640(fp)
2316noname.202:
2317 movl -636(fp),r1
2318 movl -640(fp),r2
2319 addl2 r1,r10
2320 bicl2 #0,r10
2321 cmpl r10,r1
2322 bgequ noname.203
2323 incl r2
2324noname.203:
2325 addl2 r2,r9
2326 bicl2 #0,r9
2327 cmpl r9,r2
2328 bgequ noname.204
2329 incl r8
2330noname.204:
2331
2332 movzwl 14(r6),r2
2333 bicl3 #-65536,20(r7),r3
2334 movzwl 22(r7),r0
2335 bicl2 #-65536,r0
2336 bicl3 #-65536,12(r6),-652(fp)
2337 bicl3 #-65536,r2,-656(fp)
2338 mull3 r0,-652(fp),-644(fp)
2339 mull2 r3,-652(fp)
2340 mull3 r3,-656(fp),-648(fp)
2341 mull2 r0,-656(fp)
2342 addl3 -644(fp),-648(fp),r0
2343 bicl3 #0,r0,-644(fp)
2344 cmpl -644(fp),-648(fp)
2345 bgequ noname.205
2346 addl2 #65536,-656(fp)
2347noname.205:
2348 movzwl -642(fp),r0
2349 bicl2 #-65536,r0
2350 addl2 r0,-656(fp)
2351 bicl3 #-65536,-644(fp),r0
2352 ashl #16,r0,-648(fp)
2353 addl3 -648(fp),-652(fp),r0
2354 bicl3 #0,r0,-652(fp)
2355 cmpl -652(fp),-648(fp)
2356 bgequ noname.206
2357 incl -656(fp)
2358noname.206:
2359 movl -652(fp),r1
2360 movl -656(fp),r2
2361 addl2 r1,r10
2362 bicl2 #0,r10
2363 cmpl r10,r1
2364 bgequ noname.207
2365 incl r2
2366noname.207:
2367 addl2 r2,r9
2368 bicl2 #0,r9
2369 cmpl r9,r2
2370 bgequ noname.208
2371 incl r8
2372noname.208:
2373
2374 movzwl 10(r6),r2
2375 bicl3 #-65536,24(r7),r3
2376 movzwl 26(r7),r0
2377 bicl2 #-65536,r0
2378 bicl3 #-65536,8(r6),-668(fp)
2379 bicl3 #-65536,r2,-672(fp)
2380 mull3 r0,-668(fp),-660(fp)
2381 mull2 r3,-668(fp)
2382 mull3 r3,-672(fp),-664(fp)
2383 mull2 r0,-672(fp)
2384 addl3 -660(fp),-664(fp),r0
2385 bicl3 #0,r0,-660(fp)
2386 cmpl -660(fp),-664(fp)
2387 bgequ noname.209
2388 addl2 #65536,-672(fp)
2389noname.209:
2390 movzwl -658(fp),r0
2391 bicl2 #-65536,r0
2392 addl2 r0,-672(fp)
2393 bicl3 #-65536,-660(fp),r0
2394 ashl #16,r0,-664(fp)
2395 addl3 -664(fp),-668(fp),r0
2396 bicl3 #0,r0,-668(fp)
2397 cmpl -668(fp),-664(fp)
2398 bgequ noname.210
2399 incl -672(fp)
2400noname.210:
2401 movl -668(fp),r1
2402 movl -672(fp),r2
2403 addl2 r1,r10
2404 bicl2 #0,r10
2405 cmpl r10,r1
2406 bgequ noname.211
2407 incl r2
2408noname.211:
2409 addl2 r2,r9
2410 bicl2 #0,r9
2411 cmpl r9,r2
2412 bgequ noname.212
2413 incl r8
2414noname.212:
2415
2416 movzwl 6(r6),r2
2417 bicl3 #-65536,28(r7),r3
2418 movzwl 30(r7),r0
2419 bicl2 #-65536,r0
2420 bicl3 #-65536,4(r6),-684(fp)
2421 bicl3 #-65536,r2,-688(fp)
2422 mull3 r0,-684(fp),-676(fp)
2423 mull2 r3,-684(fp)
2424 mull3 r3,-688(fp),-680(fp)
2425 mull2 r0,-688(fp)
2426 addl3 -676(fp),-680(fp),r0
2427 bicl3 #0,r0,-676(fp)
2428 cmpl -676(fp),-680(fp)
2429 bgequ noname.213
2430 addl2 #65536,-688(fp)
2431noname.213:
2432 movzwl -674(fp),r0
2433 bicl2 #-65536,r0
2434 addl2 r0,-688(fp)
2435 bicl3 #-65536,-676(fp),r0
2436 ashl #16,r0,-680(fp)
2437 addl3 -680(fp),-684(fp),r0
2438 bicl3 #0,r0,-684(fp)
2439 cmpl -684(fp),-680(fp)
2440 bgequ noname.214
2441 incl -688(fp)
2442noname.214:
2443 movl -684(fp),r1
2444 movl -688(fp),r2
2445 addl2 r1,r10
2446 bicl2 #0,r10
2447 cmpl r10,r1
2448 bgequ noname.215
2449 incl r2
2450noname.215:
2451 addl2 r2,r9
2452 bicl2 #0,r9
2453 cmpl r9,r2
2454 bgequ noname.216
2455 incl r8
2456noname.216:
2457
2458 movl r10,32(r11)
2459
2460 clrl r10
2461
2462 movzwl 10(r6),r2
2463 bicl3 #-65536,28(r7),r3
2464 movzwl 30(r7),r0
2465 bicl2 #-65536,r0
2466 bicl3 #-65536,8(r6),-700(fp)
2467 bicl3 #-65536,r2,-704(fp)
2468 mull3 r0,-700(fp),-692(fp)
2469 mull2 r3,-700(fp)
2470 mull3 r3,-704(fp),-696(fp)
2471 mull2 r0,-704(fp)
2472 addl3 -692(fp),-696(fp),r0
2473 bicl3 #0,r0,-692(fp)
2474 cmpl -692(fp),-696(fp)
2475 bgequ noname.217
2476 addl2 #65536,-704(fp)
2477noname.217:
2478 movzwl -690(fp),r0
2479 bicl2 #-65536,r0
2480 addl2 r0,-704(fp)
2481 bicl3 #-65536,-692(fp),r0
2482 ashl #16,r0,-696(fp)
2483 addl3 -696(fp),-700(fp),r0
2484 bicl3 #0,r0,-700(fp)
2485 cmpl -700(fp),-696(fp)
2486 bgequ noname.218
2487 incl -704(fp)
2488noname.218:
2489 movl -700(fp),r1
2490 movl -704(fp),r2
2491 addl2 r1,r9
2492 bicl2 #0,r9
2493 cmpl r9,r1
2494 bgequ noname.219
2495 incl r2
2496noname.219:
2497 addl2 r2,r8
2498 bicl2 #0,r8
2499 cmpl r8,r2
2500 bgequ noname.220
2501 incl r10
2502noname.220:
2503
2504 movzwl 14(r6),r2
2505 bicl3 #-65536,24(r7),r3
2506 movzwl 26(r7),r0
2507 bicl2 #-65536,r0
2508 bicl3 #-65536,12(r6),-716(fp)
2509 bicl3 #-65536,r2,-720(fp)
2510 mull3 r0,-716(fp),-708(fp)
2511 mull2 r3,-716(fp)
2512 mull3 r3,-720(fp),-712(fp)
2513 mull2 r0,-720(fp)
2514 addl3 -708(fp),-712(fp),r0
2515 bicl3 #0,r0,-708(fp)
2516 cmpl -708(fp),-712(fp)
2517 bgequ noname.221
2518 addl2 #65536,-720(fp)
2519noname.221:
2520 movzwl -706(fp),r0
2521 bicl2 #-65536,r0
2522 addl2 r0,-720(fp)
2523 bicl3 #-65536,-708(fp),r0
2524 ashl #16,r0,-712(fp)
2525 addl3 -712(fp),-716(fp),r0
2526 bicl3 #0,r0,-716(fp)
2527 cmpl -716(fp),-712(fp)
2528 bgequ noname.222
2529 incl -720(fp)
2530noname.222:
2531 movl -716(fp),r1
2532 movl -720(fp),r2
2533 addl2 r1,r9
2534 bicl2 #0,r9
2535 cmpl r9,r1
2536 bgequ noname.223
2537 incl r2
2538noname.223:
2539 addl2 r2,r8
2540 bicl2 #0,r8
2541 cmpl r8,r2
2542 bgequ noname.224
2543 incl r10
2544noname.224:
2545
2546 movzwl 18(r6),r2
2547 bicl3 #-65536,20(r7),r3
2548 movzwl 22(r7),r0
2549 bicl2 #-65536,r0
2550 bicl3 #-65536,16(r6),-732(fp)
2551 bicl3 #-65536,r2,-736(fp)
2552 mull3 r0,-732(fp),-724(fp)
2553 mull2 r3,-732(fp)
2554 mull3 r3,-736(fp),-728(fp)
2555 mull2 r0,-736(fp)
2556 addl3 -724(fp),-728(fp),r0
2557 bicl3 #0,r0,-724(fp)
2558 cmpl -724(fp),-728(fp)
2559 bgequ noname.225
2560 addl2 #65536,-736(fp)
2561noname.225:
2562 movzwl -722(fp),r0
2563 bicl2 #-65536,r0
2564 addl2 r0,-736(fp)
2565 bicl3 #-65536,-724(fp),r0
2566 ashl #16,r0,-728(fp)
2567 addl3 -728(fp),-732(fp),r0
2568 bicl3 #0,r0,-732(fp)
2569 cmpl -732(fp),-728(fp)
2570 bgequ noname.226
2571 incl -736(fp)
2572noname.226:
2573 movl -732(fp),r1
2574 movl -736(fp),r2
2575 addl2 r1,r9
2576 bicl2 #0,r9
2577 cmpl r9,r1
2578 bgequ noname.227
2579 incl r2
2580noname.227:
2581 addl2 r2,r8
2582 bicl2 #0,r8
2583 cmpl r8,r2
2584 bgequ noname.228
2585 incl r10
2586noname.228:
2587
2588 movzwl 22(r6),r2
2589 bicl3 #-65536,16(r7),r3
2590 movzwl 18(r7),r0
2591 bicl2 #-65536,r0
2592 bicl3 #-65536,20(r6),-748(fp)
2593 bicl3 #-65536,r2,-752(fp)
2594 mull3 r0,-748(fp),-740(fp)
2595 mull2 r3,-748(fp)
2596 mull3 r3,-752(fp),-744(fp)
2597 mull2 r0,-752(fp)
2598 addl3 -740(fp),-744(fp),r0
2599 bicl3 #0,r0,-740(fp)
2600 cmpl -740(fp),-744(fp)
2601 bgequ noname.229
2602 addl2 #65536,-752(fp)
2603noname.229:
2604 movzwl -738(fp),r0
2605 bicl2 #-65536,r0
2606 addl2 r0,-752(fp)
2607 bicl3 #-65536,-740(fp),r0
2608 ashl #16,r0,-744(fp)
2609 addl3 -744(fp),-748(fp),r0
2610 bicl3 #0,r0,-748(fp)
2611 cmpl -748(fp),-744(fp)
2612 bgequ noname.230
2613 incl -752(fp)
2614noname.230:
2615 movl -748(fp),r1
2616 movl -752(fp),r2
2617 addl2 r1,r9
2618 bicl2 #0,r9
2619 cmpl r9,r1
2620 bgequ noname.231
2621 incl r2
2622noname.231:
2623 addl2 r2,r8
2624 bicl2 #0,r8
2625 cmpl r8,r2
2626 bgequ noname.232
2627 incl r10
2628noname.232:
2629
2630 movzwl 26(r6),r2
2631 bicl3 #-65536,12(r7),r3
2632 movzwl 14(r7),r0
2633 bicl2 #-65536,r0
2634 bicl3 #-65536,24(r6),-764(fp)
2635 bicl3 #-65536,r2,-768(fp)
2636 mull3 r0,-764(fp),-756(fp)
2637 mull2 r3,-764(fp)
2638 mull3 r3,-768(fp),-760(fp)
2639 mull2 r0,-768(fp)
2640 addl3 -756(fp),-760(fp),r0
2641 bicl3 #0,r0,-756(fp)
2642 cmpl -756(fp),-760(fp)
2643 bgequ noname.233
2644 addl2 #65536,-768(fp)
2645noname.233:
2646 movzwl -754(fp),r0
2647 bicl2 #-65536,r0
2648 addl2 r0,-768(fp)
2649 bicl3 #-65536,-756(fp),r0
2650 ashl #16,r0,-760(fp)
2651 addl3 -760(fp),-764(fp),r0
2652 bicl3 #0,r0,-764(fp)
2653 cmpl -764(fp),-760(fp)
2654 bgequ noname.234
2655 incl -768(fp)
2656noname.234:
2657 movl -764(fp),r1
2658 movl -768(fp),r2
2659 addl2 r1,r9
2660 bicl2 #0,r9
2661 cmpl r9,r1
2662 bgequ noname.235
2663 incl r2
2664noname.235:
2665 addl2 r2,r8
2666 bicl2 #0,r8
2667 cmpl r8,r2
2668 bgequ noname.236
2669 incl r10
2670noname.236:
2671
2672 bicl3 #-65536,28(r6),r3
2673 movzwl 30(r6),r1
2674 bicl2 #-65536,r1
2675 bicl3 #-65536,8(r7),r2
2676 movzwl 10(r7),r0
2677 bicl2 #-65536,r0
2678 movl r3,r5
2679 movl r1,r4
2680 mull3 r0,r5,-772(fp)
2681 mull2 r2,r5
2682 mull3 r2,r4,-776(fp)
2683 mull2 r0,r4
2684 addl3 -772(fp),-776(fp),r0
2685 bicl3 #0,r0,-772(fp)
2686 cmpl -772(fp),-776(fp)
2687 bgequ noname.237
2688 addl2 #65536,r4
2689noname.237:
2690 movzwl -770(fp),r0
2691 bicl2 #-65536,r0
2692 addl2 r0,r4
2693 bicl3 #-65536,-772(fp),r0
2694 ashl #16,r0,-776(fp)
2695 addl2 -776(fp),r5
2696 bicl2 #0,r5
2697 cmpl r5,-776(fp)
2698 bgequ noname.238
2699 incl r4
2700noname.238:
2701 movl r5,r1
2702 movl r4,r2
2703 addl2 r1,r9
2704 bicl2 #0,r9
2705 cmpl r9,r1
2706 bgequ noname.239
2707 incl r2
2708noname.239:
2709 addl2 r2,r8
2710 bicl2 #0,r8
2711 cmpl r8,r2
2712 bgequ noname.240
2713 incl r10
2714noname.240:
2715
2716 movl r9,36(r11)
2717
2718 clrl r9
2719
2720 bicl3 #-65536,28(r6),r3
2721 movzwl 30(r6),r1
2722 bicl2 #-65536,r1
2723 bicl3 #-65536,12(r7),r2
2724 movzwl 14(r7),r0
2725 bicl2 #-65536,r0
2726 movl r3,r5
2727 movl r1,r4
2728 mull3 r0,r5,-780(fp)
2729 mull2 r2,r5
2730 mull3 r2,r4,-784(fp)
2731 mull2 r0,r4
2732 addl3 -780(fp),-784(fp),r0
2733 bicl3 #0,r0,-780(fp)
2734 cmpl -780(fp),-784(fp)
2735 bgequ noname.241
2736 addl2 #65536,r4
2737noname.241:
2738 movzwl -778(fp),r0
2739 bicl2 #-65536,r0
2740 addl2 r0,r4
2741 bicl3 #-65536,-780(fp),r0
2742 ashl #16,r0,-784(fp)
2743 addl2 -784(fp),r5
2744 bicl2 #0,r5
2745 cmpl r5,-784(fp)
2746 bgequ noname.242
2747 incl r4
2748noname.242:
2749 movl r5,r1
2750 movl r4,r2
2751 addl2 r1,r8
2752 bicl2 #0,r8
2753 cmpl r8,r1
2754 bgequ noname.243
2755 incl r2
2756noname.243:
2757 addl2 r2,r10
2758 bicl2 #0,r10
2759 cmpl r10,r2
2760 bgequ noname.244
2761 incl r9
2762noname.244:
2763
2764 bicl3 #-65536,24(r6),r3
2765 movzwl 26(r6),r1
2766 bicl2 #-65536,r1
2767 bicl3 #-65536,16(r7),r2
2768 movzwl 18(r7),r0
2769 bicl2 #-65536,r0
2770 movl r3,r5
2771 movl r1,r4
2772 mull3 r0,r5,-788(fp)
2773 mull2 r2,r5
2774 mull3 r2,r4,-792(fp)
2775 mull2 r0,r4
2776 addl3 -788(fp),-792(fp),r0
2777 bicl3 #0,r0,-788(fp)
2778 cmpl -788(fp),-792(fp)
2779 bgequ noname.245
2780 addl2 #65536,r4
2781noname.245:
2782 movzwl -786(fp),r0
2783 bicl2 #-65536,r0
2784 addl2 r0,r4
2785 bicl3 #-65536,-788(fp),r0
2786 ashl #16,r0,-792(fp)
2787 addl2 -792(fp),r5
2788 bicl2 #0,r5
2789 cmpl r5,-792(fp)
2790 bgequ noname.246
2791 incl r4
2792noname.246:
2793 movl r5,r1
2794 movl r4,r2
2795 addl2 r1,r8
2796 bicl2 #0,r8
2797 cmpl r8,r1
2798 bgequ noname.247
2799 incl r2
2800noname.247:
2801 addl2 r2,r10
2802 bicl2 #0,r10
2803 cmpl r10,r2
2804 bgequ noname.248
2805 incl r9
2806noname.248:
2807
2808 bicl3 #-65536,20(r6),r3
2809 movzwl 22(r6),r1
2810 bicl2 #-65536,r1
2811 bicl3 #-65536,20(r7),r2
2812 movzwl 22(r7),r0
2813 bicl2 #-65536,r0
2814 movl r3,r5
2815 movl r1,r4
2816 mull3 r0,r5,-796(fp)
2817 mull2 r2,r5
2818 mull3 r2,r4,-800(fp)
2819 mull2 r0,r4
2820 addl3 -796(fp),-800(fp),r0
2821 bicl3 #0,r0,-796(fp)
2822 cmpl -796(fp),-800(fp)
2823 bgequ noname.249
2824 addl2 #65536,r4
2825noname.249:
2826 movzwl -794(fp),r0
2827 bicl2 #-65536,r0
2828 addl2 r0,r4
2829 bicl3 #-65536,-796(fp),r0
2830 ashl #16,r0,-800(fp)
2831 addl2 -800(fp),r5
2832 bicl2 #0,r5
2833 cmpl r5,-800(fp)
2834 bgequ noname.250
2835 incl r4
2836noname.250:
2837 movl r5,r1
2838 movl r4,r2
2839 addl2 r1,r8
2840 bicl2 #0,r8
2841 cmpl r8,r1
2842 bgequ noname.251
2843 incl r2
2844noname.251:
2845 addl2 r2,r10
2846 bicl2 #0,r10
2847 cmpl r10,r2
2848 bgequ noname.252
2849 incl r9
2850noname.252:
2851
2852 bicl3 #-65536,16(r6),r3
2853 movzwl 18(r6),r1
2854 bicl2 #-65536,r1
2855 bicl3 #-65536,24(r7),r2
2856 movzwl 26(r7),r0
2857 bicl2 #-65536,r0
2858 movl r3,r5
2859 movl r1,r4
2860 mull3 r0,r5,-804(fp)
2861 mull2 r2,r5
2862 mull3 r2,r4,-808(fp)
2863 mull2 r0,r4
2864 addl3 -804(fp),-808(fp),r0
2865 bicl3 #0,r0,-804(fp)
2866 cmpl -804(fp),-808(fp)
2867 bgequ noname.253
2868 addl2 #65536,r4
2869noname.253:
2870 movzwl -802(fp),r0
2871 bicl2 #-65536,r0
2872 addl2 r0,r4
2873 bicl3 #-65536,-804(fp),r0
2874 ashl #16,r0,-808(fp)
2875 addl2 -808(fp),r5
2876 bicl2 #0,r5
2877 cmpl r5,-808(fp)
2878 bgequ noname.254
2879 incl r4
2880noname.254:
2881 movl r5,r1
2882 movl r4,r2
2883 addl2 r1,r8
2884 bicl2 #0,r8
2885 cmpl r8,r1
2886 bgequ noname.255
2887 incl r2
2888noname.255:
2889 addl2 r2,r10
2890 bicl2 #0,r10
2891 cmpl r10,r2
2892 bgequ noname.256
2893 incl r9
2894noname.256:
2895
2896 bicl3 #-65536,12(r6),r3
2897 movzwl 14(r6),r1
2898 bicl2 #-65536,r1
2899 bicl3 #-65536,28(r7),r2
2900 movzwl 30(r7),r0
2901 bicl2 #-65536,r0
2902 movl r3,r5
2903 movl r1,r4
2904 mull3 r0,r5,-812(fp)
2905 mull2 r2,r5
2906 mull3 r2,r4,-816(fp)
2907 mull2 r0,r4
2908 addl3 -812(fp),-816(fp),r0
2909 bicl3 #0,r0,-812(fp)
2910 cmpl -812(fp),-816(fp)
2911 bgequ noname.257
2912 addl2 #65536,r4
2913noname.257:
2914 movzwl -810(fp),r0
2915 bicl2 #-65536,r0
2916 addl2 r0,r4
2917 bicl3 #-65536,-812(fp),r0
2918 ashl #16,r0,-816(fp)
2919 addl2 -816(fp),r5
2920 bicl2 #0,r5
2921 cmpl r5,-816(fp)
2922 bgequ noname.258
2923 incl r4
2924noname.258:
2925 movl r5,r1
2926 movl r4,r2
2927 addl2 r1,r8
2928 bicl2 #0,r8
2929 cmpl r8,r1
2930 bgequ noname.259
2931 incl r2
2932noname.259:
2933 addl2 r2,r10
2934 bicl2 #0,r10
2935 cmpl r10,r2
2936 bgequ noname.260
2937 incl r9
2938noname.260:
2939
2940 movl r8,40(r11)
2941
2942 clrl r8
2943
2944 bicl3 #-65536,16(r6),r3
2945 movzwl 18(r6),r2
2946 bicl3 #-65536,28(r7),r1
2947 movzwl 30(r7),r0
2948 bicl2 #-65536,r0
2949 movl r3,r4
2950 bicl3 #-65536,r2,-828(fp)
2951 mull3 r0,r4,-820(fp)
2952 mull2 r1,r4
2953 mull3 r1,-828(fp),-824(fp)
2954 mull2 r0,-828(fp)
2955 addl3 -820(fp),-824(fp),r0
2956 bicl3 #0,r0,-820(fp)
2957 cmpl -820(fp),-824(fp)
2958 bgequ noname.261
2959 addl2 #65536,-828(fp)
2960noname.261:
2961 movzwl -818(fp),r0
2962 bicl2 #-65536,r0
2963 addl2 r0,-828(fp)
2964 bicl3 #-65536,-820(fp),r0
2965 ashl #16,r0,-824(fp)
2966 addl2 -824(fp),r4
2967 bicl2 #0,r4
2968 cmpl r4,-824(fp)
2969 bgequ noname.262
2970 incl -828(fp)
2971noname.262:
2972 movl r4,r1
2973 movl -828(fp),r2
2974 addl2 r1,r10
2975 bicl2 #0,r10
2976 cmpl r10,r1
2977 bgequ noname.263
2978 incl r2
2979noname.263:
2980 addl2 r2,r9
2981 bicl2 #0,r9
2982 cmpl r9,r2
2983 bgequ noname.264
2984 incl r8
2985noname.264:
2986
2987 movzwl 22(r6),r2
2988 bicl3 #-65536,24(r7),r3
2989 movzwl 26(r7),r0
2990 bicl2 #-65536,r0
2991 bicl3 #-65536,20(r6),-840(fp)
2992 bicl3 #-65536,r2,-844(fp)
2993 mull3 r0,-840(fp),-832(fp)
2994 mull2 r3,-840(fp)
2995 mull3 r3,-844(fp),-836(fp)
2996 mull2 r0,-844(fp)
2997 addl3 -832(fp),-836(fp),r0
2998 bicl3 #0,r0,-832(fp)
2999 cmpl -832(fp),-836(fp)
3000 bgequ noname.265
3001 addl2 #65536,-844(fp)
3002noname.265:
3003 movzwl -830(fp),r0
3004 bicl2 #-65536,r0
3005 addl2 r0,-844(fp)
3006 bicl3 #-65536,-832(fp),r0
3007 ashl #16,r0,-836(fp)
3008 addl3 -836(fp),-840(fp),r0
3009 bicl3 #0,r0,-840(fp)
3010 cmpl -840(fp),-836(fp)
3011 bgequ noname.266
3012 incl -844(fp)
3013noname.266:
3014 movl -840(fp),r1
3015 movl -844(fp),r2
3016 addl2 r1,r10
3017 bicl2 #0,r10
3018 cmpl r10,r1
3019 bgequ noname.267
3020 incl r2
3021noname.267:
3022 addl2 r2,r9
3023 bicl2 #0,r9
3024 cmpl r9,r2
3025 bgequ noname.268
3026 incl r8
3027noname.268:
3028
3029 bicl3 #-65536,24(r6),r3
3030 movzwl 26(r6),r1
3031 bicl2 #-65536,r1
3032 bicl3 #-65536,20(r7),r2
3033 movzwl 22(r7),r0
3034 bicl2 #-65536,r0
3035 movl r3,r5
3036 movl r1,r4
3037 mull3 r0,r5,-848(fp)
3038 mull2 r2,r5
3039 mull3 r2,r4,-852(fp)
3040 mull2 r0,r4
3041 addl3 -848(fp),-852(fp),r0
3042 bicl3 #0,r0,-848(fp)
3043 cmpl -848(fp),-852(fp)
3044 bgequ noname.269
3045 addl2 #65536,r4
3046noname.269:
3047 movzwl -846(fp),r0
3048 bicl2 #-65536,r0
3049 addl2 r0,r4
3050 bicl3 #-65536,-848(fp),r0
3051 ashl #16,r0,-852(fp)
3052 addl2 -852(fp),r5
3053 bicl2 #0,r5
3054 cmpl r5,-852(fp)
3055 bgequ noname.270
3056 incl r4
3057noname.270:
3058 movl r5,r1
3059 movl r4,r2
3060 addl2 r1,r10
3061 bicl2 #0,r10
3062 cmpl r10,r1
3063 bgequ noname.271
3064 incl r2
3065noname.271:
3066 addl2 r2,r9
3067 bicl2 #0,r9
3068 cmpl r9,r2
3069 bgequ noname.272
3070 incl r8
3071noname.272:
3072
3073 bicl3 #-65536,28(r6),r3
3074 movzwl 30(r6),r1
3075 bicl2 #-65536,r1
3076 bicl3 #-65536,16(r7),r2
3077 movzwl 18(r7),r0
3078 bicl2 #-65536,r0
3079 movl r3,r5
3080 movl r1,r4
3081 mull3 r0,r5,-856(fp)
3082 mull2 r2,r5
3083 mull3 r2,r4,-860(fp)
3084 mull2 r0,r4
3085 addl3 -856(fp),-860(fp),r0
3086 bicl3 #0,r0,-856(fp)
3087 cmpl -856(fp),-860(fp)
3088 bgequ noname.273
3089 addl2 #65536,r4
3090noname.273:
3091 movzwl -854(fp),r0
3092 bicl2 #-65536,r0
3093 addl2 r0,r4
3094 bicl3 #-65536,-856(fp),r0
3095 ashl #16,r0,-860(fp)
3096 addl2 -860(fp),r5
3097 bicl2 #0,r5
3098 cmpl r5,-860(fp)
3099 bgequ noname.274
3100 incl r4
3101noname.274:
3102 movl r5,r1
3103 movl r4,r2
3104 addl2 r1,r10
3105 bicl2 #0,r10
3106 cmpl r10,r1
3107 bgequ noname.275
3108 incl r2
3109noname.275:
3110 addl2 r2,r9
3111 bicl2 #0,r9
3112 cmpl r9,r2
3113 bgequ noname.276
3114 incl r8
3115noname.276:
3116
3117 movl r10,44(r11)
3118
3119 clrl r10
3120
3121 bicl3 #-65536,28(r6),r3
3122 movzwl 30(r6),r1
3123 bicl2 #-65536,r1
3124 bicl3 #-65536,20(r7),r2
3125 movzwl 22(r7),r0
3126 bicl2 #-65536,r0
3127 movl r3,r5
3128 movl r1,r4
3129 mull3 r0,r5,-864(fp)
3130 mull2 r2,r5
3131 mull3 r2,r4,-868(fp)
3132 mull2 r0,r4
3133 addl3 -864(fp),-868(fp),r0
3134 bicl3 #0,r0,-864(fp)
3135 cmpl -864(fp),-868(fp)
3136 bgequ noname.277
3137 addl2 #65536,r4
3138noname.277:
3139 movzwl -862(fp),r0
3140 bicl2 #-65536,r0
3141 addl2 r0,r4
3142 bicl3 #-65536,-864(fp),r0
3143 ashl #16,r0,-868(fp)
3144 addl2 -868(fp),r5
3145 bicl2 #0,r5
3146 cmpl r5,-868(fp)
3147 bgequ noname.278
3148 incl r4
3149noname.278:
3150 movl r5,r1
3151 movl r4,r2
3152 addl2 r1,r9
3153 bicl2 #0,r9
3154 cmpl r9,r1
3155 bgequ noname.279
3156 incl r2
3157noname.279:
3158 addl2 r2,r8
3159 bicl2 #0,r8
3160 cmpl r8,r2
3161 bgequ noname.280
3162 incl r10
3163noname.280:
3164
3165 bicl3 #-65536,24(r6),r3
3166 movzwl 26(r6),r1
3167 bicl2 #-65536,r1
3168 bicl3 #-65536,24(r7),r2
3169 movzwl 26(r7),r0
3170 bicl2 #-65536,r0
3171 movl r3,r5
3172 movl r1,r4
3173 mull3 r0,r5,-872(fp)
3174 mull2 r2,r5
3175 mull3 r2,r4,-876(fp)
3176 mull2 r0,r4
3177 addl3 -872(fp),-876(fp),r0
3178 bicl3 #0,r0,-872(fp)
3179 cmpl -872(fp),-876(fp)
3180 bgequ noname.281
3181 addl2 #65536,r4
3182noname.281:
3183 movzwl -870(fp),r0
3184 bicl2 #-65536,r0
3185 addl2 r0,r4
3186 bicl3 #-65536,-872(fp),r0
3187 ashl #16,r0,-876(fp)
3188 addl2 -876(fp),r5
3189 bicl2 #0,r5
3190 cmpl r5,-876(fp)
3191 bgequ noname.282
3192 incl r4
3193noname.282:
3194 movl r5,r1
3195 movl r4,r2
3196 addl2 r1,r9
3197 bicl2 #0,r9
3198 cmpl r9,r1
3199 bgequ noname.283
3200 incl r2
3201noname.283:
3202 addl2 r2,r8
3203 bicl2 #0,r8
3204 cmpl r8,r2
3205 bgequ noname.284
3206 incl r10
3207noname.284:
3208
3209 bicl3 #-65536,20(r6),r3
3210 movzwl 22(r6),r1
3211 bicl2 #-65536,r1
3212 bicl3 #-65536,28(r7),r2
3213 movzwl 30(r7),r0
3214 bicl2 #-65536,r0
3215 movl r3,r5
3216 movl r1,r4
3217 mull3 r0,r5,-880(fp)
3218 mull2 r2,r5
3219 mull3 r2,r4,-884(fp)
3220 mull2 r0,r4
3221 addl3 -880(fp),-884(fp),r0
3222 bicl3 #0,r0,-880(fp)
3223 cmpl -880(fp),-884(fp)
3224 bgequ noname.285
3225 addl2 #65536,r4
3226noname.285:
3227 movzwl -878(fp),r0
3228 bicl2 #-65536,r0
3229 addl2 r0,r4
3230 bicl3 #-65536,-880(fp),r0
3231 ashl #16,r0,-884(fp)
3232 addl2 -884(fp),r5
3233 bicl2 #0,r5
3234 cmpl r5,-884(fp)
3235 bgequ noname.286
3236 incl r4
3237noname.286:
3238 movl r5,r1
3239 movl r4,r2
3240 addl2 r1,r9
3241 bicl2 #0,r9
3242 cmpl r9,r1
3243 bgequ noname.287
3244 incl r2
3245noname.287:
3246 addl2 r2,r8
3247 bicl2 #0,r8
3248 cmpl r8,r2
3249 bgequ noname.288
3250 incl r10
3251noname.288:
3252
3253 movl r9,48(r11)
3254
3255 clrl r9
3256
3257 bicl3 #-65536,24(r6),r3
3258 movzwl 26(r6),r1
3259 bicl2 #-65536,r1
3260 bicl3 #-65536,28(r7),r2
3261 movzwl 30(r7),r0
3262 bicl2 #-65536,r0
3263 movl r3,r5
3264 movl r1,r4
3265 mull3 r0,r5,-888(fp)
3266 mull2 r2,r5
3267 mull3 r2,r4,-892(fp)
3268 mull2 r0,r4
3269 addl3 -888(fp),-892(fp),r0
3270 bicl3 #0,r0,-888(fp)
3271 cmpl -888(fp),-892(fp)
3272 bgequ noname.289
3273 addl2 #65536,r4
3274noname.289:
3275 movzwl -886(fp),r0
3276 bicl2 #-65536,r0
3277 addl2 r0,r4
3278 bicl3 #-65536,-888(fp),r0
3279 ashl #16,r0,-892(fp)
3280 addl2 -892(fp),r5
3281 bicl2 #0,r5
3282 cmpl r5,-892(fp)
3283 bgequ noname.290
3284 incl r4
3285noname.290:
3286 movl r5,r1
3287 movl r4,r2
3288 addl2 r1,r8
3289 bicl2 #0,r8
3290 cmpl r8,r1
3291 bgequ noname.291
3292 incl r2
3293noname.291:
3294 addl2 r2,r10
3295 bicl2 #0,r10
3296 cmpl r10,r2
3297 bgequ noname.292
3298 incl r9
3299noname.292:
3300
3301 movzwl 30(r6),r2
3302 bicl3 #-65536,24(r7),r3
3303 movzwl 26(r7),r0
3304 bicl2 #-65536,r0
3305 bicl3 #-65536,28(r6),-904(fp)
3306 bicl3 #-65536,r2,-908(fp)
3307 mull3 r0,-904(fp),-896(fp)
3308 mull2 r3,-904(fp)
3309 mull3 r3,-908(fp),-900(fp)
3310 mull2 r0,-908(fp)
3311 addl3 -896(fp),-900(fp),r0
3312 bicl3 #0,r0,-896(fp)
3313 cmpl -896(fp),-900(fp)
3314 bgequ noname.293
3315 addl2 #65536,-908(fp)
3316noname.293:
3317 movzwl -894(fp),r0
3318 bicl2 #-65536,r0
3319 addl2 r0,-908(fp)
3320 bicl3 #-65536,-896(fp),r0
3321 ashl #16,r0,-900(fp)
3322 addl3 -900(fp),-904(fp),r0
3323 bicl3 #0,r0,-904(fp)
3324 cmpl -904(fp),-900(fp)
3325 bgequ noname.294
3326 incl -908(fp)
3327noname.294:
3328 movl -904(fp),r1
3329 movl -908(fp),r2
3330 addl2 r1,r8
3331 bicl2 #0,r8
3332 cmpl r8,r1
3333 bgequ noname.295
3334 incl r2
3335noname.295:
3336 addl2 r2,r10
3337 bicl2 #0,r10
3338 cmpl r10,r2
3339 bgequ noname.296
3340 incl r9
3341noname.296:
3342
3343 movl r8,52(r11)
3344
3345 clrl r8
3346
3347 movzwl 30(r6),r2
3348 bicl3 #-65536,28(r7),r3
3349 movzwl 30(r7),r0
3350 bicl2 #-65536,r0
3351 bicl3 #-65536,28(r6),-920(fp)
3352 bicl3 #-65536,r2,-924(fp)
3353 mull3 r0,-920(fp),-912(fp)
3354 mull2 r3,-920(fp)
3355 mull3 r3,-924(fp),-916(fp)
3356 mull2 r0,-924(fp)
3357 addl3 -912(fp),-916(fp),r0
3358 bicl3 #0,r0,-912(fp)
3359 cmpl -912(fp),-916(fp)
3360 bgequ noname.297
3361 addl2 #65536,-924(fp)
3362noname.297:
3363 movzwl -910(fp),r0
3364 bicl2 #-65536,r0
3365 addl2 r0,-924(fp)
3366 bicl3 #-65536,-912(fp),r0
3367 ashl #16,r0,-916(fp)
3368 addl3 -916(fp),-920(fp),r0
3369 bicl3 #0,r0,-920(fp)
3370 cmpl -920(fp),-916(fp)
3371 bgequ noname.298
3372 incl -924(fp)
3373noname.298:
3374 movl -920(fp),r1
3375 movl -924(fp),r2
3376 addl2 r1,r10
3377 bicl2 #0,r10
3378 cmpl r10,r1
3379 bgequ noname.299
3380 incl r2
3381noname.299:
3382 addl2 r2,r9
3383 bicl2 #0,r9
3384 cmpl r9,r2
3385 bgequ noname.300
3386 incl r8
3387noname.300:
3388
3389 movl r10,56(r11)
3390
3391 movl r9,60(r11)
3392
3393 ret
3394
3395
3396
3397;r=4 ;(AP)
3398;a=8 ;(AP)
3399;b=12 ;(AP)
3400;n=16 ;(AP) n by value (input)
3401
3402 .psect code,nowrt
3403
3404.entry BN_MUL_COMBA4,^m<r2,r3,r4,r5,r6,r7,r8,r9,r10,r11>
3405 movab -156(sp),sp
3406
3407 clrq r9
3408
3409 clrl r8
3410
3411 movl 8(ap),r6
3412 bicl3 #-65536,(r6),r3
3413 movzwl 2(r6),r2
3414 bicl2 #-65536,r2
3415 movl 12(ap),r7
3416 bicl3 #-65536,(r7),r1
3417 movzwl 2(r7),r0
3418 bicl2 #-65536,r0
3419 movl r3,r5
3420 movl r2,r4
3421 mull3 r0,r5,-4(fp)
3422 mull2 r1,r5
3423 mull3 r1,r4,-8(fp)
3424 mull2 r0,r4
3425 addl3 -4(fp),-8(fp),r0
3426 bicl3 #0,r0,-4(fp)
3427 cmpl -4(fp),-8(fp)
3428 bgequ noname.303
3429 addl2 #65536,r4
3430noname.303:
3431 movzwl -2(fp),r0
3432 bicl2 #-65536,r0
3433 addl2 r0,r4
3434 bicl3 #-65536,-4(fp),r0
3435 ashl #16,r0,-8(fp)
3436 addl2 -8(fp),r5
3437 bicl2 #0,r5
3438 cmpl r5,-8(fp)
3439 bgequ noname.304
3440 incl r4
3441noname.304:
3442 movl r5,r1
3443 movl r4,r2
3444 addl2 r1,r10
3445 bicl2 #0,r10
3446 cmpl r10,r1
3447 bgequ noname.305
3448 incl r2
3449noname.305:
3450 addl2 r2,r9
3451 bicl2 #0,r9
3452 cmpl r9,r2
3453 bgequ noname.306
3454 incl r8
3455noname.306:
3456
3457 movl 4(ap),r11
3458 movl r10,(r11)
3459
3460 clrl r10
3461
3462 bicl3 #-65536,(r6),r3
3463 movzwl 2(r6),r1
3464 bicl2 #-65536,r1
3465 bicl3 #-65536,4(r7),r2
3466 movzwl 6(r7),r0
3467 bicl2 #-65536,r0
3468 movl r3,r5
3469 movl r1,r4
3470 mull3 r0,r5,-12(fp)
3471 mull2 r2,r5
3472 mull3 r2,r4,-16(fp)
3473 mull2 r0,r4
3474 addl3 -12(fp),-16(fp),r0
3475 bicl3 #0,r0,-12(fp)
3476 cmpl -12(fp),-16(fp)
3477 bgequ noname.307
3478 addl2 #65536,r4
3479noname.307:
3480 movzwl -10(fp),r0
3481 bicl2 #-65536,r0
3482 addl2 r0,r4
3483 bicl3 #-65536,-12(fp),r0
3484 ashl #16,r0,-16(fp)
3485 addl2 -16(fp),r5
3486 bicl2 #0,r5
3487 cmpl r5,-16(fp)
3488 bgequ noname.308
3489 incl r4
3490noname.308:
3491 movl r5,r1
3492 movl r4,r2
3493 addl2 r1,r9
3494 bicl2 #0,r9
3495 cmpl r9,r1
3496 bgequ noname.309
3497 incl r2
3498noname.309:
3499 addl2 r2,r8
3500 bicl2 #0,r8
3501 cmpl r8,r2
3502 bgequ noname.310
3503 incl r10
3504noname.310:
3505
3506 bicl3 #-65536,4(r6),r3
3507 movzwl 6(r6),r1
3508 bicl2 #-65536,r1
3509 bicl3 #-65536,(r7),r2
3510 movzwl 2(r7),r0
3511 bicl2 #-65536,r0
3512 movl r3,r5
3513 movl r1,r4
3514 mull3 r0,r5,-20(fp)
3515 mull2 r2,r5
3516 mull3 r2,r4,-24(fp)
3517 mull2 r0,r4
3518 addl3 -20(fp),-24(fp),r0
3519 bicl3 #0,r0,-20(fp)
3520 cmpl -20(fp),-24(fp)
3521 bgequ noname.311
3522 addl2 #65536,r4
3523noname.311:
3524 movzwl -18(fp),r0
3525 bicl2 #-65536,r0
3526 addl2 r0,r4
3527 bicl3 #-65536,-20(fp),r0
3528 ashl #16,r0,-24(fp)
3529 addl2 -24(fp),r5
3530 bicl2 #0,r5
3531 cmpl r5,-24(fp)
3532 bgequ noname.312
3533 incl r4
3534noname.312:
3535 movl r5,r1
3536 movl r4,r2
3537 addl2 r1,r9
3538 bicl2 #0,r9
3539 cmpl r9,r1
3540 bgequ noname.313
3541 incl r2
3542noname.313:
3543 addl2 r2,r8
3544 bicl2 #0,r8
3545 cmpl r8,r2
3546 bgequ noname.314
3547 incl r10
3548noname.314:
3549
3550 movl r9,4(r11)
3551
3552 clrl r9
3553
3554 bicl3 #-65536,8(r6),r3
3555 movzwl 10(r6),r1
3556 bicl2 #-65536,r1
3557 bicl3 #-65536,(r7),r2
3558 movzwl 2(r7),r0
3559 bicl2 #-65536,r0
3560 movl r3,r5
3561 movl r1,r4
3562 mull3 r0,r5,-28(fp)
3563 mull2 r2,r5
3564 mull3 r2,r4,-32(fp)
3565 mull2 r0,r4
3566 addl3 -28(fp),-32(fp),r0
3567 bicl3 #0,r0,-28(fp)
3568 cmpl -28(fp),-32(fp)
3569 bgequ noname.315
3570 addl2 #65536,r4
3571noname.315:
3572 movzwl -26(fp),r0
3573 bicl2 #-65536,r0
3574 addl2 r0,r4
3575 bicl3 #-65536,-28(fp),r0
3576 ashl #16,r0,-32(fp)
3577 addl2 -32(fp),r5
3578 bicl2 #0,r5
3579 cmpl r5,-32(fp)
3580 bgequ noname.316
3581 incl r4
3582noname.316:
3583 movl r5,r1
3584 movl r4,r2
3585 addl2 r1,r8
3586 bicl2 #0,r8
3587 cmpl r8,r1
3588 bgequ noname.317
3589 incl r2
3590noname.317:
3591 addl2 r2,r10
3592 bicl2 #0,r10
3593 cmpl r10,r2
3594 bgequ noname.318
3595 incl r9
3596noname.318:
3597
3598 bicl3 #-65536,4(r6),r3
3599 movzwl 6(r6),r1
3600 bicl2 #-65536,r1
3601 bicl3 #-65536,4(r7),r2
3602 movzwl 6(r7),r0
3603 bicl2 #-65536,r0
3604 movl r3,r5
3605 movl r1,r4
3606 mull3 r0,r5,-36(fp)
3607 mull2 r2,r5
3608 mull3 r2,r4,-40(fp)
3609 mull2 r0,r4
3610 addl3 -36(fp),-40(fp),r0
3611 bicl3 #0,r0,-36(fp)
3612 cmpl -36(fp),-40(fp)
3613 bgequ noname.319
3614 addl2 #65536,r4
3615noname.319:
3616 movzwl -34(fp),r0
3617 bicl2 #-65536,r0
3618 addl2 r0,r4
3619 bicl3 #-65536,-36(fp),r0
3620 ashl #16,r0,-40(fp)
3621 addl2 -40(fp),r5
3622 bicl2 #0,r5
3623 cmpl r5,-40(fp)
3624 bgequ noname.320
3625 incl r4
3626noname.320:
3627 movl r5,r1
3628 movl r4,r2
3629 addl2 r1,r8
3630 bicl2 #0,r8
3631 cmpl r8,r1
3632 bgequ noname.321
3633 incl r2
3634noname.321:
3635 addl2 r2,r10
3636 bicl2 #0,r10
3637 cmpl r10,r2
3638 bgequ noname.322
3639 incl r9
3640noname.322:
3641
3642 bicl3 #-65536,(r6),r3
3643 movzwl 2(r6),r1
3644 bicl2 #-65536,r1
3645 bicl3 #-65536,8(r7),r2
3646 movzwl 10(r7),r0
3647 bicl2 #-65536,r0
3648 movl r3,r5
3649 movl r1,r4
3650 mull3 r0,r5,-44(fp)
3651 mull2 r2,r5
3652 mull3 r2,r4,-48(fp)
3653 mull2 r0,r4
3654 addl3 -44(fp),-48(fp),r0
3655 bicl3 #0,r0,-44(fp)
3656 cmpl -44(fp),-48(fp)
3657 bgequ noname.323
3658 addl2 #65536,r4
3659noname.323:
3660 movzwl -42(fp),r0
3661 bicl2 #-65536,r0
3662 addl2 r0,r4
3663 bicl3 #-65536,-44(fp),r0
3664 ashl #16,r0,-48(fp)
3665 addl2 -48(fp),r5
3666 bicl2 #0,r5
3667 cmpl r5,-48(fp)
3668 bgequ noname.324
3669 incl r4
3670noname.324:
3671 movl r5,r1
3672 movl r4,r2
3673 addl2 r1,r8
3674 bicl2 #0,r8
3675 cmpl r8,r1
3676 bgequ noname.325
3677 incl r2
3678noname.325:
3679 addl2 r2,r10
3680 bicl2 #0,r10
3681 cmpl r10,r2
3682 bgequ noname.326
3683 incl r9
3684noname.326:
3685
3686 movl r8,8(r11)
3687
3688 clrl r8
3689
3690 bicl3 #-65536,(r6),r3
3691 movzwl 2(r6),r2
3692 bicl3 #-65536,12(r7),r1
3693 movzwl 14(r7),r0
3694 bicl2 #-65536,r0
3695 movl r3,r4
3696 bicl3 #-65536,r2,-60(fp)
3697 mull3 r0,r4,-52(fp)
3698 mull2 r1,r4
3699 mull3 r1,-60(fp),-56(fp)
3700 mull2 r0,-60(fp)
3701 addl3 -52(fp),-56(fp),r0
3702 bicl3 #0,r0,-52(fp)
3703 cmpl -52(fp),-56(fp)
3704 bgequ noname.327
3705 addl2 #65536,-60(fp)
3706noname.327:
3707 movzwl -50(fp),r0
3708 bicl2 #-65536,r0
3709 addl2 r0,-60(fp)
3710 bicl3 #-65536,-52(fp),r0
3711 ashl #16,r0,-56(fp)
3712 addl2 -56(fp),r4
3713 bicl2 #0,r4
3714 cmpl r4,-56(fp)
3715 bgequ noname.328
3716 incl -60(fp)
3717noname.328:
3718 movl r4,r1
3719 movl -60(fp),r2
3720 addl2 r1,r10
3721 bicl2 #0,r10
3722 cmpl r10,r1
3723 bgequ noname.329
3724 incl r2
3725noname.329:
3726 addl2 r2,r9
3727 bicl2 #0,r9
3728 cmpl r9,r2
3729 bgequ noname.330
3730 incl r8
3731noname.330:
3732
3733 movzwl 6(r6),r2
3734 bicl3 #-65536,8(r7),r3
3735 movzwl 10(r7),r0
3736 bicl2 #-65536,r0
3737 bicl3 #-65536,4(r6),-72(fp)
3738 bicl3 #-65536,r2,-76(fp)
3739 mull3 r0,-72(fp),-64(fp)
3740 mull2 r3,-72(fp)
3741 mull3 r3,-76(fp),-68(fp)
3742 mull2 r0,-76(fp)
3743 addl3 -64(fp),-68(fp),r0
3744 bicl3 #0,r0,-64(fp)
3745 cmpl -64(fp),-68(fp)
3746 bgequ noname.331
3747 addl2 #65536,-76(fp)
3748noname.331:
3749 movzwl -62(fp),r0
3750 bicl2 #-65536,r0
3751 addl2 r0,-76(fp)
3752 bicl3 #-65536,-64(fp),r0
3753 ashl #16,r0,-68(fp)
3754 addl3 -68(fp),-72(fp),r0
3755 bicl3 #0,r0,-72(fp)
3756 cmpl -72(fp),-68(fp)
3757 bgequ noname.332
3758 incl -76(fp)
3759noname.332:
3760 movl -72(fp),r1
3761 movl -76(fp),r2
3762 addl2 r1,r10
3763 bicl2 #0,r10
3764 cmpl r10,r1
3765 bgequ noname.333
3766 incl r2
3767noname.333:
3768 addl2 r2,r9
3769 bicl2 #0,r9
3770 cmpl r9,r2
3771 bgequ noname.334
3772 incl r8
3773noname.334:
3774
3775 bicl3 #-65536,8(r6),r3
3776 movzwl 10(r6),r1
3777 bicl2 #-65536,r1
3778 bicl3 #-65536,4(r7),r2
3779 movzwl 6(r7),r0
3780 bicl2 #-65536,r0
3781 movl r3,r5
3782 movl r1,r4
3783 mull3 r0,r5,-80(fp)
3784 mull2 r2,r5
3785 mull3 r2,r4,-84(fp)
3786 mull2 r0,r4
3787 addl3 -80(fp),-84(fp),r0
3788 bicl3 #0,r0,-80(fp)
3789 cmpl -80(fp),-84(fp)
3790 bgequ noname.335
3791 addl2 #65536,r4
3792noname.335:
3793 movzwl -78(fp),r0
3794 bicl2 #-65536,r0
3795 addl2 r0,r4
3796 bicl3 #-65536,-80(fp),r0
3797 ashl #16,r0,-84(fp)
3798 addl2 -84(fp),r5
3799 bicl2 #0,r5
3800 cmpl r5,-84(fp)
3801 bgequ noname.336
3802 incl r4
3803noname.336:
3804 movl r5,r1
3805 movl r4,r2
3806 addl2 r1,r10
3807 bicl2 #0,r10
3808 cmpl r10,r1
3809 bgequ noname.337
3810 incl r2
3811noname.337:
3812 addl2 r2,r9
3813 bicl2 #0,r9
3814 cmpl r9,r2
3815 bgequ noname.338
3816 incl r8
3817noname.338:
3818
3819 bicl3 #-65536,12(r6),r3
3820 movzwl 14(r6),r1
3821 bicl2 #-65536,r1
3822 bicl3 #-65536,(r7),r2
3823 movzwl 2(r7),r0
3824 bicl2 #-65536,r0
3825 movl r3,r5
3826 movl r1,r4
3827 mull3 r0,r5,-88(fp)
3828 mull2 r2,r5
3829 mull3 r2,r4,-92(fp)
3830 mull2 r0,r4
3831 addl3 -88(fp),-92(fp),r0
3832 bicl3 #0,r0,-88(fp)
3833 cmpl -88(fp),-92(fp)
3834 bgequ noname.339
3835 addl2 #65536,r4
3836noname.339:
3837 movzwl -86(fp),r0
3838 bicl2 #-65536,r0
3839 addl2 r0,r4
3840 bicl3 #-65536,-88(fp),r0
3841 ashl #16,r0,-92(fp)
3842 addl2 -92(fp),r5
3843 bicl2 #0,r5
3844 cmpl r5,-92(fp)
3845 bgequ noname.340
3846 incl r4
3847noname.340:
3848 movl r5,r1
3849 movl r4,r2
3850 addl2 r1,r10
3851 bicl2 #0,r10
3852 cmpl r10,r1
3853 bgequ noname.341
3854 incl r2
3855noname.341:
3856 addl2 r2,r9
3857 bicl2 #0,r9
3858 cmpl r9,r2
3859 bgequ noname.342
3860 incl r8
3861noname.342:
3862
3863 movl r10,12(r11)
3864
3865 clrl r10
3866
3867 bicl3 #-65536,12(r6),r3
3868 movzwl 14(r6),r1
3869 bicl2 #-65536,r1
3870 bicl3 #-65536,4(r7),r2
3871 movzwl 6(r7),r0
3872 bicl2 #-65536,r0
3873 movl r3,r5
3874 movl r1,r4
3875 mull3 r0,r5,-96(fp)
3876 mull2 r2,r5
3877 mull3 r2,r4,-100(fp)
3878 mull2 r0,r4
3879 addl3 -96(fp),-100(fp),r0
3880 bicl3 #0,r0,-96(fp)
3881 cmpl -96(fp),-100(fp)
3882 bgequ noname.343
3883 addl2 #65536,r4
3884noname.343:
3885 movzwl -94(fp),r0
3886 bicl2 #-65536,r0
3887 addl2 r0,r4
3888 bicl3 #-65536,-96(fp),r0
3889 ashl #16,r0,-100(fp)
3890 addl2 -100(fp),r5
3891 bicl2 #0,r5
3892 cmpl r5,-100(fp)
3893 bgequ noname.344
3894 incl r4
3895noname.344:
3896 movl r5,r1
3897 movl r4,r2
3898 addl2 r1,r9
3899 bicl2 #0,r9
3900 cmpl r9,r1
3901 bgequ noname.345
3902 incl r2
3903noname.345:
3904 addl2 r2,r8
3905 bicl2 #0,r8
3906 cmpl r8,r2
3907 bgequ noname.346
3908 incl r10
3909noname.346:
3910
3911 bicl3 #-65536,8(r6),r3
3912 movzwl 10(r6),r1
3913 bicl2 #-65536,r1
3914 bicl3 #-65536,8(r7),r2
3915 movzwl 10(r7),r0
3916 bicl2 #-65536,r0
3917 movl r3,r5
3918 movl r1,r4
3919 mull3 r0,r5,-104(fp)
3920 mull2 r2,r5
3921 mull3 r2,r4,-108(fp)
3922 mull2 r0,r4
3923 addl3 -104(fp),-108(fp),r0
3924 bicl3 #0,r0,-104(fp)
3925 cmpl -104(fp),-108(fp)
3926 bgequ noname.347
3927 addl2 #65536,r4
3928noname.347:
3929 movzwl -102(fp),r0
3930 bicl2 #-65536,r0
3931 addl2 r0,r4
3932 bicl3 #-65536,-104(fp),r0
3933 ashl #16,r0,-108(fp)
3934 addl2 -108(fp),r5
3935 bicl2 #0,r5
3936 cmpl r5,-108(fp)
3937 bgequ noname.348
3938 incl r4
3939noname.348:
3940 movl r5,r1
3941 movl r4,r2
3942 addl2 r1,r9
3943 bicl2 #0,r9
3944 cmpl r9,r1
3945 bgequ noname.349
3946 incl r2
3947noname.349:
3948 addl2 r2,r8
3949 bicl2 #0,r8
3950 cmpl r8,r2
3951 bgequ noname.350
3952 incl r10
3953noname.350:
3954
3955 bicl3 #-65536,4(r6),r3
3956 movzwl 6(r6),r1
3957 bicl2 #-65536,r1
3958 bicl3 #-65536,12(r7),r2
3959 movzwl 14(r7),r0
3960 bicl2 #-65536,r0
3961 movl r3,r5
3962 movl r1,r4
3963 mull3 r0,r5,-112(fp)
3964 mull2 r2,r5
3965 mull3 r2,r4,-116(fp)
3966 mull2 r0,r4
3967 addl3 -112(fp),-116(fp),r0
3968 bicl3 #0,r0,-112(fp)
3969 cmpl -112(fp),-116(fp)
3970 bgequ noname.351
3971 addl2 #65536,r4
3972noname.351:
3973 movzwl -110(fp),r0
3974 bicl2 #-65536,r0
3975 addl2 r0,r4
3976 bicl3 #-65536,-112(fp),r0
3977 ashl #16,r0,-116(fp)
3978 addl2 -116(fp),r5
3979 bicl2 #0,r5
3980 cmpl r5,-116(fp)
3981 bgequ noname.352
3982 incl r4
3983noname.352:
3984 movl r5,r1
3985 movl r4,r2
3986 addl2 r1,r9
3987 bicl2 #0,r9
3988 cmpl r9,r1
3989 bgequ noname.353
3990 incl r2
3991noname.353:
3992 addl2 r2,r8
3993 bicl2 #0,r8
3994 cmpl r8,r2
3995 bgequ noname.354
3996 incl r10
3997noname.354:
3998
3999 movl r9,16(r11)
4000
4001 clrl r9
4002
4003 bicl3 #-65536,8(r6),r3
4004 movzwl 10(r6),r1
4005 bicl2 #-65536,r1
4006 bicl3 #-65536,12(r7),r2
4007 movzwl 14(r7),r0
4008 bicl2 #-65536,r0
4009 movl r3,r5
4010 movl r1,r4
4011 mull3 r0,r5,-120(fp)
4012 mull2 r2,r5
4013 mull3 r2,r4,-124(fp)
4014 mull2 r0,r4
4015 addl3 -120(fp),-124(fp),r0
4016 bicl3 #0,r0,-120(fp)
4017 cmpl -120(fp),-124(fp)
4018 bgequ noname.355
4019 addl2 #65536,r4
4020noname.355:
4021 movzwl -118(fp),r0
4022 bicl2 #-65536,r0
4023 addl2 r0,r4
4024 bicl3 #-65536,-120(fp),r0
4025 ashl #16,r0,-124(fp)
4026 addl2 -124(fp),r5
4027 bicl2 #0,r5
4028 cmpl r5,-124(fp)
4029 bgequ noname.356
4030 incl r4
4031noname.356:
4032 movl r5,r1
4033 movl r4,r2
4034 addl2 r1,r8
4035 bicl2 #0,r8
4036 cmpl r8,r1
4037 bgequ noname.357
4038 incl r2
4039noname.357:
4040 addl2 r2,r10
4041 bicl2 #0,r10
4042 cmpl r10,r2
4043 bgequ noname.358
4044 incl r9
4045noname.358:
4046
4047 movzwl 14(r6),r2
4048 bicl3 #-65536,8(r7),r3
4049 movzwl 10(r7),r0
4050 bicl2 #-65536,r0
4051 bicl3 #-65536,12(r6),-136(fp)
4052 bicl3 #-65536,r2,-140(fp)
4053 mull3 r0,-136(fp),-128(fp)
4054 mull2 r3,-136(fp)
4055 mull3 r3,-140(fp),-132(fp)
4056 mull2 r0,-140(fp)
4057 addl3 -128(fp),-132(fp),r0
4058 bicl3 #0,r0,-128(fp)
4059 cmpl -128(fp),-132(fp)
4060 bgequ noname.359
4061 addl2 #65536,-140(fp)
4062noname.359:
4063 movzwl -126(fp),r0
4064 bicl2 #-65536,r0
4065 addl2 r0,-140(fp)
4066 bicl3 #-65536,-128(fp),r0
4067 ashl #16,r0,-132(fp)
4068 addl3 -132(fp),-136(fp),r0
4069 bicl3 #0,r0,-136(fp)
4070 cmpl -136(fp),-132(fp)
4071 bgequ noname.360
4072 incl -140(fp)
4073noname.360:
4074 movl -136(fp),r1
4075 movl -140(fp),r2
4076 addl2 r1,r8
4077 bicl2 #0,r8
4078 cmpl r8,r1
4079 bgequ noname.361
4080 incl r2
4081noname.361:
4082 addl2 r2,r10
4083 bicl2 #0,r10
4084 cmpl r10,r2
4085 bgequ noname.362
4086 incl r9
4087noname.362:
4088
4089 movl r8,20(r11)
4090
4091 clrl r8
4092
4093 movzwl 14(r6),r2
4094 bicl3 #-65536,12(r7),r3
4095 movzwl 14(r7),r0
4096 bicl2 #-65536,r0
4097 bicl3 #-65536,12(r6),-152(fp)
4098 bicl3 #-65536,r2,-156(fp)
4099 mull3 r0,-152(fp),-144(fp)
4100 mull2 r3,-152(fp)
4101 mull3 r3,-156(fp),-148(fp)
4102 mull2 r0,-156(fp)
4103 addl3 -144(fp),-148(fp),r0
4104 bicl3 #0,r0,-144(fp)
4105 cmpl -144(fp),-148(fp)
4106 bgequ noname.363
4107 addl2 #65536,-156(fp)
4108noname.363:
4109 movzwl -142(fp),r0
4110 bicl2 #-65536,r0
4111 addl2 r0,-156(fp)
4112 bicl3 #-65536,-144(fp),r0
4113 ashl #16,r0,-148(fp)
4114 addl3 -148(fp),-152(fp),r0
4115 bicl3 #0,r0,-152(fp)
4116 cmpl -152(fp),-148(fp)
4117 bgequ noname.364
4118 incl -156(fp)
4119noname.364:
4120 movl -152(fp),r1
4121 movl -156(fp),r2
4122 addl2 r1,r10
4123 bicl2 #0,r10
4124 cmpl r10,r1
4125 bgequ noname.365
4126 incl r2
4127noname.365:
4128 addl2 r2,r9
4129 bicl2 #0,r9
4130 cmpl r9,r2
4131 bgequ noname.366
4132 incl r8
4133noname.366:
4134
4135 movl r10,24(r11)
4136
4137 movl r9,28(r11)
4138
4139 ret
4140
4141
4142
4143;r=4 ;(AP)
4144;a=8 ;(AP)
4145;b=12 ;(AP)
4146;n=16 ;(AP) n by value (input)
4147
4148 .psect code,nowrt
4149
4150.entry BN_SQR_COMBA8,^m<r2,r3,r4,r5,r6,r7,r8,r9>
4151 movab -444(sp),sp
4152
4153 clrq r8
4154
4155 clrl r7
4156
4157 movl 8(ap),r4
4158 movl (r4),r3
4159 bicl3 #-65536,r3,-4(fp)
4160 extzv #16,#16,r3,r0
4161 bicl3 #-65536,r0,r3
4162 movl -4(fp),r0
4163 mull3 r0,r3,-8(fp)
4164 mull3 r0,r0,-4(fp)
4165 mull2 r3,r3
4166 bicl3 #32767,-8(fp),r0
4167 extzv #15,#17,r0,r0
4168 addl2 r0,r3
4169 bicl3 #-65536,-8(fp),r0
4170 ashl #17,r0,-8(fp)
4171 addl3 -4(fp),-8(fp),r0
4172 bicl3 #0,r0,-4(fp)
4173 cmpl -4(fp),-8(fp)
4174 bgequ noname.369
4175 incl r3
4176noname.369:
4177 movl -4(fp),r1
4178 movl r3,r2
4179 addl2 r1,r9
4180 bicl2 #0,r9
4181 cmpl r9,r1
4182 bgequ noname.370
4183 incl r2
4184noname.370:
4185 addl2 r2,r8
4186 bicl2 #0,r8
4187 cmpl r8,r2
4188 bgequ noname.371
4189 incl r7
4190noname.371:
4191
4192 movl r9,@4(ap)
4193
4194 clrl r9
4195
4196 movzwl 6(r4),r2
4197 bicl3 #-65536,(r4),r3
4198 movzwl 2(r4),r0
4199 bicl2 #-65536,r0
4200 bicl3 #-65536,4(r4),-20(fp)
4201 bicl3 #-65536,r2,-24(fp)
4202 mull3 r0,-20(fp),-12(fp)
4203 mull2 r3,-20(fp)
4204 mull3 r3,-24(fp),-16(fp)
4205 mull2 r0,-24(fp)
4206 addl3 -12(fp),-16(fp),r0
4207 bicl3 #0,r0,-12(fp)
4208 cmpl -12(fp),-16(fp)
4209 bgequ noname.372
4210 addl2 #65536,-24(fp)
4211noname.372:
4212 movzwl -10(fp),r0
4213 bicl2 #-65536,r0
4214 addl2 r0,-24(fp)
4215 bicl3 #-65536,-12(fp),r0
4216 ashl #16,r0,-16(fp)
4217 addl3 -16(fp),-20(fp),r0
4218 bicl3 #0,r0,-20(fp)
4219 cmpl -20(fp),-16(fp)
4220 bgequ noname.373
4221 incl -24(fp)
4222noname.373:
4223 movl -20(fp),r3
4224 movl -24(fp),r2
4225 bbc #31,r2,noname.374
4226 incl r9
4227noname.374:
4228 addl2 r2,r2
4229 bicl2 #0,r2
4230 bbc #31,r3,noname.375
4231 incl r2
4232noname.375:
4233 addl2 r3,r3
4234 bicl2 #0,r3
4235 addl2 r3,r8
4236 bicl2 #0,r8
4237 cmpl r8,r3
4238 bgequ noname.376
4239 incl r2
4240 bicl3 #0,r2,r0
4241 bneq noname.376
4242 incl r9
4243noname.376:
4244 addl2 r2,r7
4245 bicl2 #0,r7
4246 cmpl r7,r2
4247 bgequ noname.377
4248 incl r9
4249noname.377:
4250
4251 movl 4(ap),r0
4252 movl r8,4(r0)
4253
4254 clrl r8
4255
4256 movl 8(ap),r4
4257 movl 4(r4),r3
4258 bicl3 #-65536,r3,-28(fp)
4259 extzv #16,#16,r3,r0
4260 bicl3 #-65536,r0,r3
4261 movl -28(fp),r0
4262 mull3 r0,r3,-32(fp)
4263 mull3 r0,r0,-28(fp)
4264 mull2 r3,r3
4265 bicl3 #32767,-32(fp),r0
4266 extzv #15,#17,r0,r0
4267 addl2 r0,r3
4268 bicl3 #-65536,-32(fp),r0
4269 ashl #17,r0,-32(fp)
4270 addl3 -28(fp),-32(fp),r0
4271 bicl3 #0,r0,-28(fp)
4272 cmpl -28(fp),-32(fp)
4273 bgequ noname.378
4274 incl r3
4275noname.378:
4276 movl -28(fp),r1
4277 movl r3,r2
4278 addl2 r1,r7
4279 bicl2 #0,r7
4280 cmpl r7,r1
4281 bgequ noname.379
4282 incl r2
4283noname.379:
4284 addl2 r2,r9
4285 bicl2 #0,r9
4286 cmpl r9,r2
4287 bgequ noname.380
4288 incl r8
4289noname.380:
4290
4291 movzwl 10(r4),r2
4292 bicl3 #-65536,(r4),r3
4293 movzwl 2(r4),r0
4294 bicl2 #-65536,r0
4295 bicl3 #-65536,8(r4),-44(fp)
4296 bicl3 #-65536,r2,-48(fp)
4297 mull3 r0,-44(fp),-36(fp)
4298 mull2 r3,-44(fp)
4299 mull3 r3,-48(fp),-40(fp)
4300 mull2 r0,-48(fp)
4301 addl3 -36(fp),-40(fp),r0
4302 bicl3 #0,r0,-36(fp)
4303 cmpl -36(fp),-40(fp)
4304 bgequ noname.381
4305 addl2 #65536,-48(fp)
4306noname.381:
4307 movzwl -34(fp),r0
4308 bicl2 #-65536,r0
4309 addl2 r0,-48(fp)
4310 bicl3 #-65536,-36(fp),r0
4311 ashl #16,r0,-40(fp)
4312 addl3 -40(fp),-44(fp),r0
4313 bicl3 #0,r0,-44(fp)
4314 cmpl -44(fp),-40(fp)
4315 bgequ noname.382
4316 incl -48(fp)
4317noname.382:
4318 movl -44(fp),r3
4319 movl -48(fp),r2
4320 bbc #31,r2,noname.383
4321 incl r8
4322noname.383:
4323 addl2 r2,r2
4324 bicl2 #0,r2
4325 bbc #31,r3,noname.384
4326 incl r2
4327noname.384:
4328 addl2 r3,r3
4329 bicl2 #0,r3
4330 addl2 r3,r7
4331 bicl2 #0,r7
4332 cmpl r7,r3
4333 bgequ noname.385
4334 incl r2
4335 bicl3 #0,r2,r0
4336 bneq noname.385
4337 incl r8
4338noname.385:
4339 addl2 r2,r9
4340 bicl2 #0,r9
4341 cmpl r9,r2
4342 bgequ noname.386
4343 incl r8
4344noname.386:
4345
4346 movl 4(ap),r0
4347 movl r7,8(r0)
4348
4349 clrl r7
4350
4351 movl 8(ap),r0
4352 movzwl 14(r0),r2
4353 bicl3 #-65536,(r0),r3
4354 movzwl 2(r0),r1
4355 bicl2 #-65536,r1
4356 bicl3 #-65536,12(r0),-60(fp)
4357 bicl3 #-65536,r2,-64(fp)
4358 mull3 r1,-60(fp),-52(fp)
4359 mull2 r3,-60(fp)
4360 mull3 r3,-64(fp),-56(fp)
4361 mull2 r1,-64(fp)
4362 addl3 -52(fp),-56(fp),r0
4363 bicl3 #0,r0,-52(fp)
4364 cmpl -52(fp),-56(fp)
4365 bgequ noname.387
4366 addl2 #65536,-64(fp)
4367noname.387:
4368 movzwl -50(fp),r0
4369 bicl2 #-65536,r0
4370 addl2 r0,-64(fp)
4371 bicl3 #-65536,-52(fp),r0
4372 ashl #16,r0,-56(fp)
4373 addl3 -56(fp),-60(fp),r0
4374 bicl3 #0,r0,-60(fp)
4375 cmpl -60(fp),-56(fp)
4376 bgequ noname.388
4377 incl -64(fp)
4378noname.388:
4379 movl -60(fp),r3
4380 movl -64(fp),r2
4381 bbc #31,r2,noname.389
4382 incl r7
4383noname.389:
4384 addl2 r2,r2
4385 bicl2 #0,r2
4386 bbc #31,r3,noname.390
4387 incl r2
4388noname.390:
4389 addl2 r3,r3
4390 bicl2 #0,r3
4391 addl2 r3,r9
4392 bicl2 #0,r9
4393 cmpl r9,r3
4394 bgequ noname.391
4395 incl r2
4396 bicl3 #0,r2,r0
4397 bneq noname.391
4398 incl r7
4399noname.391:
4400 addl2 r2,r8
4401 bicl2 #0,r8
4402 cmpl r8,r2
4403 bgequ noname.392
4404 incl r7
4405noname.392:
4406
4407 movl 8(ap),r0
4408 movzwl 10(r0),r2
4409 bicl3 #-65536,4(r0),r3
4410 movzwl 6(r0),r1
4411 bicl2 #-65536,r1
4412 bicl3 #-65536,8(r0),-76(fp)
4413 bicl3 #-65536,r2,-80(fp)
4414 mull3 r1,-76(fp),-68(fp)
4415 mull2 r3,-76(fp)
4416 mull3 r3,-80(fp),-72(fp)
4417 mull2 r1,-80(fp)
4418 addl3 -68(fp),-72(fp),r0
4419 bicl3 #0,r0,-68(fp)
4420 cmpl -68(fp),-72(fp)
4421 bgequ noname.393
4422 addl2 #65536,-80(fp)
4423noname.393:
4424 movzwl -66(fp),r0
4425 bicl2 #-65536,r0
4426 addl2 r0,-80(fp)
4427 bicl3 #-65536,-68(fp),r0
4428 ashl #16,r0,-72(fp)
4429 addl3 -72(fp),-76(fp),r0
4430 bicl3 #0,r0,-76(fp)
4431 cmpl -76(fp),-72(fp)
4432 bgequ noname.394
4433 incl -80(fp)
4434noname.394:
4435 movl -76(fp),r3
4436 movl -80(fp),r2
4437 bbc #31,r2,noname.395
4438 incl r7
4439noname.395:
4440 addl2 r2,r2
4441 bicl2 #0,r2
4442 bbc #31,r3,noname.396
4443 incl r2
4444noname.396:
4445 addl2 r3,r3
4446 bicl2 #0,r3
4447 addl2 r3,r9
4448 bicl2 #0,r9
4449 cmpl r9,r3
4450 bgequ noname.397
4451 incl r2
4452 bicl3 #0,r2,r0
4453 bneq noname.397
4454 incl r7
4455noname.397:
4456 addl2 r2,r8
4457 bicl2 #0,r8
4458 cmpl r8,r2
4459 bgequ noname.398
4460 incl r7
4461noname.398:
4462
4463 movl 4(ap),r0
4464 movl r9,12(r0)
4465
4466 clrl r9
4467
4468 movl 8(ap),r2
4469 movl 8(r2),r4
4470 bicl3 #-65536,r4,-84(fp)
4471 extzv #16,#16,r4,r0
4472 bicl3 #-65536,r0,r4
4473 movl -84(fp),r0
4474 mull3 r0,r4,-88(fp)
4475 mull3 r0,r0,-84(fp)
4476 mull2 r4,r4
4477 bicl3 #32767,-88(fp),r0
4478 extzv #15,#17,r0,r0
4479 addl2 r0,r4
4480 bicl3 #-65536,-88(fp),r0
4481 ashl #17,r0,-88(fp)
4482 addl3 -84(fp),-88(fp),r0
4483 bicl3 #0,r0,-84(fp)
4484 cmpl -84(fp),-88(fp)
4485 bgequ noname.399
4486 incl r4
4487noname.399:
4488 movl -84(fp),r1
4489 movl r4,r3
4490 addl2 r1,r8
4491 bicl2 #0,r8
4492 cmpl r8,r1
4493 bgequ noname.400
4494 incl r3
4495noname.400:
4496 addl2 r3,r7
4497 bicl2 #0,r7
4498 cmpl r7,r3
4499 bgequ noname.401
4500 incl r9
4501noname.401:
4502
4503 movzwl 14(r2),r3
4504 bicl3 #-65536,4(r2),r1
4505 movzwl 6(r2),r0
4506 bicl2 #-65536,r0
4507 bicl3 #-65536,12(r2),-100(fp)
4508 bicl3 #-65536,r3,-104(fp)
4509 mull3 r0,-100(fp),-92(fp)
4510 mull2 r1,-100(fp)
4511 mull3 r1,-104(fp),-96(fp)
4512 mull2 r0,-104(fp)
4513 addl3 -92(fp),-96(fp),r0
4514 bicl3 #0,r0,-92(fp)
4515 cmpl -92(fp),-96(fp)
4516 bgequ noname.402
4517 addl2 #65536,-104(fp)
4518noname.402:
4519 movzwl -90(fp),r0
4520 bicl2 #-65536,r0
4521 addl2 r0,-104(fp)
4522 bicl3 #-65536,-92(fp),r0
4523 ashl #16,r0,-96(fp)
4524 addl3 -96(fp),-100(fp),r0
4525 bicl3 #0,r0,-100(fp)
4526 cmpl -100(fp),-96(fp)
4527 bgequ noname.403
4528 incl -104(fp)
4529noname.403:
4530 movl -100(fp),r3
4531 movl -104(fp),r2
4532 bbc #31,r2,noname.404
4533 incl r9
4534noname.404:
4535 addl2 r2,r2
4536 bicl2 #0,r2
4537 bbc #31,r3,noname.405
4538 incl r2
4539noname.405:
4540 addl2 r3,r3
4541 bicl2 #0,r3
4542 addl2 r3,r8
4543 bicl2 #0,r8
4544 cmpl r8,r3
4545 bgequ noname.406
4546 incl r2
4547 bicl3 #0,r2,r0
4548 bneq noname.406
4549 incl r9
4550noname.406:
4551 addl2 r2,r7
4552 bicl2 #0,r7
4553 cmpl r7,r2
4554 bgequ noname.407
4555 incl r9
4556noname.407:
4557
4558 movl 8(ap),r0
4559 movzwl 18(r0),r2
4560 bicl3 #-65536,(r0),r3
4561 movzwl 2(r0),r1
4562 bicl2 #-65536,r1
4563 bicl3 #-65536,16(r0),-116(fp)
4564 bicl3 #-65536,r2,-120(fp)
4565 mull3 r1,-116(fp),-108(fp)
4566 mull2 r3,-116(fp)
4567 mull3 r3,-120(fp),-112(fp)
4568 mull2 r1,-120(fp)
4569 addl3 -108(fp),-112(fp),r0
4570 bicl3 #0,r0,-108(fp)
4571 cmpl -108(fp),-112(fp)
4572 bgequ noname.408
4573 addl2 #65536,-120(fp)
4574noname.408:
4575 movzwl -106(fp),r0
4576 bicl2 #-65536,r0
4577 addl2 r0,-120(fp)
4578 bicl3 #-65536,-108(fp),r0
4579 ashl #16,r0,-112(fp)
4580 addl3 -112(fp),-116(fp),r0
4581 bicl3 #0,r0,-116(fp)
4582 cmpl -116(fp),-112(fp)
4583 bgequ noname.409
4584 incl -120(fp)
4585noname.409:
4586 movl -116(fp),r3
4587 movl -120(fp),r2
4588 bbc #31,r2,noname.410
4589 incl r9
4590noname.410:
4591 addl2 r2,r2
4592 bicl2 #0,r2
4593 bbc #31,r3,noname.411
4594 incl r2
4595noname.411:
4596 addl2 r3,r3
4597 bicl2 #0,r3
4598 addl2 r3,r8
4599 bicl2 #0,r8
4600 cmpl r8,r3
4601 bgequ noname.412
4602 incl r2
4603 bicl3 #0,r2,r0
4604 bneq noname.412
4605 incl r9
4606noname.412:
4607 addl2 r2,r7
4608 bicl2 #0,r7
4609 cmpl r7,r2
4610 bgequ noname.413
4611 incl r9
4612noname.413:
4613
4614 movl 4(ap),r0
4615 movl r8,16(r0)
4616
4617 clrl r8
4618
4619 movl 8(ap),r0
4620 movzwl 22(r0),r2
4621 bicl3 #-65536,(r0),r3
4622 movzwl 2(r0),r1
4623 bicl2 #-65536,r1
4624 bicl3 #-65536,20(r0),-132(fp)
4625 bicl3 #-65536,r2,-136(fp)
4626 mull3 r1,-132(fp),-124(fp)
4627 mull2 r3,-132(fp)
4628 mull3 r3,-136(fp),-128(fp)
4629 mull2 r1,-136(fp)
4630 addl3 -124(fp),-128(fp),r0
4631 bicl3 #0,r0,-124(fp)
4632 cmpl -124(fp),-128(fp)
4633 bgequ noname.414
4634 addl2 #65536,-136(fp)
4635noname.414:
4636 movzwl -122(fp),r0
4637 bicl2 #-65536,r0
4638 addl2 r0,-136(fp)
4639 bicl3 #-65536,-124(fp),r0
4640 ashl #16,r0,-128(fp)
4641 addl3 -128(fp),-132(fp),r0
4642 bicl3 #0,r0,-132(fp)
4643 cmpl -132(fp),-128(fp)
4644 bgequ noname.415
4645 incl -136(fp)
4646noname.415:
4647 movl -132(fp),r3
4648 movl -136(fp),r2
4649 bbc #31,r2,noname.416
4650 incl r8
4651noname.416:
4652 addl2 r2,r2
4653 bicl2 #0,r2
4654 bbc #31,r3,noname.417
4655 incl r2
4656noname.417:
4657 addl2 r3,r3
4658 bicl2 #0,r3
4659 addl2 r3,r7
4660 bicl2 #0,r7
4661 cmpl r7,r3
4662 bgequ noname.418
4663 incl r2
4664 bicl3 #0,r2,r0
4665 bneq noname.418
4666 incl r8
4667noname.418:
4668 addl2 r2,r9
4669 bicl2 #0,r9
4670 cmpl r9,r2
4671 bgequ noname.419
4672 incl r8
4673noname.419:
4674
4675 movl 8(ap),r0
4676 movzwl 18(r0),r2
4677 bicl3 #-65536,4(r0),r3
4678 movzwl 6(r0),r1
4679 bicl2 #-65536,r1
4680 bicl3 #-65536,16(r0),-148(fp)
4681 bicl3 #-65536,r2,-152(fp)
4682 mull3 r1,-148(fp),-140(fp)
4683 mull2 r3,-148(fp)
4684 mull3 r3,-152(fp),-144(fp)
4685 mull2 r1,-152(fp)
4686 addl3 -140(fp),-144(fp),r0
4687 bicl3 #0,r0,-140(fp)
4688 cmpl -140(fp),-144(fp)
4689 bgequ noname.420
4690 addl2 #65536,-152(fp)
4691noname.420:
4692 movzwl -138(fp),r0
4693 bicl2 #-65536,r0
4694 addl2 r0,-152(fp)
4695 bicl3 #-65536,-140(fp),r0
4696 ashl #16,r0,-144(fp)
4697 addl3 -144(fp),-148(fp),r0
4698 bicl3 #0,r0,-148(fp)
4699 cmpl -148(fp),-144(fp)
4700 bgequ noname.421
4701 incl -152(fp)
4702noname.421:
4703 movl -148(fp),r3
4704 movl -152(fp),r2
4705 bbc #31,r2,noname.422
4706 incl r8
4707noname.422:
4708 addl2 r2,r2
4709 bicl2 #0,r2
4710 bbc #31,r3,noname.423
4711 incl r2
4712noname.423:
4713 addl2 r3,r3
4714 bicl2 #0,r3
4715 addl2 r3,r7
4716 bicl2 #0,r7
4717 cmpl r7,r3
4718 bgequ noname.424
4719 incl r2
4720 bicl3 #0,r2,r0
4721 bneq noname.424
4722 incl r8
4723noname.424:
4724 addl2 r2,r9
4725 bicl2 #0,r9
4726 cmpl r9,r2
4727 bgequ noname.425
4728 incl r8
4729noname.425:
4730
4731 movl 8(ap),r0
4732 movzwl 14(r0),r2
4733 bicl3 #-65536,8(r0),r3
4734 movzwl 10(r0),r1
4735 bicl2 #-65536,r1
4736 bicl3 #-65536,12(r0),-164(fp)
4737 bicl3 #-65536,r2,-168(fp)
4738 mull3 r1,-164(fp),-156(fp)
4739 mull2 r3,-164(fp)
4740 mull3 r3,-168(fp),-160(fp)
4741 mull2 r1,-168(fp)
4742 addl3 -156(fp),-160(fp),r0
4743 bicl3 #0,r0,-156(fp)
4744 cmpl -156(fp),-160(fp)
4745 bgequ noname.426
4746 addl2 #65536,-168(fp)
4747noname.426:
4748 movzwl -154(fp),r0
4749 bicl2 #-65536,r0
4750 addl2 r0,-168(fp)
4751 bicl3 #-65536,-156(fp),r0
4752 ashl #16,r0,-160(fp)
4753 addl3 -160(fp),-164(fp),r0
4754 bicl3 #0,r0,-164(fp)
4755 cmpl -164(fp),-160(fp)
4756 bgequ noname.427
4757 incl -168(fp)
4758noname.427:
4759 movl -164(fp),r3
4760 movl -168(fp),r2
4761 bbc #31,r2,noname.428
4762 incl r8
4763noname.428:
4764 addl2 r2,r2
4765 bicl2 #0,r2
4766 bbc #31,r3,noname.429
4767 incl r2
4768noname.429:
4769 addl2 r3,r3
4770 bicl2 #0,r3
4771 addl2 r3,r7
4772 bicl2 #0,r7
4773 cmpl r7,r3
4774 bgequ noname.430
4775 incl r2
4776 bicl3 #0,r2,r0
4777 bneq noname.430
4778 incl r8
4779noname.430:
4780 addl2 r2,r9
4781 bicl2 #0,r9
4782 cmpl r9,r2
4783 bgequ noname.431
4784 incl r8
4785noname.431:
4786
4787 movl 4(ap),r0
4788 movl r7,20(r0)
4789
4790 clrl r7
4791
4792 movl 8(ap),r2
4793 movl 12(r2),r4
4794 bicl3 #-65536,r4,-172(fp)
4795 extzv #16,#16,r4,r0
4796 bicl3 #-65536,r0,r4
4797 movl -172(fp),r0
4798 mull3 r0,r4,-176(fp)
4799 mull3 r0,r0,-172(fp)
4800 mull2 r4,r4
4801 bicl3 #32767,-176(fp),r0
4802 extzv #15,#17,r0,r0
4803 addl2 r0,r4
4804 bicl3 #-65536,-176(fp),r0
4805 ashl #17,r0,-176(fp)
4806 addl3 -172(fp),-176(fp),r0
4807 bicl3 #0,r0,-172(fp)
4808 cmpl -172(fp),-176(fp)
4809 bgequ noname.432
4810 incl r4
4811noname.432:
4812 movl -172(fp),r1
4813 movl r4,r3
4814 addl2 r1,r9
4815 bicl2 #0,r9
4816 cmpl r9,r1
4817 bgequ noname.433
4818 incl r3
4819noname.433:
4820 addl2 r3,r8
4821 bicl2 #0,r8
4822 cmpl r8,r3
4823 bgequ noname.434
4824 incl r7
4825noname.434:
4826
4827 movzwl 18(r2),r3
4828 bicl3 #-65536,8(r2),r1
4829 movzwl 10(r2),r0
4830 bicl2 #-65536,r0
4831 bicl3 #-65536,16(r2),-188(fp)
4832 bicl3 #-65536,r3,-192(fp)
4833 mull3 r0,-188(fp),-180(fp)
4834 mull2 r1,-188(fp)
4835 mull3 r1,-192(fp),-184(fp)
4836 mull2 r0,-192(fp)
4837 addl3 -180(fp),-184(fp),r0
4838 bicl3 #0,r0,-180(fp)
4839 cmpl -180(fp),-184(fp)
4840 bgequ noname.435
4841 addl2 #65536,-192(fp)
4842noname.435:
4843 movzwl -178(fp),r0
4844 bicl2 #-65536,r0
4845 addl2 r0,-192(fp)
4846 bicl3 #-65536,-180(fp),r0
4847 ashl #16,r0,-184(fp)
4848 addl3 -184(fp),-188(fp),r0
4849 bicl3 #0,r0,-188(fp)
4850 cmpl -188(fp),-184(fp)
4851 bgequ noname.436
4852 incl -192(fp)
4853noname.436:
4854 movl -188(fp),r3
4855 movl -192(fp),r2
4856 bbc #31,r2,noname.437
4857 incl r7
4858noname.437:
4859 addl2 r2,r2
4860 bicl2 #0,r2
4861 bbc #31,r3,noname.438
4862 incl r2
4863noname.438:
4864 addl2 r3,r3
4865 bicl2 #0,r3
4866 addl2 r3,r9
4867 bicl2 #0,r9
4868 cmpl r9,r3
4869 bgequ noname.439
4870 incl r2
4871 bicl3 #0,r2,r0
4872 bneq noname.439
4873 incl r7
4874noname.439:
4875 addl2 r2,r8
4876 bicl2 #0,r8
4877 cmpl r8,r2
4878 bgequ noname.440
4879 incl r7
4880noname.440:
4881
4882 movl 8(ap),r0
4883 movzwl 22(r0),r2
4884 bicl3 #-65536,4(r0),r3
4885 movzwl 6(r0),r1
4886 bicl2 #-65536,r1
4887 bicl3 #-65536,20(r0),-204(fp)
4888 bicl3 #-65536,r2,-208(fp)
4889 mull3 r1,-204(fp),-196(fp)
4890 mull2 r3,-204(fp)
4891 mull3 r3,-208(fp),-200(fp)
4892 mull2 r1,-208(fp)
4893 addl3 -196(fp),-200(fp),r0
4894 bicl3 #0,r0,-196(fp)
4895 cmpl -196(fp),-200(fp)
4896 bgequ noname.441
4897 addl2 #65536,-208(fp)
4898noname.441:
4899 movzwl -194(fp),r0
4900 bicl2 #-65536,r0
4901 addl2 r0,-208(fp)
4902 bicl3 #-65536,-196(fp),r0
4903 ashl #16,r0,-200(fp)
4904 addl3 -200(fp),-204(fp),r0
4905 bicl3 #0,r0,-204(fp)
4906 cmpl -204(fp),-200(fp)
4907 bgequ noname.442
4908 incl -208(fp)
4909noname.442:
4910 movl -204(fp),r3
4911 movl -208(fp),r2
4912 bbc #31,r2,noname.443
4913 incl r7
4914noname.443:
4915 addl2 r2,r2
4916 bicl2 #0,r2
4917 bbc #31,r3,noname.444
4918 incl r2
4919noname.444:
4920 addl2 r3,r3
4921 bicl2 #0,r3
4922 addl2 r3,r9
4923 bicl2 #0,r9
4924 cmpl r9,r3
4925 bgequ noname.445
4926 incl r2
4927 bicl3 #0,r2,r0
4928 bneq noname.445
4929 incl r7
4930noname.445:
4931 addl2 r2,r8
4932 bicl2 #0,r8
4933 cmpl r8,r2
4934 bgequ noname.446
4935 incl r7
4936noname.446:
4937
4938 movl 8(ap),r0
4939 movzwl 26(r0),r2
4940 bicl3 #-65536,(r0),r3
4941 movzwl 2(r0),r1
4942 bicl2 #-65536,r1
4943 bicl3 #-65536,24(r0),-220(fp)
4944 bicl3 #-65536,r2,-224(fp)
4945 mull3 r1,-220(fp),-212(fp)
4946 mull2 r3,-220(fp)
4947 mull3 r3,-224(fp),-216(fp)
4948 mull2 r1,-224(fp)
4949 addl3 -212(fp),-216(fp),r0
4950 bicl3 #0,r0,-212(fp)
4951 cmpl -212(fp),-216(fp)
4952 bgequ noname.447
4953 addl2 #65536,-224(fp)
4954noname.447:
4955 movzwl -210(fp),r0
4956 bicl2 #-65536,r0
4957 addl2 r0,-224(fp)
4958 bicl3 #-65536,-212(fp),r0
4959 ashl #16,r0,-216(fp)
4960 addl3 -216(fp),-220(fp),r0
4961 bicl3 #0,r0,-220(fp)
4962 cmpl -220(fp),-216(fp)
4963 bgequ noname.448
4964 incl -224(fp)
4965noname.448:
4966 movl -220(fp),r3
4967 movl -224(fp),r2
4968 bbc #31,r2,noname.449
4969 incl r7
4970noname.449:
4971 addl2 r2,r2
4972 bicl2 #0,r2
4973 bbc #31,r3,noname.450
4974 incl r2
4975noname.450:
4976 addl2 r3,r3
4977 bicl2 #0,r3
4978 addl2 r3,r9
4979 bicl2 #0,r9
4980 cmpl r9,r3
4981 bgequ noname.451
4982 incl r2
4983 bicl3 #0,r2,r0
4984 bneq noname.451
4985 incl r7
4986noname.451:
4987 addl2 r2,r8
4988 bicl2 #0,r8
4989 cmpl r8,r2
4990 bgequ noname.452
4991 incl r7
4992noname.452:
4993
4994 movl 4(ap),r0
4995 movl r9,24(r0)
4996
4997 clrl r9
4998
4999 movl 8(ap),r0
5000 movzwl 30(r0),r2
5001 bicl3 #-65536,(r0),r3
5002 movzwl 2(r0),r1
5003 bicl2 #-65536,r1
5004 bicl3 #-65536,28(r0),-236(fp)
5005 bicl3 #-65536,r2,-240(fp)
5006 mull3 r1,-236(fp),-228(fp)
5007 mull2 r3,-236(fp)
5008 mull3 r3,-240(fp),-232(fp)
5009 mull2 r1,-240(fp)
5010 addl3 -228(fp),-232(fp),r0
5011 bicl3 #0,r0,-228(fp)
5012 cmpl -228(fp),-232(fp)
5013 bgequ noname.453
5014 addl2 #65536,-240(fp)
5015noname.453:
5016 movzwl -226(fp),r0
5017 bicl2 #-65536,r0
5018 addl2 r0,-240(fp)
5019 bicl3 #-65536,-228(fp),r0
5020 ashl #16,r0,-232(fp)
5021 addl3 -232(fp),-236(fp),r0
5022 bicl3 #0,r0,-236(fp)
5023 cmpl -236(fp),-232(fp)
5024 bgequ noname.454
5025 incl -240(fp)
5026noname.454:
5027 movl -236(fp),r3
5028 movl -240(fp),r2
5029 bbc #31,r2,noname.455
5030 incl r9
5031noname.455:
5032 addl2 r2,r2
5033 bicl2 #0,r2
5034 bbc #31,r3,noname.456
5035 incl r2
5036noname.456:
5037 addl2 r3,r3
5038 bicl2 #0,r3
5039 addl2 r3,r8
5040 bicl2 #0,r8
5041 cmpl r8,r3
5042 bgequ noname.457
5043 incl r2
5044 bicl3 #0,r2,r0
5045 bneq noname.457
5046 incl r9
5047noname.457:
5048 addl2 r2,r7
5049 bicl2 #0,r7
5050 cmpl r7,r2
5051 bgequ noname.458
5052 incl r9
5053noname.458:
5054
5055 movl 8(ap),r0
5056 movzwl 26(r0),r2
5057 bicl3 #-65536,4(r0),r3
5058 movzwl 6(r0),r1
5059 bicl2 #-65536,r1
5060 bicl3 #-65536,24(r0),-252(fp)
5061 bicl3 #-65536,r2,-256(fp)
5062 mull3 r1,-252(fp),-244(fp)
5063 mull2 r3,-252(fp)
5064 mull3 r3,-256(fp),-248(fp)
5065 mull2 r1,-256(fp)
5066 addl3 -244(fp),-248(fp),r0
5067 bicl3 #0,r0,-244(fp)
5068 cmpl -244(fp),-248(fp)
5069 bgequ noname.459
5070 addl2 #65536,-256(fp)
5071noname.459:
5072 movzwl -242(fp),r0
5073 bicl2 #-65536,r0
5074 addl2 r0,-256(fp)
5075 bicl3 #-65536,-244(fp),r0
5076 ashl #16,r0,-248(fp)
5077 addl3 -248(fp),-252(fp),r0
5078 bicl3 #0,r0,-252(fp)
5079 cmpl -252(fp),-248(fp)
5080 bgequ noname.460
5081 incl -256(fp)
5082noname.460:
5083 movl -252(fp),r3
5084 movl -256(fp),r2
5085 bbc #31,r2,noname.461
5086 incl r9
5087noname.461:
5088 addl2 r2,r2
5089 bicl2 #0,r2
5090 bbc #31,r3,noname.462
5091 incl r2
5092noname.462:
5093 addl2 r3,r3
5094 bicl2 #0,r3
5095 addl2 r3,r8
5096 bicl2 #0,r8
5097 cmpl r8,r3
5098 bgequ noname.463
5099 incl r2
5100 bicl3 #0,r2,r0
5101 bneq noname.463
5102 incl r9
5103noname.463:
5104 addl2 r2,r7
5105 bicl2 #0,r7
5106 cmpl r7,r2
5107 bgequ noname.464
5108 incl r9
5109noname.464:
5110
5111 movl 8(ap),r0
5112 movzwl 22(r0),r2
5113 bicl3 #-65536,8(r0),r3
5114 movzwl 10(r0),r1
5115 bicl2 #-65536,r1
5116 bicl3 #-65536,20(r0),-268(fp)
5117 bicl3 #-65536,r2,-272(fp)
5118 mull3 r1,-268(fp),-260(fp)
5119 mull2 r3,-268(fp)
5120 mull3 r3,-272(fp),-264(fp)
5121 mull2 r1,-272(fp)
5122 addl3 -260(fp),-264(fp),r0
5123 bicl3 #0,r0,-260(fp)
5124 cmpl -260(fp),-264(fp)
5125 bgequ noname.465
5126 addl2 #65536,-272(fp)
5127noname.465:
5128 movzwl -258(fp),r0
5129 bicl2 #-65536,r0
5130 addl2 r0,-272(fp)
5131 bicl3 #-65536,-260(fp),r0
5132 ashl #16,r0,-264(fp)
5133 addl3 -264(fp),-268(fp),r0
5134 bicl3 #0,r0,-268(fp)
5135 cmpl -268(fp),-264(fp)
5136 bgequ noname.466
5137 incl -272(fp)
5138noname.466:
5139 movl -268(fp),r3
5140 movl -272(fp),r2
5141 bbc #31,r2,noname.467
5142 incl r9
5143noname.467:
5144 addl2 r2,r2
5145 bicl2 #0,r2
5146 bbc #31,r3,noname.468
5147 incl r2
5148noname.468:
5149 addl2 r3,r3
5150 bicl2 #0,r3
5151 addl2 r3,r8
5152 bicl2 #0,r8
5153 cmpl r8,r3
5154 bgequ noname.469
5155 incl r2
5156 bicl3 #0,r2,r0
5157 bneq noname.469
5158 incl r9
5159noname.469:
5160 addl2 r2,r7
5161 bicl2 #0,r7
5162 cmpl r7,r2
5163 bgequ noname.470
5164 incl r9
5165noname.470:
5166
5167 movl 8(ap),r0
5168 movzwl 18(r0),r2
5169 bicl3 #-65536,12(r0),r3
5170 movzwl 14(r0),r1
5171 bicl2 #-65536,r1
5172 bicl3 #-65536,16(r0),-284(fp)
5173 bicl3 #-65536,r2,-288(fp)
5174 mull3 r1,-284(fp),-276(fp)
5175 mull2 r3,-284(fp)
5176 mull3 r3,-288(fp),-280(fp)
5177 mull2 r1,-288(fp)
5178 addl3 -276(fp),-280(fp),r0
5179 bicl3 #0,r0,-276(fp)
5180 cmpl -276(fp),-280(fp)
5181 bgequ noname.471
5182 addl2 #65536,-288(fp)
5183noname.471:
5184 movzwl -274(fp),r0
5185 bicl2 #-65536,r0
5186 addl2 r0,-288(fp)
5187 bicl3 #-65536,-276(fp),r0
5188 ashl #16,r0,-280(fp)
5189 addl3 -280(fp),-284(fp),r0
5190 bicl3 #0,r0,-284(fp)
5191 cmpl -284(fp),-280(fp)
5192 bgequ noname.472
5193 incl -288(fp)
5194noname.472:
5195 movl -284(fp),r3
5196 movl -288(fp),r2
5197 bbc #31,r2,noname.473
5198 incl r9
5199noname.473:
5200 addl2 r2,r2
5201 bicl2 #0,r2
5202 bbc #31,r3,noname.474
5203 incl r2
5204noname.474:
5205 addl2 r3,r3
5206 bicl2 #0,r3
5207 addl2 r3,r8
5208 bicl2 #0,r8
5209 cmpl r8,r3
5210 bgequ noname.475
5211 incl r2
5212 bicl3 #0,r2,r0
5213 bneq noname.475
5214 incl r9
5215noname.475:
5216 addl2 r2,r7
5217 bicl2 #0,r7
5218 cmpl r7,r2
5219 bgequ noname.476
5220 incl r9
5221noname.476:
5222
5223 movl 4(ap),r0
5224 movl r8,28(r0)
5225
5226 clrl r8
5227
5228 movl 8(ap),r3
5229 movl 16(r3),r4
5230 bicl3 #-65536,r4,r5
5231 extzv #16,#16,r4,r0
5232 bicl3 #-65536,r0,r4
5233 mull3 r5,r4,-292(fp)
5234 mull2 r5,r5
5235 mull2 r4,r4
5236 bicl3 #32767,-292(fp),r0
5237 extzv #15,#17,r0,r0
5238 addl2 r0,r4
5239 bicl3 #-65536,-292(fp),r0
5240 ashl #17,r0,-292(fp)
5241 addl2 -292(fp),r5
5242 bicl2 #0,r5
5243 cmpl r5,-292(fp)
5244 bgequ noname.477
5245 incl r4
5246noname.477:
5247 movl r5,r1
5248 movl r4,r2
5249 addl2 r1,r7
5250 bicl2 #0,r7
5251 cmpl r7,r1
5252 bgequ noname.478
5253 incl r2
5254noname.478:
5255 addl2 r2,r9
5256 bicl2 #0,r9
5257 cmpl r9,r2
5258 bgequ noname.479
5259 incl r8
5260noname.479:
5261
5262 bicl3 #-65536,20(r3),r4
5263 movzwl 22(r3),r1
5264 bicl2 #-65536,r1
5265 bicl3 #-65536,12(r3),r2
5266 movzwl 14(r3),r0
5267 bicl2 #-65536,r0
5268 movl r4,r6
5269 movl r1,r5
5270 mull3 r0,r6,-296(fp)
5271 mull2 r2,r6
5272 mull3 r2,r5,-300(fp)
5273 mull2 r0,r5
5274 addl3 -296(fp),-300(fp),r0
5275 bicl3 #0,r0,-296(fp)
5276 cmpl -296(fp),-300(fp)
5277 bgequ noname.480
5278 addl2 #65536,r5
5279noname.480:
5280 movzwl -294(fp),r0
5281 bicl2 #-65536,r0
5282 addl2 r0,r5
5283 bicl3 #-65536,-296(fp),r0
5284 ashl #16,r0,-300(fp)
5285 addl2 -300(fp),r6
5286 bicl2 #0,r6
5287 cmpl r6,-300(fp)
5288 bgequ noname.481
5289 incl r5
5290noname.481:
5291 movl r6,r3
5292 movl r5,r2
5293 bbc #31,r2,noname.482
5294 incl r8
5295noname.482:
5296 addl2 r2,r2
5297 bicl2 #0,r2
5298 bbc #31,r3,noname.483
5299 incl r2
5300noname.483:
5301 addl2 r3,r3
5302 bicl2 #0,r3
5303 addl2 r3,r7
5304 bicl2 #0,r7
5305 cmpl r7,r3
5306 bgequ noname.484
5307 incl r2
5308 bicl3 #0,r2,r0
5309 bneq noname.484
5310 incl r8
5311noname.484:
5312 addl2 r2,r9
5313 bicl2 #0,r9
5314 cmpl r9,r2
5315 bgequ noname.485
5316 incl r8
5317noname.485:
5318
5319 movl 8(ap),r0
5320 bicl3 #-65536,24(r0),r3
5321 movzwl 26(r0),r1
5322 bicl2 #-65536,r1
5323 bicl3 #-65536,8(r0),r2
5324 movzwl 10(r0),r0
5325 bicl2 #-65536,r0
5326 movl r3,r5
5327 movl r1,r4
5328 mull3 r0,r5,-304(fp)
5329 mull2 r2,r5
5330 mull3 r2,r4,-308(fp)
5331 mull2 r0,r4
5332 addl3 -304(fp),-308(fp),r0
5333 bicl3 #0,r0,-304(fp)
5334 cmpl -304(fp),-308(fp)
5335 bgequ noname.486
5336 addl2 #65536,r4
5337noname.486:
5338 movzwl -302(fp),r0
5339 bicl2 #-65536,r0
5340 addl2 r0,r4
5341 bicl3 #-65536,-304(fp),r0
5342 ashl #16,r0,-308(fp)
5343 addl2 -308(fp),r5
5344 bicl2 #0,r5
5345 cmpl r5,-308(fp)
5346 bgequ noname.487
5347 incl r4
5348noname.487:
5349 movl r5,r3
5350 movl r4,r2
5351 bbc #31,r2,noname.488
5352 incl r8
5353noname.488:
5354 addl2 r2,r2
5355 bicl2 #0,r2
5356 bbc #31,r3,noname.489
5357 incl r2
5358noname.489:
5359 addl2 r3,r3
5360 bicl2 #0,r3
5361 addl2 r3,r7
5362 bicl2 #0,r7
5363 cmpl r7,r3
5364 bgequ noname.490
5365 incl r2
5366 bicl3 #0,r2,r0
5367 bneq noname.490
5368 incl r8
5369noname.490:
5370 addl2 r2,r9
5371 bicl2 #0,r9
5372 cmpl r9,r2
5373 bgequ noname.491
5374 incl r8
5375noname.491:
5376
5377 movl 8(ap),r0
5378 bicl3 #-65536,28(r0),r3
5379 movzwl 30(r0),r1
5380 bicl2 #-65536,r1
5381 bicl3 #-65536,4(r0),r2
5382 movzwl 6(r0),r0
5383 bicl2 #-65536,r0
5384 movl r3,r5
5385 movl r1,r4
5386 mull3 r0,r5,-312(fp)
5387 mull2 r2,r5
5388 mull3 r2,r4,-316(fp)
5389 mull2 r0,r4
5390 addl3 -312(fp),-316(fp),r0
5391 bicl3 #0,r0,-312(fp)
5392 cmpl -312(fp),-316(fp)
5393 bgequ noname.492
5394 addl2 #65536,r4
5395noname.492:
5396 movzwl -310(fp),r0
5397 bicl2 #-65536,r0
5398 addl2 r0,r4
5399 bicl3 #-65536,-312(fp),r0
5400 ashl #16,r0,-316(fp)
5401 addl2 -316(fp),r5
5402 bicl2 #0,r5
5403 cmpl r5,-316(fp)
5404 bgequ noname.493
5405 incl r4
5406noname.493:
5407 movl r5,r3
5408 movl r4,r2
5409 bbc #31,r2,noname.494
5410 incl r8
5411noname.494:
5412 addl2 r2,r2
5413 bicl2 #0,r2
5414 bbc #31,r3,noname.495
5415 incl r2
5416noname.495:
5417 addl2 r3,r3
5418 bicl2 #0,r3
5419 addl2 r3,r7
5420 bicl2 #0,r7
5421 cmpl r7,r3
5422 bgequ noname.496
5423 incl r2
5424 bicl3 #0,r2,r0
5425 bneq noname.496
5426 incl r8
5427noname.496:
5428 addl2 r2,r9
5429 bicl2 #0,r9
5430 cmpl r9,r2
5431 bgequ noname.497
5432 incl r8
5433noname.497:
5434
5435 movl 4(ap),r0
5436 movl r7,32(r0)
5437
5438 clrl r7
5439
5440 movl 8(ap),r0
5441 bicl3 #-65536,28(r0),r3
5442 movzwl 30(r0),r2
5443 bicl3 #-65536,8(r0),r1
5444 movzwl 10(r0),r0
5445 bicl2 #-65536,r0
5446 movl r3,r4
5447 bicl3 #-65536,r2,-328(fp)
5448 mull3 r0,r4,-320(fp)
5449 mull2 r1,r4
5450 mull3 r1,-328(fp),-324(fp)
5451 mull2 r0,-328(fp)
5452 addl3 -320(fp),-324(fp),r0
5453 bicl3 #0,r0,-320(fp)
5454 cmpl -320(fp),-324(fp)
5455 bgequ noname.498
5456 addl2 #65536,-328(fp)
5457noname.498:
5458 movzwl -318(fp),r0
5459 bicl2 #-65536,r0
5460 addl2 r0,-328(fp)
5461 bicl3 #-65536,-320(fp),r0
5462 ashl #16,r0,-324(fp)
5463 addl2 -324(fp),r4
5464 bicl2 #0,r4
5465 cmpl r4,-324(fp)
5466 bgequ noname.499
5467 incl -328(fp)
5468noname.499:
5469 movl r4,r3
5470 movl -328(fp),r2
5471 bbc #31,r2,noname.500
5472 incl r7
5473noname.500:
5474 addl2 r2,r2
5475 bicl2 #0,r2
5476 bbc #31,r3,noname.501
5477 incl r2
5478noname.501:
5479 addl2 r3,r3
5480 bicl2 #0,r3
5481 addl2 r3,r9
5482 bicl2 #0,r9
5483 cmpl r9,r3
5484 bgequ noname.502
5485 incl r2
5486 bicl3 #0,r2,r0
5487 bneq noname.502
5488 incl r7
5489noname.502:
5490 addl2 r2,r8
5491 bicl2 #0,r8
5492 cmpl r8,r2
5493 bgequ noname.503
5494 incl r7
5495noname.503:
5496
5497 movl 8(ap),r0
5498 movzwl 26(r0),r2
5499 bicl3 #-65536,12(r0),r3
5500 movzwl 14(r0),r1
5501 bicl2 #-65536,r1
5502 bicl3 #-65536,24(r0),-340(fp)
5503 bicl3 #-65536,r2,-344(fp)
5504 mull3 r1,-340(fp),-332(fp)
5505 mull2 r3,-340(fp)
5506 mull3 r3,-344(fp),-336(fp)
5507 mull2 r1,-344(fp)
5508 addl3 -332(fp),-336(fp),r0
5509 bicl3 #0,r0,-332(fp)
5510 cmpl -332(fp),-336(fp)
5511 bgequ noname.504
5512 addl2 #65536,-344(fp)
5513noname.504:
5514 movzwl -330(fp),r0
5515 bicl2 #-65536,r0
5516 addl2 r0,-344(fp)
5517 bicl3 #-65536,-332(fp),r0
5518 ashl #16,r0,-336(fp)
5519 addl3 -336(fp),-340(fp),r0
5520 bicl3 #0,r0,-340(fp)
5521 cmpl -340(fp),-336(fp)
5522 bgequ noname.505
5523 incl -344(fp)
5524noname.505:
5525 movl -340(fp),r3
5526 movl -344(fp),r2
5527 bbc #31,r2,noname.506
5528 incl r7
5529noname.506:
5530 addl2 r2,r2
5531 bicl2 #0,r2
5532 bbc #31,r3,noname.507
5533 incl r2
5534noname.507:
5535 addl2 r3,r3
5536 bicl2 #0,r3
5537 addl2 r3,r9
5538 bicl2 #0,r9
5539 cmpl r9,r3
5540 bgequ noname.508
5541 incl r2
5542 bicl3 #0,r2,r0
5543 bneq noname.508
5544 incl r7
5545noname.508:
5546 addl2 r2,r8
5547 bicl2 #0,r8
5548 cmpl r8,r2
5549 bgequ noname.509
5550 incl r7
5551noname.509:
5552
5553 movl 8(ap),r0
5554 movzwl 22(r0),r2
5555 bicl3 #-65536,16(r0),r3
5556 movzwl 18(r0),r1
5557 bicl2 #-65536,r1
5558 bicl3 #-65536,20(r0),-356(fp)
5559 bicl3 #-65536,r2,-360(fp)
5560 mull3 r1,-356(fp),-348(fp)
5561 mull2 r3,-356(fp)
5562 mull3 r3,-360(fp),-352(fp)
5563 mull2 r1,-360(fp)
5564 addl3 -348(fp),-352(fp),r0
5565 bicl3 #0,r0,-348(fp)
5566 cmpl -348(fp),-352(fp)
5567 bgequ noname.510
5568 addl2 #65536,-360(fp)
5569noname.510:
5570 movzwl -346(fp),r0
5571 bicl2 #-65536,r0
5572 addl2 r0,-360(fp)
5573 bicl3 #-65536,-348(fp),r0
5574 ashl #16,r0,-352(fp)
5575 addl3 -352(fp),-356(fp),r0
5576 bicl3 #0,r0,-356(fp)
5577 cmpl -356(fp),-352(fp)
5578 bgequ noname.511
5579 incl -360(fp)
5580noname.511:
5581 movl -356(fp),r3
5582 movl -360(fp),r2
5583 bbc #31,r2,noname.512
5584 incl r7
5585noname.512:
5586 addl2 r2,r2
5587 bicl2 #0,r2
5588 bbc #31,r3,noname.513
5589 incl r2
5590noname.513:
5591 addl2 r3,r3
5592 bicl2 #0,r3
5593 addl2 r3,r9
5594 bicl2 #0,r9
5595 cmpl r9,r3
5596 bgequ noname.514
5597 incl r2
5598 bicl3 #0,r2,r0
5599 bneq noname.514
5600 incl r7
5601noname.514:
5602 addl2 r2,r8
5603 bicl2 #0,r8
5604 cmpl r8,r2
5605 bgequ noname.515
5606 incl r7
5607noname.515:
5608
5609 movl 4(ap),r0
5610 movl r9,36(r0)
5611
5612 clrl r9
5613
5614 movl 8(ap),r3
5615 movl 20(r3),r4
5616 bicl3 #-65536,r4,-364(fp)
5617 extzv #16,#16,r4,r0
5618 bicl3 #-65536,r0,r4
5619 movl -364(fp),r0
5620 mull3 r0,r4,-368(fp)
5621 mull3 r0,r0,-364(fp)
5622 mull2 r4,r4
5623 bicl3 #32767,-368(fp),r0
5624 extzv #15,#17,r0,r0
5625 addl2 r0,r4
5626 bicl3 #-65536,-368(fp),r0
5627 ashl #17,r0,-368(fp)
5628 addl3 -364(fp),-368(fp),r0
5629 bicl3 #0,r0,-364(fp)
5630 cmpl -364(fp),-368(fp)
5631 bgequ noname.516
5632 incl r4
5633noname.516:
5634 movl -364(fp),r1
5635 movl r4,r2
5636 addl2 r1,r8
5637 bicl2 #0,r8
5638 cmpl r8,r1
5639 bgequ noname.517
5640 incl r2
5641noname.517:
5642 addl2 r2,r7
5643 bicl2 #0,r7
5644 cmpl r7,r2
5645 bgequ noname.518
5646 incl r9
5647noname.518:
5648
5649 bicl3 #-65536,24(r3),r4
5650 movzwl 26(r3),r1
5651 bicl2 #-65536,r1
5652 bicl3 #-65536,16(r3),r2
5653 movzwl 18(r3),r0
5654 bicl2 #-65536,r0
5655 movl r4,r6
5656 movl r1,r5
5657 mull3 r0,r6,-372(fp)
5658 mull2 r2,r6
5659 mull3 r2,r5,-376(fp)
5660 mull2 r0,r5
5661 addl3 -372(fp),-376(fp),r0
5662 bicl3 #0,r0,-372(fp)
5663 cmpl -372(fp),-376(fp)
5664 bgequ noname.519
5665 addl2 #65536,r5
5666noname.519:
5667 movzwl -370(fp),r0
5668 bicl2 #-65536,r0
5669 addl2 r0,r5
5670 bicl3 #-65536,-372(fp),r0
5671 ashl #16,r0,-376(fp)
5672 addl2 -376(fp),r6
5673 bicl2 #0,r6
5674 cmpl r6,-376(fp)
5675 bgequ noname.520
5676 incl r5
5677noname.520:
5678 movl r6,r3
5679 movl r5,r2
5680 bbc #31,r2,noname.521
5681 incl r9
5682noname.521:
5683 addl2 r2,r2
5684 bicl2 #0,r2
5685 bbc #31,r3,noname.522
5686 incl r2
5687noname.522:
5688 addl2 r3,r3
5689 bicl2 #0,r3
5690 addl2 r3,r8
5691 bicl2 #0,r8
5692 cmpl r8,r3
5693 bgequ noname.523
5694 incl r2
5695 bicl3 #0,r2,r0
5696 bneq noname.523
5697 incl r9
5698noname.523:
5699 addl2 r2,r7
5700 bicl2 #0,r7
5701 cmpl r7,r2
5702 bgequ noname.524
5703 incl r9
5704noname.524:
5705
5706 movl 8(ap),r0
5707 bicl3 #-65536,28(r0),r3
5708 movzwl 30(r0),r1
5709 bicl2 #-65536,r1
5710 bicl3 #-65536,12(r0),r2
5711 movzwl 14(r0),r0
5712 bicl2 #-65536,r0
5713 movl r3,r5
5714 movl r1,r4
5715 mull3 r0,r5,-380(fp)
5716 mull2 r2,r5
5717 mull3 r2,r4,-384(fp)
5718 mull2 r0,r4
5719 addl3 -380(fp),-384(fp),r0
5720 bicl3 #0,r0,-380(fp)
5721 cmpl -380(fp),-384(fp)
5722 bgequ noname.525
5723 addl2 #65536,r4
5724noname.525:
5725 movzwl -378(fp),r0
5726 bicl2 #-65536,r0
5727 addl2 r0,r4
5728 bicl3 #-65536,-380(fp),r0
5729 ashl #16,r0,-384(fp)
5730 addl2 -384(fp),r5
5731 bicl2 #0,r5
5732 cmpl r5,-384(fp)
5733 bgequ noname.526
5734 incl r4
5735noname.526:
5736 movl r5,r3
5737 movl r4,r2
5738 bbc #31,r2,noname.527
5739 incl r9
5740noname.527:
5741 addl2 r2,r2
5742 bicl2 #0,r2
5743 bbc #31,r3,noname.528
5744 incl r2
5745noname.528:
5746 addl2 r3,r3
5747 bicl2 #0,r3
5748 addl2 r3,r8
5749 bicl2 #0,r8
5750 cmpl r8,r3
5751 bgequ noname.529
5752 incl r2
5753 bicl3 #0,r2,r0
5754 bneq noname.529
5755 incl r9
5756noname.529:
5757 addl2 r2,r7
5758 bicl2 #0,r7
5759 cmpl r7,r2
5760 bgequ noname.530
5761 incl r9
5762noname.530:
5763 movl 4(ap),r0
5764 movl r8,40(r0)
5765
5766 clrl r8
5767
5768 movl 8(ap),r0
5769 bicl3 #-65536,28(r0),r3
5770 movzwl 30(r0),r1
5771 bicl2 #-65536,r1
5772 bicl3 #-65536,16(r0),r2
5773 movzwl 18(r0),r0
5774 bicl2 #-65536,r0
5775 movl r3,r5
5776 movl r1,r4
5777 mull3 r0,r5,-388(fp)
5778 mull2 r2,r5
5779 mull3 r2,r4,-392(fp)
5780 mull2 r0,r4
5781 addl3 -388(fp),-392(fp),r0
5782 bicl3 #0,r0,-388(fp)
5783 cmpl -388(fp),-392(fp)
5784 bgequ noname.531
5785 addl2 #65536,r4
5786noname.531:
5787 movzwl -386(fp),r0
5788 bicl2 #-65536,r0
5789 addl2 r0,r4
5790 bicl3 #-65536,-388(fp),r0
5791 ashl #16,r0,-392(fp)
5792 addl2 -392(fp),r5
5793 bicl2 #0,r5
5794 cmpl r5,-392(fp)
5795 bgequ noname.532
5796 incl r4
5797noname.532:
5798 movl r5,r3
5799 movl r4,r2
5800 bbc #31,r2,noname.533
5801 incl r8
5802noname.533:
5803 addl2 r2,r2
5804 bicl2 #0,r2
5805 bbc #31,r3,noname.534
5806 incl r2
5807noname.534:
5808 addl2 r3,r3
5809 bicl2 #0,r3
5810 addl2 r3,r7
5811 bicl2 #0,r7
5812 cmpl r7,r3
5813 bgequ noname.535
5814 incl r2
5815 bicl3 #0,r2,r0
5816 bneq noname.535
5817 incl r8
5818noname.535:
5819 addl2 r2,r9
5820 bicl2 #0,r9
5821 cmpl r9,r2
5822 bgequ noname.536
5823 incl r8
5824noname.536:
5825
5826 movl 8(ap),r0
5827 bicl3 #-65536,24(r0),r3
5828 movzwl 26(r0),r1
5829 bicl2 #-65536,r1
5830 bicl3 #-65536,20(r0),r2
5831 movzwl 22(r0),r0
5832 bicl2 #-65536,r0
5833 movl r3,r5
5834 movl r1,r4
5835 mull3 r0,r5,-396(fp)
5836 mull2 r2,r5
5837 mull3 r2,r4,-400(fp)
5838 mull2 r0,r4
5839 addl3 -396(fp),-400(fp),r0
5840 bicl3 #0,r0,-396(fp)
5841 cmpl -396(fp),-400(fp)
5842 bgequ noname.537
5843 addl2 #65536,r4
5844noname.537:
5845 movzwl -394(fp),r0
5846 bicl2 #-65536,r0
5847 addl2 r0,r4
5848 bicl3 #-65536,-396(fp),r0
5849 ashl #16,r0,-400(fp)
5850 addl2 -400(fp),r5
5851 bicl2 #0,r5
5852 cmpl r5,-400(fp)
5853 bgequ noname.538
5854 incl r4
5855noname.538:
5856 movl r5,r3
5857 movl r4,r2
5858 bbc #31,r2,noname.539
5859 incl r8
5860noname.539:
5861 addl2 r2,r2
5862 bicl2 #0,r2
5863 bbc #31,r3,noname.540
5864 incl r2
5865noname.540:
5866 addl2 r3,r3
5867 bicl2 #0,r3
5868 addl2 r3,r7
5869 bicl2 #0,r7
5870 cmpl r7,r3
5871 bgequ noname.541
5872 incl r2
5873 bicl3 #0,r2,r0
5874 bneq noname.541
5875 incl r8
5876noname.541:
5877 addl2 r2,r9
5878 bicl2 #0,r9
5879 cmpl r9,r2
5880 bgequ noname.542
5881 incl r8
5882noname.542:
5883
5884 movl 4(ap),r0
5885 movl r7,44(r0)
5886
5887 clrl r7
5888
5889 movl 8(ap),r3
5890 movl 24(r3),r4
5891 bicl3 #-65536,r4,r5
5892 extzv #16,#16,r4,r0
5893 bicl3 #-65536,r0,r4
5894 mull3 r5,r4,-404(fp)
5895 mull2 r5,r5
5896 mull2 r4,r4
5897 bicl3 #32767,-404(fp),r0
5898 extzv #15,#17,r0,r0
5899 addl2 r0,r4
5900 bicl3 #-65536,-404(fp),r0
5901 ashl #17,r0,-404(fp)
5902 addl2 -404(fp),r5
5903 bicl2 #0,r5
5904 cmpl r5,-404(fp)
5905 bgequ noname.543
5906 incl r4
5907noname.543:
5908 movl r5,r1
5909 movl r4,r2
5910 addl2 r1,r9
5911 bicl2 #0,r9
5912 cmpl r9,r1
5913 bgequ noname.544
5914 incl r2
5915noname.544:
5916 addl2 r2,r8
5917 bicl2 #0,r8
5918 cmpl r8,r2
5919 bgequ noname.545
5920 incl r7
5921noname.545:
5922
5923 movzwl 30(r3),r2
5924 bicl3 #-65536,20(r3),r1
5925 movzwl 22(r3),r0
5926 bicl2 #-65536,r0
5927 bicl3 #-65536,28(r3),-416(fp)
5928 bicl3 #-65536,r2,-420(fp)
5929 mull3 r0,-416(fp),-408(fp)
5930 mull2 r1,-416(fp)
5931 mull3 r1,-420(fp),-412(fp)
5932 mull2 r0,-420(fp)
5933 addl3 -408(fp),-412(fp),r0
5934 bicl3 #0,r0,-408(fp)
5935 cmpl -408(fp),-412(fp)
5936 bgequ noname.546
5937 addl2 #65536,-420(fp)
5938noname.546:
5939 movzwl -406(fp),r0
5940 bicl2 #-65536,r0
5941 addl2 r0,-420(fp)
5942 bicl3 #-65536,-408(fp),r0
5943 ashl #16,r0,-412(fp)
5944 addl3 -412(fp),-416(fp),r0
5945 bicl3 #0,r0,-416(fp)
5946 cmpl -416(fp),-412(fp)
5947 bgequ noname.547
5948 incl -420(fp)
5949noname.547:
5950 movl -416(fp),r3
5951 movl -420(fp),r2
5952 bbc #31,r2,noname.548
5953 incl r7
5954noname.548:
5955 addl2 r2,r2
5956 bicl2 #0,r2
5957 bbc #31,r3,noname.549
5958 incl r2
5959noname.549:
5960 addl2 r3,r3
5961 bicl2 #0,r3
5962 addl2 r3,r9
5963 bicl2 #0,r9
5964 cmpl r9,r3
5965 bgequ noname.550
5966 incl r2
5967 bicl3 #0,r2,r0
5968 bneq noname.550
5969 incl r7
5970noname.550:
5971 addl2 r2,r8
5972 bicl2 #0,r8
5973 cmpl r8,r2
5974 bgequ noname.551
5975 incl r7
5976noname.551:
5977
5978 movl 4(ap),r0
5979 movl r9,48(r0)
5980
5981 clrl r9
5982
5983 movl 8(ap),r0
5984 movzwl 30(r0),r2
5985 bicl3 #-65536,24(r0),r3
5986 movzwl 26(r0),r1
5987 bicl2 #-65536,r1
5988 bicl3 #-65536,28(r0),-432(fp)
5989 bicl3 #-65536,r2,-436(fp)
5990 mull3 r1,-432(fp),-424(fp)
5991 mull2 r3,-432(fp)
5992 mull3 r3,-436(fp),-428(fp)
5993 mull2 r1,-436(fp)
5994 addl3 -424(fp),-428(fp),r0
5995 bicl3 #0,r0,-424(fp)
5996 cmpl -424(fp),-428(fp)
5997 bgequ noname.552
5998 addl2 #65536,-436(fp)
5999noname.552:
6000 movzwl -422(fp),r0
6001 bicl2 #-65536,r0
6002 addl2 r0,-436(fp)
6003 bicl3 #-65536,-424(fp),r0
6004 ashl #16,r0,-428(fp)
6005 addl3 -428(fp),-432(fp),r0
6006 bicl3 #0,r0,-432(fp)
6007 cmpl -432(fp),-428(fp)
6008 bgequ noname.553
6009 incl -436(fp)
6010noname.553:
6011 movl -432(fp),r3
6012 movl -436(fp),r2
6013 bbc #31,r2,noname.554
6014 incl r9
6015noname.554:
6016 addl2 r2,r2
6017 bicl2 #0,r2
6018 bbc #31,r3,noname.555
6019 incl r2
6020noname.555:
6021 addl2 r3,r3
6022 bicl2 #0,r3
6023 addl2 r3,r8
6024 bicl2 #0,r8
6025 cmpl r8,r3
6026 bgequ noname.556
6027 incl r2
6028 bicl3 #0,r2,r0
6029 bneq noname.556
6030 incl r9
6031noname.556:
6032 addl2 r2,r7
6033 bicl2 #0,r7
6034 cmpl r7,r2
6035 bgequ noname.557
6036 incl r9
6037noname.557:
6038
6039 movl 4(ap),r4
6040 movl r8,52(r4)
6041
6042 clrl r8
6043
6044 movl 8(ap),r0
6045 movl 28(r0),r3
6046 bicl3 #-65536,r3,-440(fp)
6047 extzv #16,#16,r3,r0
6048 bicl3 #-65536,r0,r3
6049 movl -440(fp),r0
6050 mull3 r0,r3,-444(fp)
6051 mull3 r0,r0,-440(fp)
6052 mull2 r3,r3
6053 bicl3 #32767,-444(fp),r0
6054 extzv #15,#17,r0,r0
6055 addl2 r0,r3
6056 bicl3 #-65536,-444(fp),r0
6057 ashl #17,r0,-444(fp)
6058 addl3 -440(fp),-444(fp),r0
6059 bicl3 #0,r0,-440(fp)
6060 cmpl -440(fp),-444(fp)
6061 bgequ noname.558
6062 incl r3
6063noname.558:
6064 movl -440(fp),r1
6065 movl r3,r2
6066 addl2 r1,r7
6067 bicl2 #0,r7
6068 cmpl r7,r1
6069 bgequ noname.559
6070 incl r2
6071noname.559:
6072 addl2 r2,r9
6073 bicl2 #0,r9
6074 cmpl r9,r2
6075 bgequ noname.560
6076 incl r8
6077noname.560:
6078
6079 movl r7,56(r4)
6080
6081 movl r9,60(r4)
6082
6083 ret
6084
6085
6086
6087;r=4 ;(AP)
6088;a=8 ;(AP)
6089;b=12 ;(AP)
6090;n=16 ;(AP) n by value (input)
6091
6092 .psect code,nowrt
6093
6094.entry BN_SQR_COMBA4,^m<r2,r3,r4,r5,r6,r7,r8,r9,r10>
6095 subl2 #44,sp
6096
6097 clrq r8
6098
6099 clrl r10
6100
6101 movl 8(ap),r5
6102 movl (r5),r3
6103 bicl3 #-65536,r3,r4
6104 extzv #16,#16,r3,r0
6105 bicl3 #-65536,r0,r3
6106 mull3 r4,r3,-4(fp)
6107 mull2 r4,r4
6108 mull2 r3,r3
6109 bicl3 #32767,-4(fp),r0
6110 extzv #15,#17,r0,r0
6111 addl2 r0,r3
6112 bicl3 #-65536,-4(fp),r0
6113 ashl #17,r0,-4(fp)
6114 addl2 -4(fp),r4
6115 bicl2 #0,r4
6116 cmpl r4,-4(fp)
6117 bgequ noname.563
6118 incl r3
6119noname.563:
6120 movl r4,r1
6121 movl r3,r2
6122 addl2 r1,r9
6123 bicl2 #0,r9
6124 cmpl r9,r1
6125 bgequ noname.564
6126 incl r2
6127noname.564:
6128 addl2 r2,r8
6129 bicl2 #0,r8
6130 cmpl r8,r2
6131 bgequ noname.565
6132 incl r10
6133noname.565:
6134
6135 movl r9,@4(ap)
6136
6137 clrl r9
6138
6139 bicl3 #-65536,4(r5),r3
6140 movzwl 6(r5),r1
6141 bicl2 #-65536,r1
6142 bicl3 #-65536,(r5),r2
6143 movzwl 2(r5),r0
6144 bicl2 #-65536,r0
6145 movl r3,r6
6146 movl r1,r4
6147 mull3 r0,r6,-8(fp)
6148 mull2 r2,r6
6149 mull2 r4,r2
6150 mull2 r0,r4
6151 addl3 -8(fp),r2,r0
6152 bicl3 #0,r0,-8(fp)
6153 cmpl -8(fp),r2
6154 bgequ noname.566
6155 addl2 #65536,r4
6156noname.566:
6157 movzwl -6(fp),r0
6158 bicl2 #-65536,r0
6159 addl2 r0,r4
6160 bicl3 #-65536,-8(fp),r0
6161 ashl #16,r0,r1
6162 addl2 r1,r6
6163 bicl2 #0,r6
6164 cmpl r6,r1
6165 bgequ noname.567
6166 incl r4
6167noname.567:
6168 movl r6,r3
6169 movl r4,r2
6170 bbc #31,r2,noname.568
6171 incl r9
6172noname.568:
6173 addl2 r2,r2
6174 bicl2 #0,r2
6175 bbc #31,r3,noname.569
6176 incl r2
6177noname.569:
6178 addl2 r3,r3
6179 bicl2 #0,r3
6180 addl2 r3,r8
6181 bicl2 #0,r8
6182 cmpl r8,r3
6183 bgequ noname.570
6184 incl r2
6185 bicl3 #0,r2,r0
6186 bneq noname.570
6187 incl r9
6188noname.570:
6189 addl2 r2,r10
6190 bicl2 #0,r10
6191 cmpl r10,r2
6192 bgequ noname.571
6193 incl r9
6194noname.571:
6195
6196 movl 4(ap),r0
6197 movl r8,4(r0)
6198
6199 clrl r8
6200
6201 movl 8(ap),r4
6202 movl 4(r4),r3
6203 bicl3 #-65536,r3,r5
6204 extzv #16,#16,r3,r0
6205 bicl3 #-65536,r0,r3
6206 mull3 r5,r3,r1
6207 mull2 r5,r5
6208 mull2 r3,r3
6209 bicl3 #32767,r1,r0
6210 extzv #15,#17,r0,r0
6211 addl2 r0,r3
6212 bicl2 #-65536,r1
6213 ashl #17,r1,r1
6214 addl2 r1,r5
6215 bicl2 #0,r5
6216 cmpl r5,r1
6217 bgequ noname.572
6218 incl r3
6219noname.572:
6220 movl r5,r1
6221 movl r3,r2
6222 addl2 r1,r10
6223 bicl2 #0,r10
6224 cmpl r10,r1
6225 bgequ noname.573
6226 incl r2
6227noname.573:
6228 addl2 r2,r9
6229 bicl2 #0,r9
6230 cmpl r9,r2
6231 bgequ noname.574
6232 incl r8
6233noname.574:
6234
6235 bicl3 #-65536,8(r4),r3
6236 movzwl 10(r4),r1
6237 bicl2 #-65536,r1
6238 bicl3 #-65536,(r4),r2
6239 movzwl 2(r4),r0
6240 bicl2 #-65536,r0
6241 movl r3,r6
6242 movl r1,r5
6243 mull3 r0,r6,r7
6244 mull2 r2,r6
6245 mull2 r5,r2
6246 mull2 r0,r5
6247 addl2 r2,r7
6248 bicl2 #0,r7
6249 cmpl r7,r2
6250 bgequ noname.575
6251 addl2 #65536,r5
6252noname.575:
6253 extzv #16,#16,r7,r0
6254 bicl2 #-65536,r0
6255 addl2 r0,r5
6256 bicl3 #-65536,r7,r0
6257 ashl #16,r0,r1
6258 addl2 r1,r6
6259 bicl2 #0,r6
6260 cmpl r6,r1
6261 bgequ noname.576
6262 incl r5
6263noname.576:
6264 movl r6,r3
6265 movl r5,r2
6266 bbc #31,r2,noname.577
6267 incl r8
6268noname.577:
6269 addl2 r2,r2
6270 bicl2 #0,r2
6271 bbc #31,r3,noname.578
6272 incl r2
6273noname.578:
6274 addl2 r3,r3
6275 bicl2 #0,r3
6276 addl2 r3,r10
6277 bicl2 #0,r10
6278 cmpl r10,r3
6279 bgequ noname.579
6280 incl r2
6281 bicl3 #0,r2,r0
6282 bneq noname.579
6283 incl r8
6284noname.579:
6285 addl2 r2,r9
6286 bicl2 #0,r9
6287 cmpl r9,r2
6288 bgequ noname.580
6289 incl r8
6290noname.580:
6291
6292 movl 4(ap),r0
6293 movl r10,8(r0)
6294
6295 clrl r10
6296
6297 movl 8(ap),r0
6298 bicl3 #-65536,12(r0),r3
6299 movzwl 14(r0),r1
6300 bicl2 #-65536,r1
6301 bicl3 #-65536,(r0),r2
6302 movzwl 2(r0),r0
6303 bicl2 #-65536,r0
6304 movl r3,r5
6305 movl r1,r4
6306 mull3 r0,r5,r6
6307 mull2 r2,r5
6308 mull3 r2,r4,-12(fp)
6309 mull2 r0,r4
6310 addl2 -12(fp),r6
6311 bicl2 #0,r6
6312 cmpl r6,-12(fp)
6313 bgequ noname.581
6314 addl2 #65536,r4
6315noname.581:
6316 extzv #16,#16,r6,r0
6317 bicl2 #-65536,r0
6318 addl2 r0,r4
6319 bicl3 #-65536,r6,r0
6320 ashl #16,r0,-12(fp)
6321 addl2 -12(fp),r5
6322 bicl2 #0,r5
6323 cmpl r5,-12(fp)
6324 bgequ noname.582
6325 incl r4
6326noname.582:
6327 movl r5,r3
6328 movl r4,r2
6329 bbc #31,r2,noname.583
6330 incl r10
6331noname.583:
6332 addl2 r2,r2
6333 bicl2 #0,r2
6334 bbc #31,r3,noname.584
6335 incl r2
6336noname.584:
6337 addl2 r3,r3
6338 bicl2 #0,r3
6339 addl2 r3,r9
6340 bicl2 #0,r9
6341 cmpl r9,r3
6342 bgequ noname.585
6343 incl r2
6344 bicl3 #0,r2,r0
6345 bneq noname.585
6346 incl r10
6347noname.585:
6348 addl2 r2,r8
6349 bicl2 #0,r8
6350 cmpl r8,r2
6351 bgequ noname.586
6352 incl r10
6353noname.586:
6354
6355 movl 8(ap),r0
6356 bicl3 #-65536,8(r0),r3
6357 movzwl 10(r0),r1
6358 bicl2 #-65536,r1
6359 bicl3 #-65536,4(r0),r2
6360 movzwl 6(r0),r0
6361 bicl2 #-65536,r0
6362 movl r3,r5
6363 movl r1,r4
6364 mull3 r0,r5,-16(fp)
6365 mull2 r2,r5
6366 mull3 r2,r4,-20(fp)
6367 mull2 r0,r4
6368 addl3 -16(fp),-20(fp),r0
6369 bicl3 #0,r0,-16(fp)
6370 cmpl -16(fp),-20(fp)
6371 bgequ noname.587
6372 addl2 #65536,r4
6373noname.587:
6374 movzwl -14(fp),r0
6375 bicl2 #-65536,r0
6376 addl2 r0,r4
6377 bicl3 #-65536,-16(fp),r0
6378 ashl #16,r0,-20(fp)
6379 addl2 -20(fp),r5
6380 bicl2 #0,r5
6381 cmpl r5,-20(fp)
6382 bgequ noname.588
6383 incl r4
6384noname.588:
6385 movl r5,r3
6386 movl r4,r2
6387 bbc #31,r2,noname.589
6388 incl r10
6389noname.589:
6390 addl2 r2,r2
6391 bicl2 #0,r2
6392 bbc #31,r3,noname.590
6393 incl r2
6394noname.590:
6395 addl2 r3,r3
6396 bicl2 #0,r3
6397 addl2 r3,r9
6398 bicl2 #0,r9
6399 cmpl r9,r3
6400 bgequ noname.591
6401 incl r2
6402 bicl3 #0,r2,r0
6403 bneq noname.591
6404 incl r10
6405noname.591:
6406 addl2 r2,r8
6407 bicl2 #0,r8
6408 cmpl r8,r2
6409 bgequ noname.592
6410 incl r10
6411noname.592:
6412 movl 4(ap),r0
6413 movl r9,12(r0)
6414
6415 clrl r9
6416
6417 movl 8(ap),r3
6418 movl 8(r3),r4
6419 bicl3 #-65536,r4,r5
6420 extzv #16,#16,r4,r0
6421 bicl3 #-65536,r0,r4
6422 mull3 r5,r4,-24(fp)
6423 mull2 r5,r5
6424 mull2 r4,r4
6425 bicl3 #32767,-24(fp),r0
6426 extzv #15,#17,r0,r0
6427 addl2 r0,r4
6428 bicl3 #-65536,-24(fp),r0
6429 ashl #17,r0,-24(fp)
6430 addl2 -24(fp),r5
6431 bicl2 #0,r5
6432 cmpl r5,-24(fp)
6433 bgequ noname.593
6434 incl r4
6435noname.593:
6436 movl r5,r1
6437 movl r4,r2
6438 addl2 r1,r8
6439 bicl2 #0,r8
6440 cmpl r8,r1
6441 bgequ noname.594
6442 incl r2
6443noname.594:
6444 addl2 r2,r10
6445 bicl2 #0,r10
6446 cmpl r10,r2
6447 bgequ noname.595
6448 incl r9
6449noname.595:
6450
6451 bicl3 #-65536,12(r3),r4
6452 movzwl 14(r3),r1
6453 bicl2 #-65536,r1
6454 bicl3 #-65536,4(r3),r2
6455 movzwl 6(r3),r0
6456 bicl2 #-65536,r0
6457 movl r4,r6
6458 movl r1,r5
6459 mull3 r0,r6,-28(fp)
6460 mull2 r2,r6
6461 mull3 r2,r5,-32(fp)
6462 mull2 r0,r5
6463 addl3 -28(fp),-32(fp),r0
6464 bicl3 #0,r0,-28(fp)
6465 cmpl -28(fp),-32(fp)
6466 bgequ noname.596
6467 addl2 #65536,r5
6468noname.596:
6469 movzwl -26(fp),r0
6470 bicl2 #-65536,r0
6471 addl2 r0,r5
6472 bicl3 #-65536,-28(fp),r0
6473 ashl #16,r0,-32(fp)
6474 addl2 -32(fp),r6
6475 bicl2 #0,r6
6476 cmpl r6,-32(fp)
6477 bgequ noname.597
6478 incl r5
6479noname.597:
6480 movl r6,r3
6481 movl r5,r2
6482 bbc #31,r2,noname.598
6483 incl r9
6484noname.598:
6485 addl2 r2,r2
6486 bicl2 #0,r2
6487 bbc #31,r3,noname.599
6488 incl r2
6489noname.599:
6490 addl2 r3,r3
6491 bicl2 #0,r3
6492 addl2 r3,r8
6493 bicl2 #0,r8
6494 cmpl r8,r3
6495 bgequ noname.600
6496 incl r2
6497 bicl3 #0,r2,r0
6498 bneq noname.600
6499 incl r9
6500noname.600:
6501 addl2 r2,r10
6502 bicl2 #0,r10
6503 cmpl r10,r2
6504 bgequ noname.601
6505 incl r9
6506noname.601:
6507
6508 movl 4(ap),r0
6509 movl r8,16(r0)
6510
6511 clrl r8
6512
6513 movl 8(ap),r0
6514 bicl3 #-65536,12(r0),r3
6515 movzwl 14(r0),r1
6516 bicl2 #-65536,r1
6517 bicl3 #-65536,8(r0),r2
6518 movzwl 10(r0),r0
6519 bicl2 #-65536,r0
6520 movl r3,r5
6521 movl r1,r4
6522 mull3 r0,r5,-36(fp)
6523 mull2 r2,r5
6524 mull3 r2,r4,-40(fp)
6525 mull2 r0,r4
6526 addl3 -36(fp),-40(fp),r0
6527 bicl3 #0,r0,-36(fp)
6528 cmpl -36(fp),-40(fp)
6529 bgequ noname.602
6530 addl2 #65536,r4
6531noname.602:
6532 movzwl -34(fp),r0
6533 bicl2 #-65536,r0
6534 addl2 r0,r4
6535 bicl3 #-65536,-36(fp),r0
6536 ashl #16,r0,-40(fp)
6537 addl2 -40(fp),r5
6538 bicl2 #0,r5
6539 cmpl r5,-40(fp)
6540 bgequ noname.603
6541 incl r4
6542noname.603:
6543 movl r5,r3
6544 movl r4,r2
6545 bbc #31,r2,noname.604
6546 incl r8
6547noname.604:
6548 addl2 r2,r2
6549 bicl2 #0,r2
6550 bbc #31,r3,noname.605
6551 incl r2
6552noname.605:
6553 addl2 r3,r3
6554 bicl2 #0,r3
6555 addl2 r3,r10
6556 bicl2 #0,r10
6557 cmpl r10,r3
6558 bgequ noname.606
6559 incl r2
6560 bicl3 #0,r2,r0
6561 bneq noname.606
6562 incl r8
6563noname.606:
6564 addl2 r2,r9
6565 bicl2 #0,r9
6566 cmpl r9,r2
6567 bgequ noname.607
6568 incl r8
6569noname.607:
6570
6571 movl 4(ap),r4
6572 movl r10,20(r4)
6573
6574 clrl r10
6575
6576 movl 8(ap),r0
6577 movl 12(r0),r3
6578 bicl3 #-65536,r3,r5
6579 extzv #16,#16,r3,r0
6580 bicl3 #-65536,r0,r3
6581 mull3 r5,r3,-44(fp)
6582 mull2 r5,r5
6583 mull2 r3,r3
6584 bicl3 #32767,-44(fp),r0
6585 extzv #15,#17,r0,r0
6586 addl2 r0,r3
6587 bicl3 #-65536,-44(fp),r0
6588 ashl #17,r0,-44(fp)
6589 addl2 -44(fp),r5
6590 bicl2 #0,r5
6591 cmpl r5,-44(fp)
6592 bgequ noname.608
6593 incl r3
6594noname.608:
6595 movl r5,r1
6596 movl r3,r2
6597 addl2 r1,r9
6598 bicl2 #0,r9
6599 cmpl r9,r1
6600 bgequ noname.609
6601 incl r2
6602noname.609:
6603 addl2 r2,r8
6604 bicl2 #0,r8
6605 cmpl r8,r2
6606 bgequ noname.610
6607 incl r10
6608noname.610:
6609
6610 movl r9,24(r4)
6611
6612 movl r8,28(r4)
6613
6614 ret
6615
6616; For now, the code below doesn't work, so I end this prematurely.
6617.end
6618
6619 .title vax_bn_div64 division 64/32=>32
6620;
6621; r.l. 16-jan-1998
6622;
6623; unsigned int bn_div64(unsigned long h, unsigned long l, unsigned long d)
6624; return <h,l>/d;
6625;
6626
6627 .psect code,nowrt
6628
6629h=4 ;(AP) by value (input)
6630l=8 ;(AP) by value (input)
6631d=12 ;(AP) by value (input)
6632
6633.entry bn_div64,^m<r2,r3,r4,r5,r6,r7,r8,r9>
6634
6635 movl l(ap),r2 ; l
6636 movl h(ap),r3 ; h
6637 movl d(ap),r4 ; d
6638 clrl r5 ; q
6639 clrl r6 ; r
6640
6641 ; Treat "negative" specially
6642 tstl r3
6643 blss 30$
6644
6645 tstl r4
6646 beql 90$
6647
6648 ediv r4,r2,r5,r6
6649 bvs 666$
6650
6651 movl r5,r0
6652 ret
6653
665430$:
6655 ; The theory here is to do some harmless shifting and a little
6656 ; bit of rounding (brackets are to designate when decimals are
6657 ; cut off):
6658 ;
6659 ; result = 2 * [ ([<h,0>/2] + [d/2]) / d ] + [ l / d ]
6660
6661 movl #0,r7
6662 movl r3,r8 ; copy h
6663 ashq #-1,r7,r7 ; [<h,0>/2] => <r8,r7>
6664 bicl2 #^X80000000,r8 ; Remove "sign"
6665
6666 movl r4,r9 ; copy d
6667 ashl #-1,r9,r9 ; [d/2] => r9
6668 bicl2 #^X80000000,r9 ; Remove "sign"
6669
6670 addl2 r9,r7
6671 adwc #0,r8 ; [<h,0>/2] + [d/2] => <r8,r7>
6672
6673 ediv r4,r7,r5,r6 ; [ ([<h,0>/2] + [d/2]) / d ] => <r5,r6>
6674 bvs 666$
6675
6676 movl #0,r6
6677 ashq #1,r5,r5 ; 2 * [ ([<h,0>/2] + [d/2]) / d ] => r5
6678
6679 movl #0,r3
6680 ediv r4,r2,r8,r9 ; [ l / d ] => <r8,r9>
6681
6682 addl2 r8,r5 ;
6683 bcs 666$
6684
6685 movl r5,r0
6686 ret
6687
668890$:
6689 movl #-1,r0
6690 ret
6691
6692666$:
6693
6694
6695.end
diff --git a/src/lib/libcrypto/bn/asm/x86/f b/src/lib/libcrypto/bn/asm/x86/f
new file mode 100644
index 0000000000..22e4112224
--- /dev/null
+++ b/src/lib/libcrypto/bn/asm/x86/f
@@ -0,0 +1,3 @@
1#!/usr/local/bin/perl
2# x86 assember
3
diff --git a/src/lib/libcrypto/bn/bn.mul b/src/lib/libcrypto/bn/bn.mul
new file mode 100644
index 0000000000..9728870d38
--- /dev/null
+++ b/src/lib/libcrypto/bn/bn.mul
@@ -0,0 +1,19 @@
1We need
2
3* bn_mul_comba8
4* bn_mul_comba4
5* bn_mul_normal
6* bn_mul_recursive
7
8* bn_sqr_comba8
9* bn_sqr_comba4
10bn_sqr_normal -> BN_sqr
11* bn_sqr_recursive
12
13* bn_mul_low_recursive
14* bn_mul_low_normal
15* bn_mul_high
16
17* bn_mul_part_recursive # symetric but not power of 2
18
19bn_mul_asymetric_recursive # uneven, but do the chop up.
diff --git a/src/lib/libcrypto/bn/divtest.c b/src/lib/libcrypto/bn/divtest.c
new file mode 100644
index 0000000000..13ba86e3c4
--- /dev/null
+++ b/src/lib/libcrypto/bn/divtest.c
@@ -0,0 +1,41 @@
1#include <openssl/bn.h>
2#include <openssl/rand.h>
3
4static int rand(n)
5{
6 unsigned char x[2];
7 RAND_pseudo_bytes(x,2);
8 return (x[0] + 2*x[1]);
9}
10
11static void bug(char *m, BIGNUM *a, BIGNUM *b)
12{
13 printf("%s!\na=",m);
14 BN_print_fp(stdout, a);
15 printf("\nb=");
16 BN_print_fp(stdout, b);
17 printf("\n");
18 fflush(stdout);
19}
20
21main()
22{
23 BIGNUM *a=BN_new(), *b=BN_new(), *c=BN_new(), *d=BN_new(),
24 *C=BN_new(), *D=BN_new();
25 BN_RECP_CTX *recp=BN_RECP_CTX_new();
26 BN_CTX *ctx=BN_CTX_new();
27
28 for(;;) {
29 BN_pseudo_rand(a,rand(),0,0);
30 BN_pseudo_rand(b,rand(),0,0);
31 if (BN_is_zero(b)) continue;
32
33 BN_RECP_CTX_set(recp,b,ctx);
34 if (BN_div(C,D,a,b,ctx) != 1)
35 bug("BN_div failed",a,b);
36 if (BN_div_recp(c,d,a,recp,ctx) != 1)
37 bug("BN_div_recp failed",a,b);
38 else if (BN_cmp(c,C) != 0 || BN_cmp(c,C) != 0)
39 bug("mismatch",a,b);
40 }
41}
diff --git a/src/lib/libcrypto/bn/exp.c b/src/lib/libcrypto/bn/exp.c
new file mode 100644
index 0000000000..ec443459d8
--- /dev/null
+++ b/src/lib/libcrypto/bn/exp.c
@@ -0,0 +1,60 @@
1#include <stdio.h>
2#include <openssl/tmdiff.h>
3#include "bn_lcl.h"
4
5#define SIZE 256
6#define NUM (8*8*8)
7#define MOD (8*8*8*8*8)
8
9main(argc,argv)
10int argc;
11char *argv[];
12 {
13 BN_CTX ctx;
14 BIGNUM a,b,c,r,rr,t,l;
15 int j,i,size=SIZE,num=NUM,mod=MOD;
16 char *start,*end;
17 BN_MONT_CTX mont;
18 double d,md;
19
20 BN_MONT_CTX_init(&mont);
21 BN_CTX_init(&ctx);
22 BN_init(&a);
23 BN_init(&b);
24 BN_init(&c);
25 BN_init(&r);
26
27 start=ms_time_new();
28 end=ms_time_new();
29 while (size <= 1024*8)
30 {
31 BN_rand(&a,size,0,0);
32 BN_rand(&b,size,1,0);
33 BN_rand(&c,size,0,1);
34
35 BN_mod(&a,&a,&c,&ctx);
36
37 ms_time_get(start);
38 for (i=0; i<10; i++)
39 BN_MONT_CTX_set(&mont,&c,&ctx);
40 ms_time_get(end);
41 md=ms_time_diff(start,end);
42
43 ms_time_get(start);
44 for (i=0; i<num; i++)
45 {
46 /* bn_mull(&r,&a,&b,&ctx); */
47 /* BN_sqr(&r,&a,&ctx); */
48 BN_mod_exp_mont(&r,&a,&b,&c,&ctx,&mont);
49 }
50 ms_time_get(end);
51 d=ms_time_diff(start,end)/* *50/33 */;
52 printf("%5d bit:%6.2f %6d %6.4f %4d m_set(%5.4f)\n",size,
53 d,num,d/num,(int)((d/num)*mod),md/10.0);
54 num/=8;
55 mod/=8;
56 if (num <= 0) num=1;
57 size*=2;
58 }
59
60 }
diff --git a/src/lib/libcrypto/bn/todo b/src/lib/libcrypto/bn/todo
new file mode 100644
index 0000000000..e47e381aea
--- /dev/null
+++ b/src/lib/libcrypto/bn/todo
@@ -0,0 +1,3 @@
1Cache RECP_CTX values
2make the result argument independant of the inputs.
3split up the _exp_ functions
diff --git a/src/lib/libcrypto/bn/vms-helper.c b/src/lib/libcrypto/bn/vms-helper.c
new file mode 100644
index 0000000000..73af337069
--- /dev/null
+++ b/src/lib/libcrypto/bn/vms-helper.c
@@ -0,0 +1,66 @@
1/* vms-helper.c */
2/* ====================================================================
3 * Copyright (c) 1999 The OpenSSL Project. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 *
17 * 3. All advertising materials mentioning features or use of this
18 * software must display the following acknowledgment:
19 * "This product includes software developed by the OpenSSL Project
20 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
21 *
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23 * endorse or promote products derived from this software without
24 * prior written permission. For written permission, please contact
25 * openssl-core@OpenSSL.org.
26 *
27 * 5. Products derived from this software may not be called "OpenSSL"
28 * nor may "OpenSSL" appear in their names without prior written
29 * permission of the OpenSSL Project.
30 *
31 * 6. Redistributions of any form whatsoever must retain the following
32 * acknowledgment:
33 * "This product includes software developed by the OpenSSL Project
34 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
35 *
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47 * OF THE POSSIBILITY OF SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This product includes cryptographic software written by Eric Young
51 * (eay@cryptsoft.com). This product includes software written by Tim
52 * Hudson (tjh@cryptsoft.com).
53 *
54 */
55
56#include <stdio.h>
57#include "cryptlib.h"
58#include "bn_lcl.h"
59
60bn_div_words_abort(int i)
61{
62#if !defined(NO_STDIO) && !defined(WIN16)
63 fprintf(stderr,"Division would overflow (%d)\n",i);
64#endif
65 abort();
66}