diff options
author | ryker <> | 1998-10-05 20:13:16 +0000 |
---|---|---|
committer | ryker <> | 1998-10-05 20:13:16 +0000 |
commit | 9e43e2ac1373d5be5c6500c1bc3b1dd6ee9584b4 (patch) | |
tree | 51ff319f3510104698e541954d10ad98f9125f36 /src/lib/libcrypto/bn/asm | |
parent | 9e77c62555877f9a64805c49d0dcd7dbfbb40f4e (diff) | |
download | openbsd-9e43e2ac1373d5be5c6500c1bc3b1dd6ee9584b4.tar.gz openbsd-9e43e2ac1373d5be5c6500c1bc3b1dd6ee9584b4.tar.bz2 openbsd-9e43e2ac1373d5be5c6500c1bc3b1dd6ee9584b4.zip |
Import of SSLeay-0.9.0b with RSA and IDEA stubbed + OpenBSD build
functionality for shared libs.
Note that routines such as sslv2_init and friends that use RSA will
not work due to lack of RSA in this library.
Needs documentation and help from ports for easy upgrade to full
functionality where legally possible.
Diffstat (limited to 'src/lib/libcrypto/bn/asm')
-rw-r--r-- | src/lib/libcrypto/bn/asm/bn-win32.asm | 689 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/asm/bn86unix.cpp | 752 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/asm/sparc.s | 462 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/asm/x86w16.asm | 297 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/asm/x86w32.asm | 362 |
5 files changed, 2562 insertions, 0 deletions
diff --git a/src/lib/libcrypto/bn/asm/bn-win32.asm b/src/lib/libcrypto/bn/asm/bn-win32.asm new file mode 100644 index 0000000000..017ea462b0 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/bn-win32.asm | |||
@@ -0,0 +1,689 @@ | |||
1 | ; Don't even think of reading this code | ||
2 | ; It was automatically generated by bn-586.pl | ||
3 | ; Which is a perl program used to generate the x86 assember for | ||
4 | ; any of elf, a.out, BSDI,Win32, or Solaris | ||
5 | ; eric <eay@cryptsoft.com> | ||
6 | ; | ||
7 | TITLE bn-586.asm | ||
8 | .386 | ||
9 | .model FLAT | ||
10 | _TEXT SEGMENT | ||
11 | PUBLIC _bn_mul_add_words | ||
12 | |||
13 | _bn_mul_add_words PROC NEAR | ||
14 | push ebp | ||
15 | push ebx | ||
16 | push esi | ||
17 | push edi | ||
18 | ; | ||
19 | xor esi, esi | ||
20 | mov edi, DWORD PTR 20[esp] | ||
21 | mov ecx, DWORD PTR 28[esp] | ||
22 | mov ebx, DWORD PTR 24[esp] | ||
23 | and ecx, 4294967288 | ||
24 | mov ebp, DWORD PTR 32[esp] | ||
25 | push ecx | ||
26 | jz $L000maw_finish | ||
27 | L001maw_loop: | ||
28 | mov DWORD PTR [esp],ecx | ||
29 | ; Round 0 | ||
30 | mov eax, DWORD PTR [ebx] | ||
31 | mul ebp | ||
32 | add eax, esi | ||
33 | mov esi, DWORD PTR [edi] | ||
34 | adc edx, 0 | ||
35 | add eax, esi | ||
36 | adc edx, 0 | ||
37 | mov DWORD PTR [edi],eax | ||
38 | mov esi, edx | ||
39 | ; Round 4 | ||
40 | mov eax, DWORD PTR 4[ebx] | ||
41 | mul ebp | ||
42 | add eax, esi | ||
43 | mov esi, DWORD PTR 4[edi] | ||
44 | adc edx, 0 | ||
45 | add eax, esi | ||
46 | adc edx, 0 | ||
47 | mov DWORD PTR 4[edi],eax | ||
48 | mov esi, edx | ||
49 | ; Round 8 | ||
50 | mov eax, DWORD PTR 8[ebx] | ||
51 | mul ebp | ||
52 | add eax, esi | ||
53 | mov esi, DWORD PTR 8[edi] | ||
54 | adc edx, 0 | ||
55 | add eax, esi | ||
56 | adc edx, 0 | ||
57 | mov DWORD PTR 8[edi],eax | ||
58 | mov esi, edx | ||
59 | ; Round 12 | ||
60 | mov eax, DWORD PTR 12[ebx] | ||
61 | mul ebp | ||
62 | add eax, esi | ||
63 | mov esi, DWORD PTR 12[edi] | ||
64 | adc edx, 0 | ||
65 | add eax, esi | ||
66 | adc edx, 0 | ||
67 | mov DWORD PTR 12[edi],eax | ||
68 | mov esi, edx | ||
69 | ; Round 16 | ||
70 | mov eax, DWORD PTR 16[ebx] | ||
71 | mul ebp | ||
72 | add eax, esi | ||
73 | mov esi, DWORD PTR 16[edi] | ||
74 | adc edx, 0 | ||
75 | add eax, esi | ||
76 | adc edx, 0 | ||
77 | mov DWORD PTR 16[edi],eax | ||
78 | mov esi, edx | ||
79 | ; Round 20 | ||
80 | mov eax, DWORD PTR 20[ebx] | ||
81 | mul ebp | ||
82 | add eax, esi | ||
83 | mov esi, DWORD PTR 20[edi] | ||
84 | adc edx, 0 | ||
85 | add eax, esi | ||
86 | adc edx, 0 | ||
87 | mov DWORD PTR 20[edi],eax | ||
88 | mov esi, edx | ||
89 | ; Round 24 | ||
90 | mov eax, DWORD PTR 24[ebx] | ||
91 | mul ebp | ||
92 | add eax, esi | ||
93 | mov esi, DWORD PTR 24[edi] | ||
94 | adc edx, 0 | ||
95 | add eax, esi | ||
96 | adc edx, 0 | ||
97 | mov DWORD PTR 24[edi],eax | ||
98 | mov esi, edx | ||
99 | ; Round 28 | ||
100 | mov eax, DWORD PTR 28[ebx] | ||
101 | mul ebp | ||
102 | add eax, esi | ||
103 | mov esi, DWORD PTR 28[edi] | ||
104 | adc edx, 0 | ||
105 | add eax, esi | ||
106 | adc edx, 0 | ||
107 | mov DWORD PTR 28[edi],eax | ||
108 | mov esi, edx | ||
109 | ; | ||
110 | mov ecx, DWORD PTR [esp] | ||
111 | add ebx, 32 | ||
112 | add edi, 32 | ||
113 | sub ecx, 8 | ||
114 | jnz L001maw_loop | ||
115 | $L000maw_finish: | ||
116 | mov ecx, DWORD PTR 32[esp] | ||
117 | and ecx, 7 | ||
118 | jnz $L002maw_finish2 | ||
119 | jmp $L003maw_end | ||
120 | $L002maw_finish2: | ||
121 | ; Tail Round 0 | ||
122 | mov eax, DWORD PTR [ebx] | ||
123 | mul ebp | ||
124 | add eax, esi | ||
125 | mov esi, DWORD PTR [edi] | ||
126 | adc edx, 0 | ||
127 | add eax, esi | ||
128 | adc edx, 0 | ||
129 | dec ecx | ||
130 | mov DWORD PTR [edi],eax | ||
131 | mov esi, edx | ||
132 | jz $L003maw_end | ||
133 | ; Tail Round 1 | ||
134 | mov eax, DWORD PTR 4[ebx] | ||
135 | mul ebp | ||
136 | add eax, esi | ||
137 | mov esi, DWORD PTR 4[edi] | ||
138 | adc edx, 0 | ||
139 | add eax, esi | ||
140 | adc edx, 0 | ||
141 | dec ecx | ||
142 | mov DWORD PTR 4[edi],eax | ||
143 | mov esi, edx | ||
144 | jz $L003maw_end | ||
145 | ; Tail Round 2 | ||
146 | mov eax, DWORD PTR 8[ebx] | ||
147 | mul ebp | ||
148 | add eax, esi | ||
149 | mov esi, DWORD PTR 8[edi] | ||
150 | adc edx, 0 | ||
151 | add eax, esi | ||
152 | adc edx, 0 | ||
153 | dec ecx | ||
154 | mov DWORD PTR 8[edi],eax | ||
155 | mov esi, edx | ||
156 | jz $L003maw_end | ||
157 | ; Tail Round 3 | ||
158 | mov eax, DWORD PTR 12[ebx] | ||
159 | mul ebp | ||
160 | add eax, esi | ||
161 | mov esi, DWORD PTR 12[edi] | ||
162 | adc edx, 0 | ||
163 | add eax, esi | ||
164 | adc edx, 0 | ||
165 | dec ecx | ||
166 | mov DWORD PTR 12[edi],eax | ||
167 | mov esi, edx | ||
168 | jz $L003maw_end | ||
169 | ; Tail Round 4 | ||
170 | mov eax, DWORD PTR 16[ebx] | ||
171 | mul ebp | ||
172 | add eax, esi | ||
173 | mov esi, DWORD PTR 16[edi] | ||
174 | adc edx, 0 | ||
175 | add eax, esi | ||
176 | adc edx, 0 | ||
177 | dec ecx | ||
178 | mov DWORD PTR 16[edi],eax | ||
179 | mov esi, edx | ||
180 | jz $L003maw_end | ||
181 | ; Tail Round 5 | ||
182 | mov eax, DWORD PTR 20[ebx] | ||
183 | mul ebp | ||
184 | add eax, esi | ||
185 | mov esi, DWORD PTR 20[edi] | ||
186 | adc edx, 0 | ||
187 | add eax, esi | ||
188 | adc edx, 0 | ||
189 | dec ecx | ||
190 | mov DWORD PTR 20[edi],eax | ||
191 | mov esi, edx | ||
192 | jz $L003maw_end | ||
193 | ; Tail Round 6 | ||
194 | mov eax, DWORD PTR 24[ebx] | ||
195 | mul ebp | ||
196 | add eax, esi | ||
197 | mov esi, DWORD PTR 24[edi] | ||
198 | adc edx, 0 | ||
199 | add eax, esi | ||
200 | adc edx, 0 | ||
201 | mov DWORD PTR 24[edi],eax | ||
202 | mov esi, edx | ||
203 | $L003maw_end: | ||
204 | mov eax, esi | ||
205 | pop ecx | ||
206 | pop edi | ||
207 | pop esi | ||
208 | pop ebx | ||
209 | pop ebp | ||
210 | ret | ||
211 | _bn_mul_add_words ENDP | ||
212 | _TEXT ENDS | ||
213 | _TEXT SEGMENT | ||
214 | PUBLIC _bn_mul_words | ||
215 | |||
216 | _bn_mul_words PROC NEAR | ||
217 | push ebp | ||
218 | push ebx | ||
219 | push esi | ||
220 | push edi | ||
221 | ; | ||
222 | xor esi, esi | ||
223 | mov edi, DWORD PTR 20[esp] | ||
224 | mov ebx, DWORD PTR 24[esp] | ||
225 | mov ebp, DWORD PTR 28[esp] | ||
226 | mov ecx, DWORD PTR 32[esp] | ||
227 | and ebp, 4294967288 | ||
228 | jz $L004mw_finish | ||
229 | L005mw_loop: | ||
230 | ; Round 0 | ||
231 | mov eax, DWORD PTR [ebx] | ||
232 | mul ecx | ||
233 | add eax, esi | ||
234 | adc edx, 0 | ||
235 | mov DWORD PTR [edi],eax | ||
236 | mov esi, edx | ||
237 | ; Round 4 | ||
238 | mov eax, DWORD PTR 4[ebx] | ||
239 | mul ecx | ||
240 | add eax, esi | ||
241 | adc edx, 0 | ||
242 | mov DWORD PTR 4[edi],eax | ||
243 | mov esi, edx | ||
244 | ; Round 8 | ||
245 | mov eax, DWORD PTR 8[ebx] | ||
246 | mul ecx | ||
247 | add eax, esi | ||
248 | adc edx, 0 | ||
249 | mov DWORD PTR 8[edi],eax | ||
250 | mov esi, edx | ||
251 | ; Round 12 | ||
252 | mov eax, DWORD PTR 12[ebx] | ||
253 | mul ecx | ||
254 | add eax, esi | ||
255 | adc edx, 0 | ||
256 | mov DWORD PTR 12[edi],eax | ||
257 | mov esi, edx | ||
258 | ; Round 16 | ||
259 | mov eax, DWORD PTR 16[ebx] | ||
260 | mul ecx | ||
261 | add eax, esi | ||
262 | adc edx, 0 | ||
263 | mov DWORD PTR 16[edi],eax | ||
264 | mov esi, edx | ||
265 | ; Round 20 | ||
266 | mov eax, DWORD PTR 20[ebx] | ||
267 | mul ecx | ||
268 | add eax, esi | ||
269 | adc edx, 0 | ||
270 | mov DWORD PTR 20[edi],eax | ||
271 | mov esi, edx | ||
272 | ; Round 24 | ||
273 | mov eax, DWORD PTR 24[ebx] | ||
274 | mul ecx | ||
275 | add eax, esi | ||
276 | adc edx, 0 | ||
277 | mov DWORD PTR 24[edi],eax | ||
278 | mov esi, edx | ||
279 | ; Round 28 | ||
280 | mov eax, DWORD PTR 28[ebx] | ||
281 | mul ecx | ||
282 | add eax, esi | ||
283 | adc edx, 0 | ||
284 | mov DWORD PTR 28[edi],eax | ||
285 | mov esi, edx | ||
286 | ; | ||
287 | add ebx, 32 | ||
288 | add edi, 32 | ||
289 | sub ebp, 8 | ||
290 | jz $L004mw_finish | ||
291 | jmp L005mw_loop | ||
292 | $L004mw_finish: | ||
293 | mov ebp, DWORD PTR 28[esp] | ||
294 | and ebp, 7 | ||
295 | jnz $L006mw_finish2 | ||
296 | jmp $L007mw_end | ||
297 | $L006mw_finish2: | ||
298 | ; Tail Round 0 | ||
299 | mov eax, DWORD PTR [ebx] | ||
300 | mul ecx | ||
301 | add eax, esi | ||
302 | adc edx, 0 | ||
303 | mov DWORD PTR [edi],eax | ||
304 | mov esi, edx | ||
305 | dec ebp | ||
306 | jz $L007mw_end | ||
307 | ; Tail Round 1 | ||
308 | mov eax, DWORD PTR 4[ebx] | ||
309 | mul ecx | ||
310 | add eax, esi | ||
311 | adc edx, 0 | ||
312 | mov DWORD PTR 4[edi],eax | ||
313 | mov esi, edx | ||
314 | dec ebp | ||
315 | jz $L007mw_end | ||
316 | ; Tail Round 2 | ||
317 | mov eax, DWORD PTR 8[ebx] | ||
318 | mul ecx | ||
319 | add eax, esi | ||
320 | adc edx, 0 | ||
321 | mov DWORD PTR 8[edi],eax | ||
322 | mov esi, edx | ||
323 | dec ebp | ||
324 | jz $L007mw_end | ||
325 | ; Tail Round 3 | ||
326 | mov eax, DWORD PTR 12[ebx] | ||
327 | mul ecx | ||
328 | add eax, esi | ||
329 | adc edx, 0 | ||
330 | mov DWORD PTR 12[edi],eax | ||
331 | mov esi, edx | ||
332 | dec ebp | ||
333 | jz $L007mw_end | ||
334 | ; Tail Round 4 | ||
335 | mov eax, DWORD PTR 16[ebx] | ||
336 | mul ecx | ||
337 | add eax, esi | ||
338 | adc edx, 0 | ||
339 | mov DWORD PTR 16[edi],eax | ||
340 | mov esi, edx | ||
341 | dec ebp | ||
342 | jz $L007mw_end | ||
343 | ; Tail Round 5 | ||
344 | mov eax, DWORD PTR 20[ebx] | ||
345 | mul ecx | ||
346 | add eax, esi | ||
347 | adc edx, 0 | ||
348 | mov DWORD PTR 20[edi],eax | ||
349 | mov esi, edx | ||
350 | dec ebp | ||
351 | jz $L007mw_end | ||
352 | ; Tail Round 6 | ||
353 | mov eax, DWORD PTR 24[ebx] | ||
354 | mul ecx | ||
355 | add eax, esi | ||
356 | adc edx, 0 | ||
357 | mov DWORD PTR 24[edi],eax | ||
358 | mov esi, edx | ||
359 | $L007mw_end: | ||
360 | mov eax, esi | ||
361 | pop edi | ||
362 | pop esi | ||
363 | pop ebx | ||
364 | pop ebp | ||
365 | ret | ||
366 | _bn_mul_words ENDP | ||
367 | _TEXT ENDS | ||
368 | _TEXT SEGMENT | ||
369 | PUBLIC _bn_sqr_words | ||
370 | |||
371 | _bn_sqr_words PROC NEAR | ||
372 | push ebp | ||
373 | push ebx | ||
374 | push esi | ||
375 | push edi | ||
376 | ; | ||
377 | mov esi, DWORD PTR 20[esp] | ||
378 | mov edi, DWORD PTR 24[esp] | ||
379 | mov ebx, DWORD PTR 28[esp] | ||
380 | and ebx, 4294967288 | ||
381 | jz $L008sw_finish | ||
382 | L009sw_loop: | ||
383 | ; Round 0 | ||
384 | mov eax, DWORD PTR [edi] | ||
385 | mul eax | ||
386 | mov DWORD PTR [esi],eax | ||
387 | mov DWORD PTR 4[esi],edx | ||
388 | ; Round 4 | ||
389 | mov eax, DWORD PTR 4[edi] | ||
390 | mul eax | ||
391 | mov DWORD PTR 8[esi],eax | ||
392 | mov DWORD PTR 12[esi],edx | ||
393 | ; Round 8 | ||
394 | mov eax, DWORD PTR 8[edi] | ||
395 | mul eax | ||
396 | mov DWORD PTR 16[esi],eax | ||
397 | mov DWORD PTR 20[esi],edx | ||
398 | ; Round 12 | ||
399 | mov eax, DWORD PTR 12[edi] | ||
400 | mul eax | ||
401 | mov DWORD PTR 24[esi],eax | ||
402 | mov DWORD PTR 28[esi],edx | ||
403 | ; Round 16 | ||
404 | mov eax, DWORD PTR 16[edi] | ||
405 | mul eax | ||
406 | mov DWORD PTR 32[esi],eax | ||
407 | mov DWORD PTR 36[esi],edx | ||
408 | ; Round 20 | ||
409 | mov eax, DWORD PTR 20[edi] | ||
410 | mul eax | ||
411 | mov DWORD PTR 40[esi],eax | ||
412 | mov DWORD PTR 44[esi],edx | ||
413 | ; Round 24 | ||
414 | mov eax, DWORD PTR 24[edi] | ||
415 | mul eax | ||
416 | mov DWORD PTR 48[esi],eax | ||
417 | mov DWORD PTR 52[esi],edx | ||
418 | ; Round 28 | ||
419 | mov eax, DWORD PTR 28[edi] | ||
420 | mul eax | ||
421 | mov DWORD PTR 56[esi],eax | ||
422 | mov DWORD PTR 60[esi],edx | ||
423 | ; | ||
424 | add edi, 32 | ||
425 | add esi, 64 | ||
426 | sub ebx, 8 | ||
427 | jnz L009sw_loop | ||
428 | $L008sw_finish: | ||
429 | mov ebx, DWORD PTR 28[esp] | ||
430 | and ebx, 7 | ||
431 | jz $L010sw_end | ||
432 | ; Tail Round 0 | ||
433 | mov eax, DWORD PTR [edi] | ||
434 | mul eax | ||
435 | mov DWORD PTR [esi],eax | ||
436 | dec ebx | ||
437 | mov DWORD PTR 4[esi],edx | ||
438 | jz $L010sw_end | ||
439 | ; Tail Round 1 | ||
440 | mov eax, DWORD PTR 4[edi] | ||
441 | mul eax | ||
442 | mov DWORD PTR 8[esi],eax | ||
443 | dec ebx | ||
444 | mov DWORD PTR 12[esi],edx | ||
445 | jz $L010sw_end | ||
446 | ; Tail Round 2 | ||
447 | mov eax, DWORD PTR 8[edi] | ||
448 | mul eax | ||
449 | mov DWORD PTR 16[esi],eax | ||
450 | dec ebx | ||
451 | mov DWORD PTR 20[esi],edx | ||
452 | jz $L010sw_end | ||
453 | ; Tail Round 3 | ||
454 | mov eax, DWORD PTR 12[edi] | ||
455 | mul eax | ||
456 | mov DWORD PTR 24[esi],eax | ||
457 | dec ebx | ||
458 | mov DWORD PTR 28[esi],edx | ||
459 | jz $L010sw_end | ||
460 | ; Tail Round 4 | ||
461 | mov eax, DWORD PTR 16[edi] | ||
462 | mul eax | ||
463 | mov DWORD PTR 32[esi],eax | ||
464 | dec ebx | ||
465 | mov DWORD PTR 36[esi],edx | ||
466 | jz $L010sw_end | ||
467 | ; Tail Round 5 | ||
468 | mov eax, DWORD PTR 20[edi] | ||
469 | mul eax | ||
470 | mov DWORD PTR 40[esi],eax | ||
471 | dec ebx | ||
472 | mov DWORD PTR 44[esi],edx | ||
473 | jz $L010sw_end | ||
474 | ; Tail Round 6 | ||
475 | mov eax, DWORD PTR 24[edi] | ||
476 | mul eax | ||
477 | mov DWORD PTR 48[esi],eax | ||
478 | mov DWORD PTR 52[esi],edx | ||
479 | $L010sw_end: | ||
480 | pop edi | ||
481 | pop esi | ||
482 | pop ebx | ||
483 | pop ebp | ||
484 | ret | ||
485 | _bn_sqr_words ENDP | ||
486 | _TEXT ENDS | ||
487 | _TEXT SEGMENT | ||
488 | PUBLIC _bn_div64 | ||
489 | |||
490 | _bn_div64 PROC NEAR | ||
491 | push ebp | ||
492 | push ebx | ||
493 | push esi | ||
494 | push edi | ||
495 | mov edx, DWORD PTR 20[esp] | ||
496 | mov eax, DWORD PTR 24[esp] | ||
497 | mov ebx, DWORD PTR 28[esp] | ||
498 | div ebx | ||
499 | pop edi | ||
500 | pop esi | ||
501 | pop ebx | ||
502 | pop ebp | ||
503 | ret | ||
504 | _bn_div64 ENDP | ||
505 | _TEXT ENDS | ||
506 | _TEXT SEGMENT | ||
507 | PUBLIC _bn_add_words | ||
508 | |||
509 | _bn_add_words PROC NEAR | ||
510 | push ebp | ||
511 | push ebx | ||
512 | push esi | ||
513 | push edi | ||
514 | ; | ||
515 | mov ebx, DWORD PTR 20[esp] | ||
516 | mov esi, DWORD PTR 24[esp] | ||
517 | mov edi, DWORD PTR 28[esp] | ||
518 | mov ebp, DWORD PTR 32[esp] | ||
519 | xor eax, eax | ||
520 | and ebp, 4294967288 | ||
521 | jz $L011aw_finish | ||
522 | L012aw_loop: | ||
523 | ; Round 0 | ||
524 | mov ecx, DWORD PTR [esi] | ||
525 | mov edx, DWORD PTR [edi] | ||
526 | add ecx, eax | ||
527 | mov eax, 0 | ||
528 | adc eax, eax | ||
529 | add ecx, edx | ||
530 | adc eax, 0 | ||
531 | mov DWORD PTR [ebx],ecx | ||
532 | ; Round 1 | ||
533 | mov ecx, DWORD PTR 4[esi] | ||
534 | mov edx, DWORD PTR 4[edi] | ||
535 | add ecx, eax | ||
536 | mov eax, 0 | ||
537 | adc eax, eax | ||
538 | add ecx, edx | ||
539 | adc eax, 0 | ||
540 | mov DWORD PTR 4[ebx],ecx | ||
541 | ; Round 2 | ||
542 | mov ecx, DWORD PTR 8[esi] | ||
543 | mov edx, DWORD PTR 8[edi] | ||
544 | add ecx, eax | ||
545 | mov eax, 0 | ||
546 | adc eax, eax | ||
547 | add ecx, edx | ||
548 | adc eax, 0 | ||
549 | mov DWORD PTR 8[ebx],ecx | ||
550 | ; Round 3 | ||
551 | mov ecx, DWORD PTR 12[esi] | ||
552 | mov edx, DWORD PTR 12[edi] | ||
553 | add ecx, eax | ||
554 | mov eax, 0 | ||
555 | adc eax, eax | ||
556 | add ecx, edx | ||
557 | adc eax, 0 | ||
558 | mov DWORD PTR 12[ebx],ecx | ||
559 | ; Round 4 | ||
560 | mov ecx, DWORD PTR 16[esi] | ||
561 | mov edx, DWORD PTR 16[edi] | ||
562 | add ecx, eax | ||
563 | mov eax, 0 | ||
564 | adc eax, eax | ||
565 | add ecx, edx | ||
566 | adc eax, 0 | ||
567 | mov DWORD PTR 16[ebx],ecx | ||
568 | ; Round 5 | ||
569 | mov ecx, DWORD PTR 20[esi] | ||
570 | mov edx, DWORD PTR 20[edi] | ||
571 | add ecx, eax | ||
572 | mov eax, 0 | ||
573 | adc eax, eax | ||
574 | add ecx, edx | ||
575 | adc eax, 0 | ||
576 | mov DWORD PTR 20[ebx],ecx | ||
577 | ; Round 6 | ||
578 | mov ecx, DWORD PTR 24[esi] | ||
579 | mov edx, DWORD PTR 24[edi] | ||
580 | add ecx, eax | ||
581 | mov eax, 0 | ||
582 | adc eax, eax | ||
583 | add ecx, edx | ||
584 | adc eax, 0 | ||
585 | mov DWORD PTR 24[ebx],ecx | ||
586 | ; Round 7 | ||
587 | mov ecx, DWORD PTR 28[esi] | ||
588 | mov edx, DWORD PTR 28[edi] | ||
589 | add ecx, eax | ||
590 | mov eax, 0 | ||
591 | adc eax, eax | ||
592 | add ecx, edx | ||
593 | adc eax, 0 | ||
594 | mov DWORD PTR 28[ebx],ecx | ||
595 | ; | ||
596 | add esi, 32 | ||
597 | add edi, 32 | ||
598 | add ebx, 32 | ||
599 | sub ebp, 8 | ||
600 | jnz L012aw_loop | ||
601 | $L011aw_finish: | ||
602 | mov ebp, DWORD PTR 32[esp] | ||
603 | and ebp, 7 | ||
604 | jz $L013aw_end | ||
605 | ; Tail Round 0 | ||
606 | mov ecx, DWORD PTR [esi] | ||
607 | mov edx, DWORD PTR [edi] | ||
608 | add ecx, eax | ||
609 | mov eax, 0 | ||
610 | adc eax, eax | ||
611 | add ecx, edx | ||
612 | adc eax, 0 | ||
613 | dec ebp | ||
614 | mov DWORD PTR [ebx],ecx | ||
615 | jz $L013aw_end | ||
616 | ; Tail Round 1 | ||
617 | mov ecx, DWORD PTR 4[esi] | ||
618 | mov edx, DWORD PTR 4[edi] | ||
619 | add ecx, eax | ||
620 | mov eax, 0 | ||
621 | adc eax, eax | ||
622 | add ecx, edx | ||
623 | adc eax, 0 | ||
624 | dec ebp | ||
625 | mov DWORD PTR 4[ebx],ecx | ||
626 | jz $L013aw_end | ||
627 | ; Tail Round 2 | ||
628 | mov ecx, DWORD PTR 8[esi] | ||
629 | mov edx, DWORD PTR 8[edi] | ||
630 | add ecx, eax | ||
631 | mov eax, 0 | ||
632 | adc eax, eax | ||
633 | add ecx, edx | ||
634 | adc eax, 0 | ||
635 | dec ebp | ||
636 | mov DWORD PTR 8[ebx],ecx | ||
637 | jz $L013aw_end | ||
638 | ; Tail Round 3 | ||
639 | mov ecx, DWORD PTR 12[esi] | ||
640 | mov edx, DWORD PTR 12[edi] | ||
641 | add ecx, eax | ||
642 | mov eax, 0 | ||
643 | adc eax, eax | ||
644 | add ecx, edx | ||
645 | adc eax, 0 | ||
646 | dec ebp | ||
647 | mov DWORD PTR 12[ebx],ecx | ||
648 | jz $L013aw_end | ||
649 | ; Tail Round 4 | ||
650 | mov ecx, DWORD PTR 16[esi] | ||
651 | mov edx, DWORD PTR 16[edi] | ||
652 | add ecx, eax | ||
653 | mov eax, 0 | ||
654 | adc eax, eax | ||
655 | add ecx, edx | ||
656 | adc eax, 0 | ||
657 | dec ebp | ||
658 | mov DWORD PTR 16[ebx],ecx | ||
659 | jz $L013aw_end | ||
660 | ; Tail Round 5 | ||
661 | mov ecx, DWORD PTR 20[esi] | ||
662 | mov edx, DWORD PTR 20[edi] | ||
663 | add ecx, eax | ||
664 | mov eax, 0 | ||
665 | adc eax, eax | ||
666 | add ecx, edx | ||
667 | adc eax, 0 | ||
668 | dec ebp | ||
669 | mov DWORD PTR 20[ebx],ecx | ||
670 | jz $L013aw_end | ||
671 | ; Tail Round 6 | ||
672 | mov ecx, DWORD PTR 24[esi] | ||
673 | mov edx, DWORD PTR 24[edi] | ||
674 | add ecx, eax | ||
675 | mov eax, 0 | ||
676 | adc eax, eax | ||
677 | add ecx, edx | ||
678 | adc eax, 0 | ||
679 | mov DWORD PTR 24[ebx],ecx | ||
680 | $L013aw_end: | ||
681 | mov eax, eax | ||
682 | pop edi | ||
683 | pop esi | ||
684 | pop ebx | ||
685 | pop ebp | ||
686 | ret | ||
687 | _bn_add_words ENDP | ||
688 | _TEXT ENDS | ||
689 | END | ||
diff --git a/src/lib/libcrypto/bn/asm/bn86unix.cpp b/src/lib/libcrypto/bn/asm/bn86unix.cpp new file mode 100644 index 0000000000..64702201ea --- /dev/null +++ b/src/lib/libcrypto/bn/asm/bn86unix.cpp | |||
@@ -0,0 +1,752 @@ | |||
1 | /* Run the C pre-processor over this file with one of the following defined | ||
2 | * ELF - elf object files, | ||
3 | * OUT - a.out object files, | ||
4 | * BSDI - BSDI style a.out object files | ||
5 | * SOL - Solaris style elf | ||
6 | */ | ||
7 | |||
8 | #define TYPE(a,b) .type a,b | ||
9 | #define SIZE(a,b) .size a,b | ||
10 | |||
11 | #if defined(OUT) || defined(BSDI) | ||
12 | #define bn_mul_add_words _bn_mul_add_words | ||
13 | #define bn_mul_words _bn_mul_words | ||
14 | #define bn_sqr_words _bn_sqr_words | ||
15 | #define bn_div64 _bn_div64 | ||
16 | #define bn_add_words _bn_add_words | ||
17 | |||
18 | #endif | ||
19 | |||
20 | #ifdef OUT | ||
21 | #define OK 1 | ||
22 | #define ALIGN 4 | ||
23 | #endif | ||
24 | |||
25 | #ifdef BSDI | ||
26 | #define OK 1 | ||
27 | #define ALIGN 4 | ||
28 | #undef SIZE | ||
29 | #undef TYPE | ||
30 | #define SIZE(a,b) | ||
31 | #define TYPE(a,b) | ||
32 | #endif | ||
33 | |||
34 | #if defined(ELF) || defined(SOL) | ||
35 | #define OK 1 | ||
36 | #define ALIGN 16 | ||
37 | #endif | ||
38 | |||
39 | #ifndef OK | ||
40 | You need to define one of | ||
41 | ELF - elf systems - linux-elf, NetBSD and DG-UX | ||
42 | OUT - a.out systems - linux-a.out and FreeBSD | ||
43 | SOL - solaris systems, which are elf with strange comment lines | ||
44 | BSDI - a.out with a very primative version of as. | ||
45 | #endif | ||
46 | |||
47 | /* Let the Assembler begin :-) */ | ||
48 | /* Don't even think of reading this code */ | ||
49 | /* It was automatically generated by bn-586.pl */ | ||
50 | /* Which is a perl program used to generate the x86 assember for */ | ||
51 | /* any of elf, a.out, BSDI,Win32, or Solaris */ | ||
52 | /* eric <eay@cryptsoft.com> */ | ||
53 | |||
54 | .file "bn-586.s" | ||
55 | .version "01.01" | ||
56 | gcc2_compiled.: | ||
57 | .text | ||
58 | .align ALIGN | ||
59 | .globl bn_mul_add_words | ||
60 | TYPE(bn_mul_add_words,@function) | ||
61 | bn_mul_add_words: | ||
62 | pushl %ebp | ||
63 | pushl %ebx | ||
64 | pushl %esi | ||
65 | pushl %edi | ||
66 | |||
67 | |||
68 | xorl %esi, %esi | ||
69 | movl 20(%esp), %edi | ||
70 | movl 28(%esp), %ecx | ||
71 | movl 24(%esp), %ebx | ||
72 | andl $4294967288, %ecx | ||
73 | movl 32(%esp), %ebp | ||
74 | pushl %ecx | ||
75 | jz .L000maw_finish | ||
76 | .L001maw_loop: | ||
77 | movl %ecx, (%esp) | ||
78 | /* Round 0 */ | ||
79 | movl (%ebx), %eax | ||
80 | mull %ebp | ||
81 | addl %esi, %eax | ||
82 | movl (%edi), %esi | ||
83 | adcl $0, %edx | ||
84 | addl %esi, %eax | ||
85 | adcl $0, %edx | ||
86 | movl %eax, (%edi) | ||
87 | movl %edx, %esi | ||
88 | /* Round 4 */ | ||
89 | movl 4(%ebx), %eax | ||
90 | mull %ebp | ||
91 | addl %esi, %eax | ||
92 | movl 4(%edi), %esi | ||
93 | adcl $0, %edx | ||
94 | addl %esi, %eax | ||
95 | adcl $0, %edx | ||
96 | movl %eax, 4(%edi) | ||
97 | movl %edx, %esi | ||
98 | /* Round 8 */ | ||
99 | movl 8(%ebx), %eax | ||
100 | mull %ebp | ||
101 | addl %esi, %eax | ||
102 | movl 8(%edi), %esi | ||
103 | adcl $0, %edx | ||
104 | addl %esi, %eax | ||
105 | adcl $0, %edx | ||
106 | movl %eax, 8(%edi) | ||
107 | movl %edx, %esi | ||
108 | /* Round 12 */ | ||
109 | movl 12(%ebx), %eax | ||
110 | mull %ebp | ||
111 | addl %esi, %eax | ||
112 | movl 12(%edi), %esi | ||
113 | adcl $0, %edx | ||
114 | addl %esi, %eax | ||
115 | adcl $0, %edx | ||
116 | movl %eax, 12(%edi) | ||
117 | movl %edx, %esi | ||
118 | /* Round 16 */ | ||
119 | movl 16(%ebx), %eax | ||
120 | mull %ebp | ||
121 | addl %esi, %eax | ||
122 | movl 16(%edi), %esi | ||
123 | adcl $0, %edx | ||
124 | addl %esi, %eax | ||
125 | adcl $0, %edx | ||
126 | movl %eax, 16(%edi) | ||
127 | movl %edx, %esi | ||
128 | /* Round 20 */ | ||
129 | movl 20(%ebx), %eax | ||
130 | mull %ebp | ||
131 | addl %esi, %eax | ||
132 | movl 20(%edi), %esi | ||
133 | adcl $0, %edx | ||
134 | addl %esi, %eax | ||
135 | adcl $0, %edx | ||
136 | movl %eax, 20(%edi) | ||
137 | movl %edx, %esi | ||
138 | /* Round 24 */ | ||
139 | movl 24(%ebx), %eax | ||
140 | mull %ebp | ||
141 | addl %esi, %eax | ||
142 | movl 24(%edi), %esi | ||
143 | adcl $0, %edx | ||
144 | addl %esi, %eax | ||
145 | adcl $0, %edx | ||
146 | movl %eax, 24(%edi) | ||
147 | movl %edx, %esi | ||
148 | /* Round 28 */ | ||
149 | movl 28(%ebx), %eax | ||
150 | mull %ebp | ||
151 | addl %esi, %eax | ||
152 | movl 28(%edi), %esi | ||
153 | adcl $0, %edx | ||
154 | addl %esi, %eax | ||
155 | adcl $0, %edx | ||
156 | movl %eax, 28(%edi) | ||
157 | movl %edx, %esi | ||
158 | |||
159 | movl (%esp), %ecx | ||
160 | addl $32, %ebx | ||
161 | addl $32, %edi | ||
162 | subl $8, %ecx | ||
163 | jnz .L001maw_loop | ||
164 | .L000maw_finish: | ||
165 | movl 32(%esp), %ecx | ||
166 | andl $7, %ecx | ||
167 | jnz .L002maw_finish2 | ||
168 | jmp .L003maw_end | ||
169 | .align ALIGN | ||
170 | .L002maw_finish2: | ||
171 | /* Tail Round 0 */ | ||
172 | movl (%ebx), %eax | ||
173 | mull %ebp | ||
174 | addl %esi, %eax | ||
175 | movl (%edi), %esi | ||
176 | adcl $0, %edx | ||
177 | addl %esi, %eax | ||
178 | adcl $0, %edx | ||
179 | decl %ecx | ||
180 | movl %eax, (%edi) | ||
181 | movl %edx, %esi | ||
182 | jz .L003maw_end | ||
183 | /* Tail Round 1 */ | ||
184 | movl 4(%ebx), %eax | ||
185 | mull %ebp | ||
186 | addl %esi, %eax | ||
187 | movl 4(%edi), %esi | ||
188 | adcl $0, %edx | ||
189 | addl %esi, %eax | ||
190 | adcl $0, %edx | ||
191 | decl %ecx | ||
192 | movl %eax, 4(%edi) | ||
193 | movl %edx, %esi | ||
194 | jz .L003maw_end | ||
195 | /* Tail Round 2 */ | ||
196 | movl 8(%ebx), %eax | ||
197 | mull %ebp | ||
198 | addl %esi, %eax | ||
199 | movl 8(%edi), %esi | ||
200 | adcl $0, %edx | ||
201 | addl %esi, %eax | ||
202 | adcl $0, %edx | ||
203 | decl %ecx | ||
204 | movl %eax, 8(%edi) | ||
205 | movl %edx, %esi | ||
206 | jz .L003maw_end | ||
207 | /* Tail Round 3 */ | ||
208 | movl 12(%ebx), %eax | ||
209 | mull %ebp | ||
210 | addl %esi, %eax | ||
211 | movl 12(%edi), %esi | ||
212 | adcl $0, %edx | ||
213 | addl %esi, %eax | ||
214 | adcl $0, %edx | ||
215 | decl %ecx | ||
216 | movl %eax, 12(%edi) | ||
217 | movl %edx, %esi | ||
218 | jz .L003maw_end | ||
219 | /* Tail Round 4 */ | ||
220 | movl 16(%ebx), %eax | ||
221 | mull %ebp | ||
222 | addl %esi, %eax | ||
223 | movl 16(%edi), %esi | ||
224 | adcl $0, %edx | ||
225 | addl %esi, %eax | ||
226 | adcl $0, %edx | ||
227 | decl %ecx | ||
228 | movl %eax, 16(%edi) | ||
229 | movl %edx, %esi | ||
230 | jz .L003maw_end | ||
231 | /* Tail Round 5 */ | ||
232 | movl 20(%ebx), %eax | ||
233 | mull %ebp | ||
234 | addl %esi, %eax | ||
235 | movl 20(%edi), %esi | ||
236 | adcl $0, %edx | ||
237 | addl %esi, %eax | ||
238 | adcl $0, %edx | ||
239 | decl %ecx | ||
240 | movl %eax, 20(%edi) | ||
241 | movl %edx, %esi | ||
242 | jz .L003maw_end | ||
243 | /* Tail Round 6 */ | ||
244 | movl 24(%ebx), %eax | ||
245 | mull %ebp | ||
246 | addl %esi, %eax | ||
247 | movl 24(%edi), %esi | ||
248 | adcl $0, %edx | ||
249 | addl %esi, %eax | ||
250 | adcl $0, %edx | ||
251 | movl %eax, 24(%edi) | ||
252 | movl %edx, %esi | ||
253 | .L003maw_end: | ||
254 | movl %esi, %eax | ||
255 | popl %ecx | ||
256 | popl %edi | ||
257 | popl %esi | ||
258 | popl %ebx | ||
259 | popl %ebp | ||
260 | ret | ||
261 | .bn_mul_add_words_end: | ||
262 | SIZE(bn_mul_add_words,.bn_mul_add_words_end-bn_mul_add_words) | ||
263 | .ident "bn_mul_add_words" | ||
264 | .text | ||
265 | .align ALIGN | ||
266 | .globl bn_mul_words | ||
267 | TYPE(bn_mul_words,@function) | ||
268 | bn_mul_words: | ||
269 | pushl %ebp | ||
270 | pushl %ebx | ||
271 | pushl %esi | ||
272 | pushl %edi | ||
273 | |||
274 | |||
275 | xorl %esi, %esi | ||
276 | movl 20(%esp), %edi | ||
277 | movl 24(%esp), %ebx | ||
278 | movl 28(%esp), %ebp | ||
279 | movl 32(%esp), %ecx | ||
280 | andl $4294967288, %ebp | ||
281 | jz .L004mw_finish | ||
282 | .L005mw_loop: | ||
283 | /* Round 0 */ | ||
284 | movl (%ebx), %eax | ||
285 | mull %ecx | ||
286 | addl %esi, %eax | ||
287 | adcl $0, %edx | ||
288 | movl %eax, (%edi) | ||
289 | movl %edx, %esi | ||
290 | /* Round 4 */ | ||
291 | movl 4(%ebx), %eax | ||
292 | mull %ecx | ||
293 | addl %esi, %eax | ||
294 | adcl $0, %edx | ||
295 | movl %eax, 4(%edi) | ||
296 | movl %edx, %esi | ||
297 | /* Round 8 */ | ||
298 | movl 8(%ebx), %eax | ||
299 | mull %ecx | ||
300 | addl %esi, %eax | ||
301 | adcl $0, %edx | ||
302 | movl %eax, 8(%edi) | ||
303 | movl %edx, %esi | ||
304 | /* Round 12 */ | ||
305 | movl 12(%ebx), %eax | ||
306 | mull %ecx | ||
307 | addl %esi, %eax | ||
308 | adcl $0, %edx | ||
309 | movl %eax, 12(%edi) | ||
310 | movl %edx, %esi | ||
311 | /* Round 16 */ | ||
312 | movl 16(%ebx), %eax | ||
313 | mull %ecx | ||
314 | addl %esi, %eax | ||
315 | adcl $0, %edx | ||
316 | movl %eax, 16(%edi) | ||
317 | movl %edx, %esi | ||
318 | /* Round 20 */ | ||
319 | movl 20(%ebx), %eax | ||
320 | mull %ecx | ||
321 | addl %esi, %eax | ||
322 | adcl $0, %edx | ||
323 | movl %eax, 20(%edi) | ||
324 | movl %edx, %esi | ||
325 | /* Round 24 */ | ||
326 | movl 24(%ebx), %eax | ||
327 | mull %ecx | ||
328 | addl %esi, %eax | ||
329 | adcl $0, %edx | ||
330 | movl %eax, 24(%edi) | ||
331 | movl %edx, %esi | ||
332 | /* Round 28 */ | ||
333 | movl 28(%ebx), %eax | ||
334 | mull %ecx | ||
335 | addl %esi, %eax | ||
336 | adcl $0, %edx | ||
337 | movl %eax, 28(%edi) | ||
338 | movl %edx, %esi | ||
339 | |||
340 | addl $32, %ebx | ||
341 | addl $32, %edi | ||
342 | subl $8, %ebp | ||
343 | jz .L004mw_finish | ||
344 | jmp .L005mw_loop | ||
345 | .L004mw_finish: | ||
346 | movl 28(%esp), %ebp | ||
347 | andl $7, %ebp | ||
348 | jnz .L006mw_finish2 | ||
349 | jmp .L007mw_end | ||
350 | .align ALIGN | ||
351 | .L006mw_finish2: | ||
352 | /* Tail Round 0 */ | ||
353 | movl (%ebx), %eax | ||
354 | mull %ecx | ||
355 | addl %esi, %eax | ||
356 | adcl $0, %edx | ||
357 | movl %eax, (%edi) | ||
358 | movl %edx, %esi | ||
359 | decl %ebp | ||
360 | jz .L007mw_end | ||
361 | /* Tail Round 1 */ | ||
362 | movl 4(%ebx), %eax | ||
363 | mull %ecx | ||
364 | addl %esi, %eax | ||
365 | adcl $0, %edx | ||
366 | movl %eax, 4(%edi) | ||
367 | movl %edx, %esi | ||
368 | decl %ebp | ||
369 | jz .L007mw_end | ||
370 | /* Tail Round 2 */ | ||
371 | movl 8(%ebx), %eax | ||
372 | mull %ecx | ||
373 | addl %esi, %eax | ||
374 | adcl $0, %edx | ||
375 | movl %eax, 8(%edi) | ||
376 | movl %edx, %esi | ||
377 | decl %ebp | ||
378 | jz .L007mw_end | ||
379 | /* Tail Round 3 */ | ||
380 | movl 12(%ebx), %eax | ||
381 | mull %ecx | ||
382 | addl %esi, %eax | ||
383 | adcl $0, %edx | ||
384 | movl %eax, 12(%edi) | ||
385 | movl %edx, %esi | ||
386 | decl %ebp | ||
387 | jz .L007mw_end | ||
388 | /* Tail Round 4 */ | ||
389 | movl 16(%ebx), %eax | ||
390 | mull %ecx | ||
391 | addl %esi, %eax | ||
392 | adcl $0, %edx | ||
393 | movl %eax, 16(%edi) | ||
394 | movl %edx, %esi | ||
395 | decl %ebp | ||
396 | jz .L007mw_end | ||
397 | /* Tail Round 5 */ | ||
398 | movl 20(%ebx), %eax | ||
399 | mull %ecx | ||
400 | addl %esi, %eax | ||
401 | adcl $0, %edx | ||
402 | movl %eax, 20(%edi) | ||
403 | movl %edx, %esi | ||
404 | decl %ebp | ||
405 | jz .L007mw_end | ||
406 | /* Tail Round 6 */ | ||
407 | movl 24(%ebx), %eax | ||
408 | mull %ecx | ||
409 | addl %esi, %eax | ||
410 | adcl $0, %edx | ||
411 | movl %eax, 24(%edi) | ||
412 | movl %edx, %esi | ||
413 | .L007mw_end: | ||
414 | movl %esi, %eax | ||
415 | popl %edi | ||
416 | popl %esi | ||
417 | popl %ebx | ||
418 | popl %ebp | ||
419 | ret | ||
420 | .bn_mul_words_end: | ||
421 | SIZE(bn_mul_words,.bn_mul_words_end-bn_mul_words) | ||
422 | .ident "bn_mul_words" | ||
423 | .text | ||
424 | .align ALIGN | ||
425 | .globl bn_sqr_words | ||
426 | TYPE(bn_sqr_words,@function) | ||
427 | bn_sqr_words: | ||
428 | pushl %ebp | ||
429 | pushl %ebx | ||
430 | pushl %esi | ||
431 | pushl %edi | ||
432 | |||
433 | |||
434 | movl 20(%esp), %esi | ||
435 | movl 24(%esp), %edi | ||
436 | movl 28(%esp), %ebx | ||
437 | andl $4294967288, %ebx | ||
438 | jz .L008sw_finish | ||
439 | .L009sw_loop: | ||
440 | /* Round 0 */ | ||
441 | movl (%edi), %eax | ||
442 | mull %eax | ||
443 | movl %eax, (%esi) | ||
444 | movl %edx, 4(%esi) | ||
445 | /* Round 4 */ | ||
446 | movl 4(%edi), %eax | ||
447 | mull %eax | ||
448 | movl %eax, 8(%esi) | ||
449 | movl %edx, 12(%esi) | ||
450 | /* Round 8 */ | ||
451 | movl 8(%edi), %eax | ||
452 | mull %eax | ||
453 | movl %eax, 16(%esi) | ||
454 | movl %edx, 20(%esi) | ||
455 | /* Round 12 */ | ||
456 | movl 12(%edi), %eax | ||
457 | mull %eax | ||
458 | movl %eax, 24(%esi) | ||
459 | movl %edx, 28(%esi) | ||
460 | /* Round 16 */ | ||
461 | movl 16(%edi), %eax | ||
462 | mull %eax | ||
463 | movl %eax, 32(%esi) | ||
464 | movl %edx, 36(%esi) | ||
465 | /* Round 20 */ | ||
466 | movl 20(%edi), %eax | ||
467 | mull %eax | ||
468 | movl %eax, 40(%esi) | ||
469 | movl %edx, 44(%esi) | ||
470 | /* Round 24 */ | ||
471 | movl 24(%edi), %eax | ||
472 | mull %eax | ||
473 | movl %eax, 48(%esi) | ||
474 | movl %edx, 52(%esi) | ||
475 | /* Round 28 */ | ||
476 | movl 28(%edi), %eax | ||
477 | mull %eax | ||
478 | movl %eax, 56(%esi) | ||
479 | movl %edx, 60(%esi) | ||
480 | |||
481 | addl $32, %edi | ||
482 | addl $64, %esi | ||
483 | subl $8, %ebx | ||
484 | jnz .L009sw_loop | ||
485 | .L008sw_finish: | ||
486 | movl 28(%esp), %ebx | ||
487 | andl $7, %ebx | ||
488 | jz .L010sw_end | ||
489 | /* Tail Round 0 */ | ||
490 | movl (%edi), %eax | ||
491 | mull %eax | ||
492 | movl %eax, (%esi) | ||
493 | decl %ebx | ||
494 | movl %edx, 4(%esi) | ||
495 | jz .L010sw_end | ||
496 | /* Tail Round 1 */ | ||
497 | movl 4(%edi), %eax | ||
498 | mull %eax | ||
499 | movl %eax, 8(%esi) | ||
500 | decl %ebx | ||
501 | movl %edx, 12(%esi) | ||
502 | jz .L010sw_end | ||
503 | /* Tail Round 2 */ | ||
504 | movl 8(%edi), %eax | ||
505 | mull %eax | ||
506 | movl %eax, 16(%esi) | ||
507 | decl %ebx | ||
508 | movl %edx, 20(%esi) | ||
509 | jz .L010sw_end | ||
510 | /* Tail Round 3 */ | ||
511 | movl 12(%edi), %eax | ||
512 | mull %eax | ||
513 | movl %eax, 24(%esi) | ||
514 | decl %ebx | ||
515 | movl %edx, 28(%esi) | ||
516 | jz .L010sw_end | ||
517 | /* Tail Round 4 */ | ||
518 | movl 16(%edi), %eax | ||
519 | mull %eax | ||
520 | movl %eax, 32(%esi) | ||
521 | decl %ebx | ||
522 | movl %edx, 36(%esi) | ||
523 | jz .L010sw_end | ||
524 | /* Tail Round 5 */ | ||
525 | movl 20(%edi), %eax | ||
526 | mull %eax | ||
527 | movl %eax, 40(%esi) | ||
528 | decl %ebx | ||
529 | movl %edx, 44(%esi) | ||
530 | jz .L010sw_end | ||
531 | /* Tail Round 6 */ | ||
532 | movl 24(%edi), %eax | ||
533 | mull %eax | ||
534 | movl %eax, 48(%esi) | ||
535 | movl %edx, 52(%esi) | ||
536 | .L010sw_end: | ||
537 | popl %edi | ||
538 | popl %esi | ||
539 | popl %ebx | ||
540 | popl %ebp | ||
541 | ret | ||
542 | .bn_sqr_words_end: | ||
543 | SIZE(bn_sqr_words,.bn_sqr_words_end-bn_sqr_words) | ||
544 | .ident "bn_sqr_words" | ||
545 | .text | ||
546 | .align ALIGN | ||
547 | .globl bn_div64 | ||
548 | TYPE(bn_div64,@function) | ||
549 | bn_div64: | ||
550 | pushl %ebp | ||
551 | pushl %ebx | ||
552 | pushl %esi | ||
553 | pushl %edi | ||
554 | |||
555 | movl 20(%esp), %edx | ||
556 | movl 24(%esp), %eax | ||
557 | movl 28(%esp), %ebx | ||
558 | divl %ebx | ||
559 | popl %edi | ||
560 | popl %esi | ||
561 | popl %ebx | ||
562 | popl %ebp | ||
563 | ret | ||
564 | .bn_div64_end: | ||
565 | SIZE(bn_div64,.bn_div64_end-bn_div64) | ||
566 | .ident "bn_div64" | ||
567 | .text | ||
568 | .align ALIGN | ||
569 | .globl bn_add_words | ||
570 | TYPE(bn_add_words,@function) | ||
571 | bn_add_words: | ||
572 | pushl %ebp | ||
573 | pushl %ebx | ||
574 | pushl %esi | ||
575 | pushl %edi | ||
576 | |||
577 | |||
578 | movl 20(%esp), %ebx | ||
579 | movl 24(%esp), %esi | ||
580 | movl 28(%esp), %edi | ||
581 | movl 32(%esp), %ebp | ||
582 | xorl %eax, %eax | ||
583 | andl $4294967288, %ebp | ||
584 | jz .L011aw_finish | ||
585 | .L012aw_loop: | ||
586 | /* Round 0 */ | ||
587 | movl (%esi), %ecx | ||
588 | movl (%edi), %edx | ||
589 | addl %eax, %ecx | ||
590 | movl $0, %eax | ||
591 | adcl %eax, %eax | ||
592 | addl %edx, %ecx | ||
593 | adcl $0, %eax | ||
594 | movl %ecx, (%ebx) | ||
595 | /* Round 1 */ | ||
596 | movl 4(%esi), %ecx | ||
597 | movl 4(%edi), %edx | ||
598 | addl %eax, %ecx | ||
599 | movl $0, %eax | ||
600 | adcl %eax, %eax | ||
601 | addl %edx, %ecx | ||
602 | adcl $0, %eax | ||
603 | movl %ecx, 4(%ebx) | ||
604 | /* Round 2 */ | ||
605 | movl 8(%esi), %ecx | ||
606 | movl 8(%edi), %edx | ||
607 | addl %eax, %ecx | ||
608 | movl $0, %eax | ||
609 | adcl %eax, %eax | ||
610 | addl %edx, %ecx | ||
611 | adcl $0, %eax | ||
612 | movl %ecx, 8(%ebx) | ||
613 | /* Round 3 */ | ||
614 | movl 12(%esi), %ecx | ||
615 | movl 12(%edi), %edx | ||
616 | addl %eax, %ecx | ||
617 | movl $0, %eax | ||
618 | adcl %eax, %eax | ||
619 | addl %edx, %ecx | ||
620 | adcl $0, %eax | ||
621 | movl %ecx, 12(%ebx) | ||
622 | /* Round 4 */ | ||
623 | movl 16(%esi), %ecx | ||
624 | movl 16(%edi), %edx | ||
625 | addl %eax, %ecx | ||
626 | movl $0, %eax | ||
627 | adcl %eax, %eax | ||
628 | addl %edx, %ecx | ||
629 | adcl $0, %eax | ||
630 | movl %ecx, 16(%ebx) | ||
631 | /* Round 5 */ | ||
632 | movl 20(%esi), %ecx | ||
633 | movl 20(%edi), %edx | ||
634 | addl %eax, %ecx | ||
635 | movl $0, %eax | ||
636 | adcl %eax, %eax | ||
637 | addl %edx, %ecx | ||
638 | adcl $0, %eax | ||
639 | movl %ecx, 20(%ebx) | ||
640 | /* Round 6 */ | ||
641 | movl 24(%esi), %ecx | ||
642 | movl 24(%edi), %edx | ||
643 | addl %eax, %ecx | ||
644 | movl $0, %eax | ||
645 | adcl %eax, %eax | ||
646 | addl %edx, %ecx | ||
647 | adcl $0, %eax | ||
648 | movl %ecx, 24(%ebx) | ||
649 | /* Round 7 */ | ||
650 | movl 28(%esi), %ecx | ||
651 | movl 28(%edi), %edx | ||
652 | addl %eax, %ecx | ||
653 | movl $0, %eax | ||
654 | adcl %eax, %eax | ||
655 | addl %edx, %ecx | ||
656 | adcl $0, %eax | ||
657 | movl %ecx, 28(%ebx) | ||
658 | |||
659 | addl $32, %esi | ||
660 | addl $32, %edi | ||
661 | addl $32, %ebx | ||
662 | subl $8, %ebp | ||
663 | jnz .L012aw_loop | ||
664 | .L011aw_finish: | ||
665 | movl 32(%esp), %ebp | ||
666 | andl $7, %ebp | ||
667 | jz .L013aw_end | ||
668 | /* Tail Round 0 */ | ||
669 | movl (%esi), %ecx | ||
670 | movl (%edi), %edx | ||
671 | addl %eax, %ecx | ||
672 | movl $0, %eax | ||
673 | adcl %eax, %eax | ||
674 | addl %edx, %ecx | ||
675 | adcl $0, %eax | ||
676 | decl %ebp | ||
677 | movl %ecx, (%ebx) | ||
678 | jz .L013aw_end | ||
679 | /* Tail Round 1 */ | ||
680 | movl 4(%esi), %ecx | ||
681 | movl 4(%edi), %edx | ||
682 | addl %eax, %ecx | ||
683 | movl $0, %eax | ||
684 | adcl %eax, %eax | ||
685 | addl %edx, %ecx | ||
686 | adcl $0, %eax | ||
687 | decl %ebp | ||
688 | movl %ecx, 4(%ebx) | ||
689 | jz .L013aw_end | ||
690 | /* Tail Round 2 */ | ||
691 | movl 8(%esi), %ecx | ||
692 | movl 8(%edi), %edx | ||
693 | addl %eax, %ecx | ||
694 | movl $0, %eax | ||
695 | adcl %eax, %eax | ||
696 | addl %edx, %ecx | ||
697 | adcl $0, %eax | ||
698 | decl %ebp | ||
699 | movl %ecx, 8(%ebx) | ||
700 | jz .L013aw_end | ||
701 | /* Tail Round 3 */ | ||
702 | movl 12(%esi), %ecx | ||
703 | movl 12(%edi), %edx | ||
704 | addl %eax, %ecx | ||
705 | movl $0, %eax | ||
706 | adcl %eax, %eax | ||
707 | addl %edx, %ecx | ||
708 | adcl $0, %eax | ||
709 | decl %ebp | ||
710 | movl %ecx, 12(%ebx) | ||
711 | jz .L013aw_end | ||
712 | /* Tail Round 4 */ | ||
713 | movl 16(%esi), %ecx | ||
714 | movl 16(%edi), %edx | ||
715 | addl %eax, %ecx | ||
716 | movl $0, %eax | ||
717 | adcl %eax, %eax | ||
718 | addl %edx, %ecx | ||
719 | adcl $0, %eax | ||
720 | decl %ebp | ||
721 | movl %ecx, 16(%ebx) | ||
722 | jz .L013aw_end | ||
723 | /* Tail Round 5 */ | ||
724 | movl 20(%esi), %ecx | ||
725 | movl 20(%edi), %edx | ||
726 | addl %eax, %ecx | ||
727 | movl $0, %eax | ||
728 | adcl %eax, %eax | ||
729 | addl %edx, %ecx | ||
730 | adcl $0, %eax | ||
731 | decl %ebp | ||
732 | movl %ecx, 20(%ebx) | ||
733 | jz .L013aw_end | ||
734 | /* Tail Round 6 */ | ||
735 | movl 24(%esi), %ecx | ||
736 | movl 24(%edi), %edx | ||
737 | addl %eax, %ecx | ||
738 | movl $0, %eax | ||
739 | adcl %eax, %eax | ||
740 | addl %edx, %ecx | ||
741 | adcl $0, %eax | ||
742 | movl %ecx, 24(%ebx) | ||
743 | .L013aw_end: | ||
744 | movl %eax, %eax | ||
745 | popl %edi | ||
746 | popl %esi | ||
747 | popl %ebx | ||
748 | popl %ebp | ||
749 | ret | ||
750 | .bn_add_words_end: | ||
751 | SIZE(bn_add_words,.bn_add_words_end-bn_add_words) | ||
752 | .ident "bn_add_words" | ||
diff --git a/src/lib/libcrypto/bn/asm/sparc.s b/src/lib/libcrypto/bn/asm/sparc.s new file mode 100644 index 0000000000..f9e533caa8 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/sparc.s | |||
@@ -0,0 +1,462 @@ | |||
1 | .file "bn_mulw.c" | ||
2 | gcc2_compiled.: | ||
3 | .section ".text" | ||
4 | .align 4 | ||
5 | .global bn_mul_add_words | ||
6 | .type bn_mul_add_words,#function | ||
7 | .proc 016 | ||
8 | bn_mul_add_words: | ||
9 | !#PROLOGUE# 0 | ||
10 | save %sp,-112,%sp | ||
11 | !#PROLOGUE# 1 | ||
12 | mov %i0,%o0 | ||
13 | mov %i1,%o2 | ||
14 | mov %i2,%g1 | ||
15 | mov %i3,%o1 | ||
16 | mov 0,%i4 | ||
17 | add %o0,12,%g4 | ||
18 | add %o2,12,%o7 | ||
19 | .LL2: | ||
20 | mov %i4,%i3 | ||
21 | mov 0,%i2 | ||
22 | ld [%o0],%g2 | ||
23 | mov %g2,%i1 | ||
24 | ld [%o2],%g2 | ||
25 | mov 0,%i0 | ||
26 | umul %o1,%g2,%g3 | ||
27 | rd %y,%g2 | ||
28 | addcc %g3,%i1,%g3 | ||
29 | addx %g2,%i0,%g2 | ||
30 | addcc %g3,%i3,%g3 | ||
31 | addx %g2,%i2,%g2 | ||
32 | st %g3,[%o0] | ||
33 | mov %g2,%i5 | ||
34 | mov 0,%i4 | ||
35 | addcc %g1,-1,%g1 | ||
36 | be .LL3 | ||
37 | mov %i5,%i4 | ||
38 | mov %i4,%i3 | ||
39 | mov 0,%i2 | ||
40 | ld [%g4-8],%g2 | ||
41 | mov %g2,%i1 | ||
42 | ld [%o7-8],%g2 | ||
43 | mov 0,%i0 | ||
44 | umul %o1,%g2,%g3 | ||
45 | rd %y,%g2 | ||
46 | addcc %g3,%i1,%g3 | ||
47 | addx %g2,%i0,%g2 | ||
48 | addcc %g3,%i3,%g3 | ||
49 | addx %g2,%i2,%g2 | ||
50 | st %g3,[%g4-8] | ||
51 | mov %g2,%i5 | ||
52 | mov 0,%i4 | ||
53 | addcc %g1,-1,%g1 | ||
54 | be .LL3 | ||
55 | mov %i5,%i4 | ||
56 | mov %i4,%i3 | ||
57 | mov 0,%i2 | ||
58 | ld [%g4-4],%g2 | ||
59 | mov %g2,%i1 | ||
60 | ld [%o7-4],%g2 | ||
61 | mov 0,%i0 | ||
62 | umul %o1,%g2,%g3 | ||
63 | rd %y,%g2 | ||
64 | addcc %g3,%i1,%g3 | ||
65 | addx %g2,%i0,%g2 | ||
66 | addcc %g3,%i3,%g3 | ||
67 | addx %g2,%i2,%g2 | ||
68 | st %g3,[%g4-4] | ||
69 | mov %g2,%i5 | ||
70 | mov 0,%i4 | ||
71 | addcc %g1,-1,%g1 | ||
72 | be .LL3 | ||
73 | mov %i5,%i4 | ||
74 | mov %i4,%i3 | ||
75 | mov 0,%i2 | ||
76 | ld [%g4],%g2 | ||
77 | mov %g2,%i1 | ||
78 | ld [%o7],%g2 | ||
79 | mov 0,%i0 | ||
80 | umul %o1,%g2,%g3 | ||
81 | rd %y,%g2 | ||
82 | addcc %g3,%i1,%g3 | ||
83 | addx %g2,%i0,%g2 | ||
84 | addcc %g3,%i3,%g3 | ||
85 | addx %g2,%i2,%g2 | ||
86 | st %g3,[%g4] | ||
87 | mov %g2,%i5 | ||
88 | mov 0,%i4 | ||
89 | addcc %g1,-1,%g1 | ||
90 | be .LL3 | ||
91 | mov %i5,%i4 | ||
92 | add %o7,16,%o7 | ||
93 | add %o2,16,%o2 | ||
94 | add %g4,16,%g4 | ||
95 | b .LL2 | ||
96 | add %o0,16,%o0 | ||
97 | .LL3: | ||
98 | ret | ||
99 | restore %g0,%i4,%o0 | ||
100 | .LLfe1: | ||
101 | .size bn_mul_add_words,.LLfe1-bn_mul_add_words | ||
102 | .align 4 | ||
103 | .global bn_mul_words | ||
104 | .type bn_mul_words,#function | ||
105 | .proc 016 | ||
106 | bn_mul_words: | ||
107 | !#PROLOGUE# 0 | ||
108 | save %sp,-112,%sp | ||
109 | !#PROLOGUE# 1 | ||
110 | mov %i0,%o7 | ||
111 | mov %i1,%o0 | ||
112 | mov %i2,%i4 | ||
113 | mov %i3,%g4 | ||
114 | mov 0,%i0 | ||
115 | add %o7,12,%g1 | ||
116 | add %o0,12,%i5 | ||
117 | .LL18: | ||
118 | mov %i0,%g3 | ||
119 | mov 0,%g2 | ||
120 | ld [%o0],%i2 | ||
121 | umul %g4,%i2,%i3 | ||
122 | rd %y,%i2 | ||
123 | addcc %i3,%g3,%i3 | ||
124 | addx %i2,%g2,%i2 | ||
125 | st %i3,[%o7] | ||
126 | mov %i2,%i1 | ||
127 | mov 0,%i0 | ||
128 | addcc %i4,-1,%i4 | ||
129 | be .LL19 | ||
130 | mov %i1,%i0 | ||
131 | mov %i0,%g3 | ||
132 | mov 0,%g2 | ||
133 | ld [%i5-8],%i2 | ||
134 | umul %g4,%i2,%i3 | ||
135 | rd %y,%i2 | ||
136 | addcc %i3,%g3,%i3 | ||
137 | addx %i2,%g2,%i2 | ||
138 | st %i3,[%g1-8] | ||
139 | mov %i2,%i1 | ||
140 | mov 0,%i0 | ||
141 | addcc %i4,-1,%i4 | ||
142 | be .LL19 | ||
143 | mov %i1,%i0 | ||
144 | mov %i0,%g3 | ||
145 | mov 0,%g2 | ||
146 | ld [%i5-4],%i2 | ||
147 | umul %g4,%i2,%i3 | ||
148 | rd %y,%i2 | ||
149 | addcc %i3,%g3,%i3 | ||
150 | addx %i2,%g2,%i2 | ||
151 | st %i3,[%g1-4] | ||
152 | mov %i2,%i1 | ||
153 | mov 0,%i0 | ||
154 | addcc %i4,-1,%i4 | ||
155 | be .LL19 | ||
156 | mov %i1,%i0 | ||
157 | mov %i0,%g3 | ||
158 | mov 0,%g2 | ||
159 | ld [%i5],%i2 | ||
160 | umul %g4,%i2,%i3 | ||
161 | rd %y,%i2 | ||
162 | addcc %i3,%g3,%i3 | ||
163 | addx %i2,%g2,%i2 | ||
164 | st %i3,[%g1] | ||
165 | mov %i2,%i1 | ||
166 | mov 0,%i0 | ||
167 | addcc %i4,-1,%i4 | ||
168 | be .LL19 | ||
169 | mov %i1,%i0 | ||
170 | add %i5,16,%i5 | ||
171 | add %o0,16,%o0 | ||
172 | add %g1,16,%g1 | ||
173 | b .LL18 | ||
174 | add %o7,16,%o7 | ||
175 | .LL19: | ||
176 | ret | ||
177 | restore | ||
178 | .LLfe2: | ||
179 | .size bn_mul_words,.LLfe2-bn_mul_words | ||
180 | .align 4 | ||
181 | .global bn_sqr_words | ||
182 | .type bn_sqr_words,#function | ||
183 | .proc 020 | ||
184 | bn_sqr_words: | ||
185 | !#PROLOGUE# 0 | ||
186 | !#PROLOGUE# 1 | ||
187 | mov %o0,%g4 | ||
188 | add %g4,28,%o3 | ||
189 | add %o1,12,%g1 | ||
190 | .LL34: | ||
191 | ld [%o1],%o0 | ||
192 | addcc %o2,-1,%o2 | ||
193 | umul %o0,%o0,%o5 | ||
194 | rd %y,%o4 | ||
195 | st %o5,[%g4] | ||
196 | mov %o4,%g3 | ||
197 | mov 0,%g2 | ||
198 | be .LL35 | ||
199 | st %g3,[%o3-24] | ||
200 | ld [%g1-8],%o0 | ||
201 | addcc %o2,-1,%o2 | ||
202 | umul %o0,%o0,%o5 | ||
203 | rd %y,%o4 | ||
204 | st %o5,[%o3-20] | ||
205 | mov %o4,%g3 | ||
206 | mov 0,%g2 | ||
207 | be .LL35 | ||
208 | st %g3,[%o3-16] | ||
209 | ld [%g1-4],%o0 | ||
210 | addcc %o2,-1,%o2 | ||
211 | umul %o0,%o0,%o5 | ||
212 | rd %y,%o4 | ||
213 | st %o5,[%o3-12] | ||
214 | mov %o4,%g3 | ||
215 | mov 0,%g2 | ||
216 | be .LL35 | ||
217 | st %g3,[%o3-8] | ||
218 | ld [%g1],%o0 | ||
219 | addcc %o2,-1,%o2 | ||
220 | umul %o0,%o0,%o5 | ||
221 | rd %y,%o4 | ||
222 | st %o5,[%o3-4] | ||
223 | mov %o4,%g3 | ||
224 | mov 0,%g2 | ||
225 | be .LL35 | ||
226 | st %g3,[%o3] | ||
227 | add %g1,16,%g1 | ||
228 | add %o1,16,%o1 | ||
229 | add %o3,32,%o3 | ||
230 | b .LL34 | ||
231 | add %g4,32,%g4 | ||
232 | .LL35: | ||
233 | retl | ||
234 | nop | ||
235 | .LLfe3: | ||
236 | .size bn_sqr_words,.LLfe3-bn_sqr_words | ||
237 | .align 4 | ||
238 | .global bn_add_words | ||
239 | .type bn_add_words,#function | ||
240 | .proc 016 | ||
241 | bn_add_words: | ||
242 | !#PROLOGUE# 0 | ||
243 | save %sp,-112,%sp | ||
244 | !#PROLOGUE# 1 | ||
245 | mov %i0,%o2 | ||
246 | mov %i1,%o3 | ||
247 | mov %i2,%o4 | ||
248 | mov %i3,%i5 | ||
249 | mov 0,%o0 | ||
250 | mov 0,%o1 | ||
251 | add %o2,12,%o7 | ||
252 | add %o4,12,%g4 | ||
253 | b .LL42 | ||
254 | add %o3,12,%g1 | ||
255 | .LL45: | ||
256 | add %i5,-1,%i5 | ||
257 | mov %i4,%g3 | ||
258 | ld [%g4-8],%i4 | ||
259 | mov 0,%g2 | ||
260 | mov %i4,%i1 | ||
261 | mov 0,%i0 | ||
262 | addcc %g3,%i1,%g3 | ||
263 | addx %g2,%i0,%g2 | ||
264 | addcc %o1,%g3,%o1 | ||
265 | addx %o0,%g2,%o0 | ||
266 | st %o1,[%o7-8] | ||
267 | mov %o0,%i3 | ||
268 | mov 0,%i2 | ||
269 | mov %i2,%o0 | ||
270 | mov %i3,%o1 | ||
271 | cmp %i5,0 | ||
272 | ble .LL43 | ||
273 | add %i5,-1,%i5 | ||
274 | ld [%g1-4],%i4 | ||
275 | mov %i4,%g3 | ||
276 | ld [%g4-4],%i4 | ||
277 | mov 0,%g2 | ||
278 | mov %i4,%i1 | ||
279 | mov 0,%i0 | ||
280 | addcc %g3,%i1,%g3 | ||
281 | addx %g2,%i0,%g2 | ||
282 | addcc %o1,%g3,%o1 | ||
283 | addx %o0,%g2,%o0 | ||
284 | st %o1,[%o7-4] | ||
285 | mov %o0,%i3 | ||
286 | mov 0,%i2 | ||
287 | mov %i2,%o0 | ||
288 | mov %i3,%o1 | ||
289 | cmp %i5,0 | ||
290 | ble .LL43 | ||
291 | add %i5,-1,%i5 | ||
292 | ld [%g1],%i4 | ||
293 | mov %i4,%g3 | ||
294 | ld [%g4],%i4 | ||
295 | mov 0,%g2 | ||
296 | mov %i4,%i1 | ||
297 | mov 0,%i0 | ||
298 | addcc %g3,%i1,%g3 | ||
299 | addx %g2,%i0,%g2 | ||
300 | addcc %o1,%g3,%o1 | ||
301 | addx %o0,%g2,%o0 | ||
302 | st %o1,[%o7] | ||
303 | mov %o0,%i3 | ||
304 | mov 0,%i2 | ||
305 | mov %i2,%o0 | ||
306 | mov %i3,%o1 | ||
307 | cmp %i5,0 | ||
308 | ble .LL43 | ||
309 | add %g1,16,%g1 | ||
310 | add %o3,16,%o3 | ||
311 | add %g4,16,%g4 | ||
312 | add %o4,16,%o4 | ||
313 | add %o7,16,%o7 | ||
314 | add %o2,16,%o2 | ||
315 | .LL42: | ||
316 | ld [%o3],%i4 | ||
317 | add %i5,-1,%i5 | ||
318 | mov %i4,%g3 | ||
319 | ld [%o4],%i4 | ||
320 | mov 0,%g2 | ||
321 | mov %i4,%i1 | ||
322 | mov 0,%i0 | ||
323 | addcc %g3,%i1,%g3 | ||
324 | addx %g2,%i0,%g2 | ||
325 | addcc %o1,%g3,%o1 | ||
326 | addx %o0,%g2,%o0 | ||
327 | st %o1,[%o2] | ||
328 | mov %o0,%i3 | ||
329 | mov 0,%i2 | ||
330 | mov %i2,%o0 | ||
331 | mov %i3,%o1 | ||
332 | cmp %i5,0 | ||
333 | bg,a .LL45 | ||
334 | ld [%g1-8],%i4 | ||
335 | .LL43: | ||
336 | ret | ||
337 | restore %g0,%o1,%o0 | ||
338 | .LLfe4: | ||
339 | .size bn_add_words,.LLfe4-bn_add_words | ||
340 | .section ".rodata" | ||
341 | .align 8 | ||
342 | .LLC0: | ||
343 | .asciz "Division would overflow (%d)\n" | ||
344 | .section ".text" | ||
345 | .align 4 | ||
346 | .global bn_div64 | ||
347 | .type bn_div64,#function | ||
348 | .proc 016 | ||
349 | bn_div64: | ||
350 | !#PROLOGUE# 0 | ||
351 | save %sp,-112,%sp | ||
352 | !#PROLOGUE# 1 | ||
353 | mov 0,%l1 | ||
354 | cmp %i2,0 | ||
355 | bne .LL51 | ||
356 | mov 2,%l0 | ||
357 | b .LL68 | ||
358 | mov -1,%i0 | ||
359 | .LL51: | ||
360 | call BN_num_bits_word,0 | ||
361 | mov %i2,%o0 | ||
362 | mov %o0,%o2 | ||
363 | cmp %o2,32 | ||
364 | be .LL52 | ||
365 | mov 1,%o0 | ||
366 | sll %o0,%o2,%o0 | ||
367 | cmp %i0,%o0 | ||
368 | bleu .LL69 | ||
369 | mov 32,%o0 | ||
370 | sethi %hi(__iob+32),%o0 | ||
371 | or %o0,%lo(__iob+32),%o0 | ||
372 | sethi %hi(.LLC0),%o1 | ||
373 | call fprintf,0 | ||
374 | or %o1,%lo(.LLC0),%o1 | ||
375 | call abort,0 | ||
376 | nop | ||
377 | .LL52: | ||
378 | mov 32,%o0 | ||
379 | .LL69: | ||
380 | cmp %i0,%i2 | ||
381 | blu .LL53 | ||
382 | sub %o0,%o2,%o2 | ||
383 | sub %i0,%i2,%i0 | ||
384 | .LL53: | ||
385 | cmp %o2,0 | ||
386 | be .LL54 | ||
387 | sll %i0,%o2,%o1 | ||
388 | sll %i2,%o2,%i2 | ||
389 | sub %o0,%o2,%o0 | ||
390 | srl %i1,%o0,%o0 | ||
391 | or %o1,%o0,%i0 | ||
392 | sll %i1,%o2,%i1 | ||
393 | .LL54: | ||
394 | srl %i2,16,%g2 | ||
395 | sethi %hi(65535),%o0 | ||
396 | or %o0,%lo(65535),%o1 | ||
397 | and %i2,%o1,%g3 | ||
398 | mov %o0,%g4 | ||
399 | sethi %hi(-65536),%o7 | ||
400 | mov %o1,%g1 | ||
401 | .LL55: | ||
402 | srl %i0,16,%o0 | ||
403 | cmp %o0,%g2 | ||
404 | be .LL59 | ||
405 | or %g4,%lo(65535),%o3 | ||
406 | wr %g0,%g0,%y | ||
407 | nop | ||
408 | nop | ||
409 | nop | ||
410 | udiv %i0,%g2,%o3 | ||
411 | .LL59: | ||
412 | and %i1,%o7,%o0 | ||
413 | srl %o0,16,%o5 | ||
414 | smul %o3,%g3,%o4 | ||
415 | smul %o3,%g2,%o2 | ||
416 | .LL60: | ||
417 | sub %i0,%o2,%o1 | ||
418 | andcc %o1,%o7,%g0 | ||
419 | bne .LL61 | ||
420 | sll %o1,16,%o0 | ||
421 | add %o0,%o5,%o0 | ||
422 | cmp %o4,%o0 | ||
423 | bleu .LL61 | ||
424 | sub %o4,%g3,%o4 | ||
425 | sub %o2,%g2,%o2 | ||
426 | b .LL60 | ||
427 | add %o3,-1,%o3 | ||
428 | .LL61: | ||
429 | smul %o3,%g2,%o2 | ||
430 | smul %o3,%g3,%o0 | ||
431 | srl %o0,16,%o1 | ||
432 | sll %o0,16,%o0 | ||
433 | and %o0,%o7,%o0 | ||
434 | cmp %i1,%o0 | ||
435 | bgeu .LL65 | ||
436 | add %o2,%o1,%o2 | ||
437 | add %o2,1,%o2 | ||
438 | .LL65: | ||
439 | cmp %i0,%o2 | ||
440 | bgeu .LL66 | ||
441 | sub %i1,%o0,%i1 | ||
442 | add %i0,%i2,%i0 | ||
443 | add %o3,-1,%o3 | ||
444 | .LL66: | ||
445 | addcc %l0,-1,%l0 | ||
446 | be .LL56 | ||
447 | sub %i0,%o2,%i0 | ||
448 | sll %o3,16,%l1 | ||
449 | sll %i0,16,%o0 | ||
450 | srl %i1,16,%o1 | ||
451 | or %o0,%o1,%i0 | ||
452 | and %i1,%g1,%o0 | ||
453 | b .LL55 | ||
454 | sll %o0,16,%i1 | ||
455 | .LL56: | ||
456 | or %l1,%o3,%i0 | ||
457 | .LL68: | ||
458 | ret | ||
459 | restore | ||
460 | .LLfe5: | ||
461 | .size bn_div64,.LLfe5-bn_div64 | ||
462 | .ident "GCC: (GNU) 2.7.2.3" | ||
diff --git a/src/lib/libcrypto/bn/asm/x86w16.asm b/src/lib/libcrypto/bn/asm/x86w16.asm new file mode 100644 index 0000000000..74a933a8cd --- /dev/null +++ b/src/lib/libcrypto/bn/asm/x86w16.asm | |||
@@ -0,0 +1,297 @@ | |||
1 | ; Static Name Aliases | ||
2 | ; | ||
3 | TITLE bn_mulw.c | ||
4 | .8087 | ||
5 | F_TEXT SEGMENT WORD PUBLIC 'CODE' | ||
6 | F_TEXT ENDS | ||
7 | _DATA SEGMENT WORD PUBLIC 'DATA' | ||
8 | _DATA ENDS | ||
9 | CONST SEGMENT WORD PUBLIC 'CONST' | ||
10 | CONST ENDS | ||
11 | _BSS SEGMENT WORD PUBLIC 'BSS' | ||
12 | _BSS ENDS | ||
13 | DGROUP GROUP CONST, _BSS, _DATA | ||
14 | ASSUME DS: DGROUP, SS: DGROUP | ||
15 | F_TEXT SEGMENT | ||
16 | ASSUME CS: F_TEXT | ||
17 | PUBLIC _bn_mul_add_words | ||
18 | _bn_mul_add_words PROC FAR | ||
19 | ; Line 58 | ||
20 | push bp | ||
21 | push bx | ||
22 | push si | ||
23 | push di | ||
24 | push ds | ||
25 | push es | ||
26 | mov bp,sp | ||
27 | ; w = 26 | ||
28 | ; num = 24 | ||
29 | ; ap = 20 | ||
30 | ; rp = 16 | ||
31 | xor si,si ;c=0; | ||
32 | mov di,WORD PTR [bp+16] ; load r | ||
33 | mov ds,WORD PTR [bp+18] ; load r | ||
34 | mov bx,WORD PTR [bp+20] ; load a | ||
35 | mov es,WORD PTR [bp+22] ; load a | ||
36 | mov cx,WORD PTR [bp+26] ; load w | ||
37 | mov bp,WORD PTR [bp+24] ; load num | ||
38 | |||
39 | shr bp,1 ; div count by 4 and do groups of 4 | ||
40 | shr bp,1 | ||
41 | je $L555 | ||
42 | |||
43 | $L546: | ||
44 | mov ax,cx | ||
45 | mul WORD PTR es:[bx] ; w* *a | ||
46 | add ax,WORD PTR ds:[di] ; + *r | ||
47 | adc dx,0 | ||
48 | adc ax,si | ||
49 | adc dx,0 | ||
50 | mov WORD PTR ds:[di],ax | ||
51 | mov si,dx | ||
52 | ; | ||
53 | mov ax,cx | ||
54 | mul WORD PTR es:[bx+2] ; w* *a | ||
55 | add ax,WORD PTR ds:[di+2] ; + *r | ||
56 | adc dx,0 | ||
57 | adc ax,si | ||
58 | adc dx,0 | ||
59 | mov WORD PTR ds:[di+2],ax | ||
60 | mov si,dx | ||
61 | ; | ||
62 | mov ax,cx | ||
63 | mul WORD PTR es:[bx+4] ; w* *a | ||
64 | add ax,WORD PTR ds:[di+4] ; + *r | ||
65 | adc dx,0 | ||
66 | adc ax,si | ||
67 | adc dx,0 | ||
68 | mov WORD PTR ds:[di+4],ax | ||
69 | mov si,dx | ||
70 | ; | ||
71 | mov ax,cx | ||
72 | mul WORD PTR es:[bx+6] ; w* *a | ||
73 | add ax,WORD PTR ds:[di+6] ; + *r | ||
74 | adc dx,0 | ||
75 | adc ax,si | ||
76 | adc dx,0 | ||
77 | mov WORD PTR ds:[di+6],ax | ||
78 | mov si,dx | ||
79 | ; | ||
80 | add bx,8 | ||
81 | add di,8 | ||
82 | ; | ||
83 | dec bp | ||
84 | je $L555 | ||
85 | jmp $L546 | ||
86 | ; | ||
87 | ; | ||
88 | $L555: | ||
89 | mov bp,sp | ||
90 | mov bp,WORD PTR [bp+24] ; load num | ||
91 | and bp,3 | ||
92 | dec bp | ||
93 | js $L547 | ||
94 | |||
95 | mov ax,cx | ||
96 | mul WORD PTR es:[bx] ; w* *a | ||
97 | add ax,WORD PTR ds:[di] ; + *r | ||
98 | adc dx,0 | ||
99 | adc ax,si | ||
100 | adc dx,0 | ||
101 | mov WORD PTR ds:[di],ax | ||
102 | mov si,dx | ||
103 | dec bp | ||
104 | js $L547 ; Note that we are now testing for -1 | ||
105 | ; | ||
106 | mov ax,cx | ||
107 | mul WORD PTR es:[bx+2] ; w* *a | ||
108 | add ax,WORD PTR ds:[di+2] ; + *r | ||
109 | adc dx,0 | ||
110 | adc ax,si | ||
111 | adc dx,0 | ||
112 | mov WORD PTR ds:[di+2],ax | ||
113 | mov si,dx | ||
114 | dec bp | ||
115 | js $L547 | ||
116 | ; | ||
117 | mov ax,cx | ||
118 | mul WORD PTR es:[bx+4] ; w* *a | ||
119 | add ax,WORD PTR ds:[di+4] ; + *r | ||
120 | adc dx,0 | ||
121 | adc ax,si | ||
122 | adc dx,0 | ||
123 | mov WORD PTR ds:[di+4],ax | ||
124 | mov si,dx | ||
125 | $L547: | ||
126 | mov ax,si | ||
127 | pop es | ||
128 | pop ds | ||
129 | pop di | ||
130 | pop si | ||
131 | pop bx | ||
132 | pop bp | ||
133 | ret | ||
134 | nop | ||
135 | |||
136 | _bn_mul_add_words ENDP | ||
137 | PUBLIC _bn_mul_words | ||
138 | _bn_mul_words PROC FAR | ||
139 | ; Line 76 | ||
140 | push bp | ||
141 | push bx | ||
142 | push si | ||
143 | push di | ||
144 | push ds | ||
145 | push es | ||
146 | xor si,si | ||
147 | mov bp,sp | ||
148 | mov di,WORD PTR [bp+16] ; r | ||
149 | mov ds,WORD PTR [bp+18] | ||
150 | mov bx,WORD PTR [bp+20] ; a | ||
151 | mov es,WORD PTR [bp+22] | ||
152 | mov cx,WORD PTR [bp+26] ; w | ||
153 | mov bp,WORD PTR [bp+24] ; num | ||
154 | $FC743: | ||
155 | mov ax,cx | ||
156 | mul WORD PTR es:[bx] | ||
157 | add ax,si | ||
158 | adc dx,0 | ||
159 | mov WORD PTR ds:[di],ax | ||
160 | mov si,dx | ||
161 | dec bp | ||
162 | je $L764 | ||
163 | ; | ||
164 | mov ax,cx | ||
165 | mul WORD PTR es:[bx+2] | ||
166 | add ax,si | ||
167 | adc dx,0 | ||
168 | mov WORD PTR ds:[di+2],ax | ||
169 | mov si,dx | ||
170 | dec bp | ||
171 | je $L764 | ||
172 | ; | ||
173 | mov ax,cx | ||
174 | mul WORD PTR es:[bx+4] | ||
175 | add ax,si | ||
176 | adc dx,0 | ||
177 | mov WORD PTR ds:[di+4],ax | ||
178 | mov si,dx | ||
179 | dec bp | ||
180 | je $L764 | ||
181 | ; | ||
182 | mov ax,cx | ||
183 | mul WORD PTR es:[bx+6] | ||
184 | add ax,si | ||
185 | adc dx,0 | ||
186 | mov WORD PTR ds:[di+6],ax | ||
187 | mov si,dx | ||
188 | dec bp | ||
189 | je $L764 | ||
190 | ; | ||
191 | add bx,8 | ||
192 | add di,8 | ||
193 | jmp $FC743 | ||
194 | nop | ||
195 | $L764: | ||
196 | mov ax,si | ||
197 | pop es | ||
198 | pop ds | ||
199 | pop di | ||
200 | pop si | ||
201 | pop bx | ||
202 | pop bp | ||
203 | ret | ||
204 | nop | ||
205 | _bn_mul_words ENDP | ||
206 | PUBLIC _bn_sqr_words | ||
207 | _bn_sqr_words PROC FAR | ||
208 | ; Line 92 | ||
209 | push bp | ||
210 | push bx | ||
211 | push si | ||
212 | push di | ||
213 | push ds | ||
214 | push es | ||
215 | mov bp,sp | ||
216 | mov si,WORD PTR [bp+16] | ||
217 | mov ds,WORD PTR [bp+18] | ||
218 | mov di,WORD PTR [bp+20] | ||
219 | mov es,WORD PTR [bp+22] | ||
220 | mov bx,WORD PTR [bp+24] | ||
221 | |||
222 | mov bp,bx ; save a memory lookup later | ||
223 | shr bx,1 ; div count by 4 and do groups of 4 | ||
224 | shr bx,1 | ||
225 | je $L666 | ||
226 | |||
227 | $L765: | ||
228 | mov ax,WORD PTR es:[di] | ||
229 | mul ax | ||
230 | mov WORD PTR ds:[si],ax | ||
231 | mov WORD PTR ds:[si+2],dx | ||
232 | ; | ||
233 | mov ax,WORD PTR es:[di+2] | ||
234 | mul ax | ||
235 | mov WORD PTR ds:[si+4],ax | ||
236 | mov WORD PTR ds:[si+6],dx | ||
237 | ; | ||
238 | mov ax,WORD PTR es:[di+4] | ||
239 | mul ax | ||
240 | mov WORD PTR ds:[si+8],ax | ||
241 | mov WORD PTR ds:[si+10],dx | ||
242 | ; | ||
243 | mov ax,WORD PTR es:[di+6] | ||
244 | mul ax | ||
245 | mov WORD PTR ds:[si+12],ax | ||
246 | mov WORD PTR ds:[si+14],dx | ||
247 | ; | ||
248 | add di,8 | ||
249 | add si,16 | ||
250 | dec bx | ||
251 | je $L666 | ||
252 | jmp $L765 | ||
253 | $L666: | ||
254 | and bp,3 | ||
255 | dec bp ; The copied value of bx (num) | ||
256 | js $L645 | ||
257 | ; | ||
258 | mov ax,WORD PTR es:[di] | ||
259 | mul ax | ||
260 | mov WORD PTR ds:[si],ax | ||
261 | mov WORD PTR ds:[si+2],dx | ||
262 | dec bp | ||
263 | js $L645 | ||
264 | ; | ||
265 | mov ax,WORD PTR es:[di+2] | ||
266 | mul ax | ||
267 | mov WORD PTR ds:[si+4],ax | ||
268 | mov WORD PTR ds:[si+6],dx | ||
269 | dec bp | ||
270 | js $L645 | ||
271 | ; | ||
272 | mov ax,WORD PTR es:[di+4] | ||
273 | mul ax | ||
274 | mov WORD PTR ds:[si+8],ax | ||
275 | mov WORD PTR ds:[si+10],dx | ||
276 | $L645: | ||
277 | pop es | ||
278 | pop ds | ||
279 | pop di | ||
280 | pop si | ||
281 | pop bx | ||
282 | pop bp | ||
283 | ret | ||
284 | |||
285 | _bn_sqr_words ENDP | ||
286 | PUBLIC _bn_div64 | ||
287 | _bn_div64 PROC FAR | ||
288 | push bp | ||
289 | mov bp,sp | ||
290 | mov dx, WORD PTR [bp+6] | ||
291 | mov ax, WORD PTR [bp+8] | ||
292 | div WORD PTR [bp+10] | ||
293 | pop bp | ||
294 | ret | ||
295 | _bn_div64 ENDP | ||
296 | F_TEXT ENDS | ||
297 | END | ||
diff --git a/src/lib/libcrypto/bn/asm/x86w32.asm b/src/lib/libcrypto/bn/asm/x86w32.asm new file mode 100644 index 0000000000..fc6f917714 --- /dev/null +++ b/src/lib/libcrypto/bn/asm/x86w32.asm | |||
@@ -0,0 +1,362 @@ | |||
1 | ; Static Name Aliases | ||
2 | ; | ||
3 | TITLE bn_mulw.c | ||
4 | .386 | ||
5 | F_TEXT SEGMENT WORD USE16 PUBLIC 'CODE' | ||
6 | F_TEXT ENDS | ||
7 | _DATA SEGMENT WORD USE16 PUBLIC 'DATA' | ||
8 | _DATA ENDS | ||
9 | CONST SEGMENT WORD USE16 PUBLIC 'CONST' | ||
10 | CONST ENDS | ||
11 | _BSS SEGMENT WORD USE16 PUBLIC 'BSS' | ||
12 | _BSS ENDS | ||
13 | DGROUP GROUP CONST, _BSS, _DATA | ||
14 | ASSUME DS: DGROUP, SS: DGROUP | ||
15 | F_TEXT SEGMENT | ||
16 | ASSUME CS: F_TEXT | ||
17 | PUBLIC _bn_mul_add_words | ||
18 | _bn_mul_add_words PROC FAR | ||
19 | ; Line 58 | ||
20 | push bp | ||
21 | push bx | ||
22 | push esi | ||
23 | push di | ||
24 | push ds | ||
25 | push es | ||
26 | mov bp,sp | ||
27 | ; w = 28 | ||
28 | ; num = 26 | ||
29 | ; ap = 22 | ||
30 | ; rp = 18 | ||
31 | xor esi,esi ;c=0; | ||
32 | mov di,WORD PTR [bp+18] ; load r | ||
33 | mov ds,WORD PTR [bp+20] ; load r | ||
34 | mov bx,WORD PTR [bp+22] ; load a | ||
35 | mov es,WORD PTR [bp+24] ; load a | ||
36 | mov ecx,DWORD PTR [bp+28] ; load w | ||
37 | mov bp,WORD PTR [bp+26] ; load num | ||
38 | shr bp,1 ; div count by 4 and do groups of 4 | ||
39 | shr bp,1 | ||
40 | je $L555 | ||
41 | |||
42 | $L546: | ||
43 | mov eax,ecx | ||
44 | mul DWORD PTR es:[bx] ; w* *a | ||
45 | add eax,DWORD PTR ds:[di] ; + *r | ||
46 | adc edx,0 | ||
47 | adc eax,esi | ||
48 | adc edx,0 | ||
49 | mov DWORD PTR ds:[di],eax | ||
50 | mov esi,edx | ||
51 | ; | ||
52 | mov eax,ecx | ||
53 | mul DWORD PTR es:[bx+4] ; w* *a | ||
54 | add eax,DWORD PTR ds:[di+4] ; + *r | ||
55 | adc edx,0 | ||
56 | adc eax,esi | ||
57 | adc edx,0 | ||
58 | mov DWORD PTR ds:[di+4],eax | ||
59 | mov esi,edx | ||
60 | ; | ||
61 | mov eax,ecx | ||
62 | mul DWORD PTR es:[bx+8] ; w* *a | ||
63 | add eax,DWORD PTR ds:[di+8] ; + *r | ||
64 | adc edx,0 | ||
65 | adc eax,esi | ||
66 | adc edx,0 | ||
67 | mov DWORD PTR ds:[di+8],eax | ||
68 | mov esi,edx | ||
69 | ; | ||
70 | mov eax,ecx | ||
71 | mul DWORD PTR es:[bx+12] ; w* *a | ||
72 | add eax,DWORD PTR ds:[di+12] ; + *r | ||
73 | adc edx,0 | ||
74 | adc eax,esi | ||
75 | adc edx,0 | ||
76 | mov DWORD PTR ds:[di+12],eax | ||
77 | mov esi,edx | ||
78 | ; | ||
79 | add bx,16 | ||
80 | add di,16 | ||
81 | ; | ||
82 | dec bp | ||
83 | je $L555 | ||
84 | jmp $L546 | ||
85 | ; | ||
86 | ; | ||
87 | $L555: | ||
88 | mov bp,sp | ||
89 | mov bp,WORD PTR [bp+26] ; load num | ||
90 | and bp,3 | ||
91 | dec bp | ||
92 | js $L547 | ||
93 | |||
94 | mov eax,ecx | ||
95 | mul DWORD PTR es:[bx] ; w* *a | ||
96 | add eax,DWORD PTR ds:[di] ; + *r | ||
97 | adc edx,0 | ||
98 | adc eax,esi | ||
99 | adc edx,0 | ||
100 | mov DWORD PTR ds:[di],eax | ||
101 | mov esi,edx | ||
102 | dec bp | ||
103 | js $L547 ; Note that we are now testing for -1 | ||
104 | ; | ||
105 | mov eax,ecx | ||
106 | mul DWORD PTR es:[bx+4] ; w* *a | ||
107 | add eax,DWORD PTR ds:[di+4] ; + *r | ||
108 | adc edx,0 | ||
109 | adc eax,esi | ||
110 | adc edx,0 | ||
111 | mov DWORD PTR ds:[di+4],eax | ||
112 | mov esi,edx | ||
113 | dec bp | ||
114 | js $L547 | ||
115 | ; | ||
116 | mov eax,ecx | ||
117 | mul DWORD PTR es:[bx+8] ; w* *a | ||
118 | add eax,DWORD PTR ds:[di+8] ; + *r | ||
119 | adc edx,0 | ||
120 | adc eax,esi | ||
121 | adc edx,0 | ||
122 | mov DWORD PTR ds:[di+8],eax | ||
123 | mov esi,edx | ||
124 | $L547: | ||
125 | mov eax,esi | ||
126 | mov edx,esi | ||
127 | shr edx,16 | ||
128 | pop es | ||
129 | pop ds | ||
130 | pop di | ||
131 | pop esi | ||
132 | pop bx | ||
133 | pop bp | ||
134 | ret | ||
135 | nop | ||
136 | _bn_mul_add_words ENDP | ||
137 | |||
138 | PUBLIC _bn_mul_words | ||
139 | _bn_mul_words PROC FAR | ||
140 | ; Line 76 | ||
141 | push bp | ||
142 | push bx | ||
143 | push esi | ||
144 | push di | ||
145 | push ds | ||
146 | push es | ||
147 | xor esi,esi | ||
148 | mov bp,sp | ||
149 | mov di,WORD PTR [bp+18] ; r | ||
150 | mov ds,WORD PTR [bp+20] | ||
151 | mov bx,WORD PTR [bp+22] ; a | ||
152 | mov es,WORD PTR [bp+24] | ||
153 | mov ecx,DWORD PTR [bp+28] ; w | ||
154 | mov bp,WORD PTR [bp+26] ; num | ||
155 | |||
156 | $FC743: | ||
157 | mov eax,ecx | ||
158 | mul DWORD PTR es:[bx] | ||
159 | add eax,esi | ||
160 | adc edx,0 | ||
161 | mov DWORD PTR ds:[di],eax | ||
162 | mov esi,edx | ||
163 | dec bp | ||
164 | je $L764 | ||
165 | ; | ||
166 | mov eax,ecx | ||
167 | mul DWORD PTR es:[bx+4] | ||
168 | add eax,esi | ||
169 | adc edx,0 | ||
170 | mov DWORD PTR ds:[di+4],eax | ||
171 | mov esi,edx | ||
172 | dec bp | ||
173 | je $L764 | ||
174 | ; | ||
175 | mov eax,ecx | ||
176 | mul DWORD PTR es:[bx+8] | ||
177 | add eax,esi | ||
178 | adc edx,0 | ||
179 | mov DWORD PTR ds:[di+8],eax | ||
180 | mov esi,edx | ||
181 | dec bp | ||
182 | je $L764 | ||
183 | ; | ||
184 | mov eax,ecx | ||
185 | mul DWORD PTR es:[bx+12] | ||
186 | add eax,esi | ||
187 | adc edx,0 | ||
188 | mov DWORD PTR ds:[di+12],eax | ||
189 | mov esi,edx | ||
190 | dec bp | ||
191 | je $L764 | ||
192 | ; | ||
193 | add bx,16 | ||
194 | add di,16 | ||
195 | jmp $FC743 | ||
196 | nop | ||
197 | $L764: | ||
198 | mov eax,esi | ||
199 | mov edx,esi | ||
200 | shr edx,16 | ||
201 | pop es | ||
202 | pop ds | ||
203 | pop di | ||
204 | pop esi | ||
205 | pop bx | ||
206 | pop bp | ||
207 | ret | ||
208 | nop | ||
209 | _bn_mul_words ENDP | ||
210 | PUBLIC _bn_sqr_words | ||
211 | _bn_sqr_words PROC FAR | ||
212 | ; Line 92 | ||
213 | push bp | ||
214 | push bx | ||
215 | push si | ||
216 | push di | ||
217 | push ds | ||
218 | push es | ||
219 | mov bp,sp | ||
220 | mov si,WORD PTR [bp+16] | ||
221 | mov ds,WORD PTR [bp+18] | ||
222 | mov di,WORD PTR [bp+20] | ||
223 | mov es,WORD PTR [bp+22] | ||
224 | mov bx,WORD PTR [bp+24] | ||
225 | |||
226 | mov bp,bx ; save a memory lookup later | ||
227 | shr bx,1 ; div count by 4 and do groups of 4 | ||
228 | shr bx,1 | ||
229 | je $L666 | ||
230 | |||
231 | $L765: | ||
232 | mov eax,DWORD PTR es:[di] | ||
233 | mul eax | ||
234 | mov DWORD PTR ds:[si],eax | ||
235 | mov DWORD PTR ds:[si+4],edx | ||
236 | ; | ||
237 | mov eax,DWORD PTR es:[di+4] | ||
238 | mul eax | ||
239 | mov DWORD PTR ds:[si+8],eax | ||
240 | mov DWORD PTR ds:[si+12],edx | ||
241 | ; | ||
242 | mov eax,DWORD PTR es:[di+8] | ||
243 | mul eax | ||
244 | mov DWORD PTR ds:[si+16],eax | ||
245 | mov DWORD PTR ds:[si+20],edx | ||
246 | ; | ||
247 | mov eax,DWORD PTR es:[di+12] | ||
248 | mul eax | ||
249 | mov DWORD PTR ds:[si+24],eax | ||
250 | mov DWORD PTR ds:[si+28],edx | ||
251 | ; | ||
252 | add di,16 | ||
253 | add si,32 | ||
254 | dec bx | ||
255 | je $L666 | ||
256 | jmp $L765 | ||
257 | $L666: | ||
258 | and bp,3 | ||
259 | dec bp ; The copied value of bx (num) | ||
260 | js $L645 | ||
261 | ; | ||
262 | mov eax,DWORD PTR es:[di] | ||
263 | mul eax | ||
264 | mov DWORD PTR ds:[si],eax | ||
265 | mov DWORD PTR ds:[si+4],edx | ||
266 | dec bp | ||
267 | js $L645 | ||
268 | ; | ||
269 | mov eax,DWORD PTR es:[di+4] | ||
270 | mul eax | ||
271 | mov DWORD PTR ds:[si+8],eax | ||
272 | mov DWORD PTR ds:[si+12],edx | ||
273 | dec bp | ||
274 | js $L645 | ||
275 | ; | ||
276 | mov eax,DWORD PTR es:[di+8] | ||
277 | mul eax | ||
278 | mov DWORD PTR ds:[si+16],eax | ||
279 | mov DWORD PTR ds:[si+20],edx | ||
280 | $L645: | ||
281 | pop es | ||
282 | pop ds | ||
283 | pop di | ||
284 | pop si | ||
285 | pop bx | ||
286 | pop bp | ||
287 | ret | ||
288 | _bn_sqr_words ENDP | ||
289 | |||
290 | PUBLIC _bn_div64 | ||
291 | _bn_div64 PROC FAR | ||
292 | push bp | ||
293 | mov bp,sp | ||
294 | mov edx, DWORD PTR [bp+6] | ||
295 | mov eax, DWORD PTR [bp+10] | ||
296 | div DWORD PTR [bp+14] | ||
297 | mov edx,eax | ||
298 | shr edx,16 | ||
299 | pop bp | ||
300 | ret | ||
301 | _bn_div64 ENDP | ||
302 | |||
303 | PUBLIC _bn_add_words | ||
304 | _bn_add_words PROC FAR | ||
305 | ; Line 58 | ||
306 | push bp | ||
307 | push bx | ||
308 | push esi | ||
309 | push di | ||
310 | push ds | ||
311 | push es | ||
312 | mov bp,sp | ||
313 | ; w = 28 | ||
314 | ; num = 26 | ||
315 | ; ap = 22 | ||
316 | ; rp = 18 | ||
317 | xor esi,esi ;c=0; | ||
318 | mov si,WORD PTR [bp+22] ; load a | ||
319 | mov es,WORD PTR [bp+24] ; load a | ||
320 | mov di,WORD PTR [bp+26] ; load b | ||
321 | mov ds,WORD PTR [bp+28] ; load b | ||
322 | |||
323 | mov dx,WORD PTR [bp+30] ; load num | ||
324 | dec dx | ||
325 | js $L547 | ||
326 | xor ecx,ecx | ||
327 | |||
328 | $L5477: | ||
329 | xor ebx,ebx | ||
330 | mov eax,DWORD PTR es:[si] ; *a | ||
331 | add eax,ecx | ||
332 | adc ebx,0 | ||
333 | add si,4 ; a++ | ||
334 | add eax,DWORD PTR ds:[di] ; + *b | ||
335 | mov ecx,ebx | ||
336 | adc ecx,0 | ||
337 | add di,4 | ||
338 | mov bx,WORD PTR [bp+18] | ||
339 | mov ds,WORD PTR [bp+20] | ||
340 | mov DWORD PTR ds:[bx],eax | ||
341 | add bx,4 | ||
342 | mov ds,WORD PTR [bp+28] | ||
343 | mov WORD PTR [bp+18],bx | ||
344 | dec dx | ||
345 | js $L547 ; Note that we are now testing for -1 | ||
346 | jmp $L5477 | ||
347 | ; | ||
348 | $L547: | ||
349 | mov eax,ecx | ||
350 | mov edx,ecx | ||
351 | shr edx,16 | ||
352 | pop es | ||
353 | pop ds | ||
354 | pop di | ||
355 | pop esi | ||
356 | pop bx | ||
357 | pop bp | ||
358 | ret | ||
359 | nop | ||
360 | _bn_add_words ENDP | ||
361 | F_TEXT ENDS | ||
362 | END | ||