source: trunk/src/custombuild/math64.asm@ 10367

Last change on this file since 10367 was 6374, checked in by sandervl, 24 years ago

created

File size: 8.0 KB
Line 
1; $Id: math64.asm,v 1.1 2001-07-20 15:41:43 sandervl Exp $
2
3;/*
4; * Project Odin Software License can be found in LICENSE.TXT
5; * Win32 Exception handling + misc functions for OS/2
6; *
7; * Copyright 1998 Sander van Leeuwen
8; *
9; */
10
11; 1999/08/09 PH see if we can do this as INLINE functions
12
13.386p
14 NAME odinfs
15
16DATA32 segment para use32 public 'DATA'
17flt_A0CB4 dd 9.223372e18 ; DATA XREF: ODINCRTD_1030+1Ar
18DATA32 ends
19
20CODE32 SEGMENT DWORD PUBLIC USE32 'CODE'
21 ASSUME DS:FLAT, SS:FLAT
22
23 public __modi64
24__modi64 proc near
25
26arg_0 = dword ptr 0Ch
27
28 push edi
29 push ebx
30 mov edi, [esp+arg_0]
31 mov ebx, 80000000h
32 test edx, ebx
33 jz short loc_25FEB
34 not eax
35 not edx
36 add eax, 1
37 adc edx, 0
38 test edi, ebx
39 jz short loc_26005
40 not ecx
41 not edi
42 add ecx, 1
43 adc edi, 0
44 jmp short loc_2600F
45; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
46
47loc_25FE1: ; CODE XREF: ODINCRTD_1027+35j
48 mov ebx, edi
49 and ebx, 80000000h
50 jmp short loc_2600F
51; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
52
53loc_25FEB: ; CODE XREF: ODINCRTD_1027+Dj
54 test edi, ebx
55 jz short loc_25FE1
56 mov ebx, edi
57 not ebx
58 and ebx, 80000000h
59 not ecx
60 not edi
61 add ecx, 1
62 adc edi, 0
63 jmp short loc_2600F
64; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
65
66loc_26005: ; CODE XREF: ODINCRTD_1027+1Bj
67 mov ebx, edi
68 not ebx
69 and ebx, 80000000h
70
71loc_2600F: ; CODE XREF: ODINCRTD_1027+27j
72 ; ODINCRTD_1027+31j ...
73 test edi, edi
74 jnz short loc_26047
75 test ecx, ecx
76 jz short loc_2601B
77 cmp ecx, edx
78 jbe short loc_26053
79
80loc_2601B: ; CODE XREF: ODINCRTD_1027+5Dj
81 div ecx
82 mov eax, edx
83 xor edx, edx
84 test ebx, ebx
85 jz short loc_26087
86 not eax
87 not edx
88 add eax, 1
89 adc edx, 0
90 jmp short loc_26087
91; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
92
93loc_26031: ; CODE XREF: ODINCRTD_1027+99j
94 xor edx, edx
95 xor eax, eax
96 jmp short loc_26087
97; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
98
99loc_26037: ; CODE XREF: ODINCRTD_1027+93j
100 ; ODINCRTD_1027+97j
101 test ebx, ebx
102 jz short loc_26087
103 not eax
104 not edx
105 add eax, 1
106 adc edx, 0
107 jmp short loc_26087
108; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
109
110loc_26047: ; CODE XREF: ODINCRTD_1027+59j
111 cmp edx, edi
112 ja short loc_26053
113 jb short loc_26037
114 cmp eax, ecx
115 jb short loc_26037
116 jz short loc_26031
117
118loc_26053: ; CODE XREF: ODINCRTD_1027+61j
119 ; ODINCRTD_1027+91j
120 push ebp
121 push esi
122 xor esi, esi
123 xor ebp, ebp
124 mov bl, 40h ; '@'
125
126loc_2605B: ; CODE XREF: ODINCRTD_1027+BBj
127 shl eax, 1
128 rcl edx, 1
129 rcl esi, 1
130 rcl ebp, 1
131 cmp ebp, edi
132 ja short loc_2606D
133 jb short loc_26071
134 cmp esi, ecx
135 jb short loc_26071
136
137loc_2606D: ; CODE XREF: ODINCRTD_1027+ADj
138 sub esi, ecx
139 sbb ebp, edi
140
141loc_26071: ; CODE XREF: ODINCRTD_1027+AFj
142 ; ODINCRTD_1027+B3j
143 dec bl
144 jnz short loc_2605B
145 mov eax, esi
146 mov edx, ebp
147 test ebx, ebx
148 jz short loc_26085
149 xor eax, eax
150 xor edx, edx
151 sub eax, esi
152 sbb edx, ebp
153
154loc_26085: ; CODE XREF: ODINCRTD_1027+C3j
155 pop esi
156 pop ebp
157
158loc_26087: ; CODE XREF: ODINCRTD_1027+6Bj
159 ; ODINCRTD_1027+77j ...
160 pop ebx
161 pop edi
162 retn
163__modi64 endp
164
165 public __modu64
166__modu64 proc near ; CODE XREF: sub_473C0+46p
167 ; sub_4A490+348p ...
168
169arg_0 = dword ptr 8
170
171 push edi
172 mov edi, [esp+arg_0]
173 test edi, edi
174 jnz short loc_26B3F
175 test ecx, ecx
176 jz short loc_26B31
177 cmp ecx, edx
178 jbe short loc_26B4B
179
180loc_26B31: ; CODE XREF: ODINCRTD_1028+Bj
181 div ecx
182 mov eax, edx
183 xor edx, edx
184 jmp short loc_26B78
185; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
186
187loc_26B39: ; CODE XREF: ODINCRTD_1028+29j
188 xor eax, eax
189 xor edx, edx
190 jmp short loc_26B78
191; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
192
193loc_26B3F: ; CODE XREF: ODINCRTD_1028+7j
194 cmp edx, edi
195 ja short loc_26B4B
196 jb short loc_26B78
197 cmp eax, ecx
198 jb short loc_26B78
199 jz short loc_26B39
200
201loc_26B4B: ; CODE XREF: ODINCRTD_1028+Fj
202 ; ODINCRTD_1028+21j
203 push ebp
204 push ebx
205 push esi
206 xor esi, esi
207 xor ebp, ebp
208 mov bl, 40h ; '@'
209
210loc_26B54: ; CODE XREF: ODINCRTD_1028+4Fj
211 shl eax, 1
212 rcl edx, 1
213 rcl esi, 1
214 rcl ebp, 1
215 cmp ebp, edi
216 ja short loc_26B66
217 jb short loc_26B6D
218 cmp esi, ecx
219 jb short loc_26B6D
220
221loc_26B66: ; CODE XREF: ODINCRTD_1028+3Ej
222 sub esi, ecx
223 sbb ebp, edi
224 or eax, 1
225
226loc_26B6D: ; CODE XREF: ODINCRTD_1028+40j
227 ; ODINCRTD_1028+44j
228 dec bl
229 jnz short loc_26B54
230 mov eax, esi
231 mov edx, ebp
232 pop esi
233 pop ebx
234 pop ebp
235
236loc_26B78: ; CODE XREF: ODINCRTD_1028+17j
237 ; ODINCRTD_1028+1Dj ...
238 pop edi
239 retn
240__modu64 endp
241
242 public __multi64
243__multi64 proc near ; CODE XREF: sub_259BA+258p
244 ; sub_259BA+337p ...
245
246arg_0 = dword ptr 8
247
248 push edx
249 or edx, [esp+arg_0]
250 jnz short loc_2D5E3
251 mul ecx
252 pop ecx
253 retn
254; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
255
256loc_2D5E3: ; CODE XREF: ODINCRTD_1029+5j
257 push ebx
258 push eax
259 mul [esp+8+arg_0]
260 mov ebx, eax
261 mov eax, ecx
262 mul dword ptr [esp+8]
263 add ebx, eax
264 pop eax
265 mul ecx
266 add edx, ebx
267 pop ebx
268 pop ecx
269 retn
270__multi64 endp
271
272 public __u64toflt
273__u64toflt proc near
274
275var_C = tbyte ptr -0Ch
276
277 mov ecx, edx
278 or edx, 80000000h
279 push 403Eh
280 push edx
281 push eax
282 fld [esp+0Ch+var_C]
283 test ecx, 80000000h
284 jnz short loc_22AD8
285 fsub flt_A0CB4
286
287loc_22AD8: ; CODE XREF: ODINCRTD_1030+18j
288 add esp, 0Ch
289 retn
290__u64toflt endp
291
292 public __divi64
293__divi64 proc near ; CODE XREF: cseg02:0002E670p
294 ; cseg02:0002E6FAp
295
296var_4 = word ptr -4
297var_2 = word ptr -2
298arg_0 = qword ptr 4
299arg_8 = qword ptr 0Ch
300
301 mov dword ptr [esp+arg_0+4], edx
302 or edx, dword ptr [esp+arg_8+4]
303 jnz short loc_260D1
304 xor edx, edx
305 div ecx
306 xor edx, edx
307 retn
308; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
309
310loc_260D1: ; CODE XREF: ODINCRTD_1031+8j
311 sub esp, 4
312 mov dword ptr [esp+4+arg_0], eax
313 mov dword ptr [esp+4+arg_8], ecx
314 fstcw [esp+4+var_4]
315 mov ax, [esp+4+var_4]
316 or ax, 0F00h
317 mov [esp+4+var_2], ax
318 wait
319 fldcw [esp+4+var_2]
320 fild [esp+4+arg_0]
321 fild [esp+4+arg_8]
322 fdivp st(1), st
323 fistp [esp+4+arg_0]
324 fclex
325 wait
326 fldcw [esp+4+var_4]
327 add esp, 4
328 mov eax, dword ptr [esp+arg_0]
329 mov edx, dword ptr [esp+arg_0+4]
330 retn
331__divi64 endp
332
333 public __divu64
334__divu64 proc near ; CODE XREF: cseg02:0002E2D6p
335 ; sub_473C0+2Ep ...
336
337arg_0 = dword ptr 8
338
339 push edi
340 mov edi, [esp+arg_0]
341 test edi, edi
342 jnz short loc_26D12
343 test ecx, ecx
344 jz short loc_26CFD
345 cmp ecx, edx
346 jbe short loc_26D1E
347
348loc_26CFD: ; CODE XREF: ODINCRTD_1032+Bj
349 div ecx
350 xor edx, edx
351 jmp short loc_26D47
352; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
353
354loc_26D03: ; CODE XREF: ODINCRTD_1032+2Aj
355 ; ODINCRTD_1032+2Ej
356 xor edx, edx
357 xor eax, eax
358 jmp short loc_26D47
359; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
360
361loc_26D09: ; CODE XREF: ODINCRTD_1032+30j
362 xor edx, edx
363 mov eax, 1
364 jmp short loc_26D47
365; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
366
367loc_26D12: ; CODE XREF: ODINCRTD_1032+7j
368 cmp edx, edi
369 ja short loc_26D1E
370 jb short loc_26D03
371 cmp eax, ecx
372 jb short loc_26D03
373 jz short loc_26D09
374
375loc_26D1E: ; CODE XREF: ODINCRTD_1032+Fj
376 ; ODINCRTD_1032+28j
377 push ebp
378 push ebx
379 push esi
380 xor esi, esi
381 xor ebp, ebp
382 mov bl, 40h ; '@'
383
384loc_26D27: ; CODE XREF: ODINCRTD_1032+56j
385 shl eax, 1
386 rcl edx, 1
387 rcl esi, 1
388 rcl ebp, 1
389 cmp ebp, edi
390 ja short loc_26D39
391 jb short loc_26D40
392 cmp esi, ecx
393 jb short loc_26D40
394
395loc_26D39: ; CODE XREF: ODINCRTD_1032+45j
396 sub esi, ecx
397 sbb ebp, edi
398 or eax, 1
399
400loc_26D40: ; CODE XREF: ODINCRTD_1032+47j
401 ; ODINCRTD_1032+4Bj
402 dec bl
403 jnz short loc_26D27
404 pop esi
405 pop ebx
406 pop ebp
407
408loc_26D47: ; CODE XREF: ODINCRTD_1032+15j
409 ; ODINCRTD_1032+1Bj ...
410 pop edi
411 retn
412__divu64 endp
413
414CODE32 ENDS
415 END
Note: See TracBrowser for help on using the repository browser.