summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bn/asm/x86w32.asm
diff options
context:
space:
mode:
authorcvs2svn <admin@example.com>1998-10-05 20:13:17 +0000
committercvs2svn <admin@example.com>1998-10-05 20:13:17 +0000
commite82f18fab47b698d93971f576f962a3068132912 (patch)
tree681519717892864935c3d0533cf171098afa649a /src/lib/libcrypto/bn/asm/x86w32.asm
parent536c76cbb863bab152f19842ab88772c01e922c7 (diff)
downloadopenbsd-SSLeay_0_9_0b.tar.gz
openbsd-SSLeay_0_9_0b.tar.bz2
openbsd-SSLeay_0_9_0b.zip
This commit was manufactured by cvs2git to create tag 'SSLeay_0_9_0b'.SSLeay_0_9_0b
Diffstat (limited to 'src/lib/libcrypto/bn/asm/x86w32.asm')
-rw-r--r--src/lib/libcrypto/bn/asm/x86w32.asm362
1 files changed, 362 insertions, 0 deletions
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
5F_TEXT SEGMENT WORD USE16 PUBLIC 'CODE'
6F_TEXT ENDS
7_DATA SEGMENT WORD USE16 PUBLIC 'DATA'
8_DATA ENDS
9CONST SEGMENT WORD USE16 PUBLIC 'CONST'
10CONST ENDS
11_BSS SEGMENT WORD USE16 PUBLIC 'BSS'
12_BSS ENDS
13DGROUP GROUP CONST, _BSS, _DATA
14 ASSUME DS: DGROUP, SS: DGROUP
15F_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
361F_TEXT ENDS
362END