2 SDL - Simple DirectMedia Layer
3 Copyright (C) 1997-2009 Sam Lantinga
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #include "SDL_config.h"
24 /* This file contains portable stdlib functions for SDL */
26 #include "SDL_stdinc.h"
29 /* These are some C runtime intrinsics that need to be defined */
38 __declspec(selectany) int _fltused=1;
42 void __declspec(naked) _ftol()
50 fst dword ptr [esp+18h]
51 fistp qword ptr [esp+10h]
52 fild qword ptr [esp+10h]
53 mov edx,dword ptr [esp+18h]
54 mov eax,dword ptr [esp+10h]
56 je integer_QnaN_or_zero
57 arg_is_not_integer_QnaN:
62 mov ecx,dword ptr [esp]
66 mov edx,dword ptr [esp+14h]
71 mov ecx,dword ptr [esp]
74 mov edx,dword ptr [esp+14h]
78 mov edx,dword ptr [esp+14h]
80 jne arg_is_not_integer_QnaN
81 fstp dword ptr [esp+18h]
82 fstp dword ptr [esp+18h]
88 void __declspec(naked) _ftol2_sse()
93 /* 64-bit math operators for 32-bit systems */
94 void __declspec(naked) _allmul()
103 mov eax,dword ptr [ebp+10h]
104 mov edi,dword ptr [ebp+8]
108 mov eax,dword ptr [ebp+8]
112 mov dword ptr [ebp-18h],eax
113 mov edx,dword ptr [ebp+0Ch]
116 mov eax,dword ptr [ebp-18h]
118 mov dword ptr [ebp-14h],ebx
119 mov edx,dword ptr [ebp-14h]
128 void __declspec(naked) _alldiv()
135 mov eax,dword ptr [esp+14h]
139 mov edx,dword ptr [esp+10h]
143 mov dword ptr [esp+14h],eax
144 mov dword ptr [esp+10h],edx
146 mov eax,dword ptr [esp+1Ch]
150 mov edx,dword ptr [esp+18h]
154 mov dword ptr [esp+1Ch],eax
155 mov dword ptr [esp+18h],edx
159 mov ecx,dword ptr [esp+18h]
160 mov eax,dword ptr [esp+14h]
164 mov eax,dword ptr [esp+10h]
170 mov ecx,dword ptr [esp+18h]
171 mov edx,dword ptr [esp+14h]
172 mov eax,dword ptr [esp+10h]
182 mul dword ptr [esp+1Ch]
184 mov eax,dword ptr [esp+18h]
188 cmp edx,dword ptr [esp+14h]
191 cmp eax,dword ptr [esp+10h]
211 void __declspec(naked) _aulldiv()
216 mov eax,dword ptr [esp+18h]
219 mov ecx,dword ptr [esp+14h]
220 mov eax,dword ptr [esp+10h]
224 mov eax,dword ptr [esp+0Ch]
230 mov ebx,dword ptr [esp+14h]
231 mov edx,dword ptr [esp+10h]
232 mov eax,dword ptr [esp+0Ch]
242 mul dword ptr [esp+18h]
244 mov eax,dword ptr [esp+14h]
248 cmp edx,dword ptr [esp+10h]
251 cmp eax,dword ptr [esp+0Ch]
264 void __declspec(naked) _allrem()
270 mov eax,dword ptr [esp+10h]
274 mov edx,dword ptr [esp+0Ch]
278 mov dword ptr [esp+10h],eax
279 mov dword ptr [esp+0Ch],edx
281 mov eax,dword ptr [esp+18h]
284 mov edx,dword ptr [esp+14h]
288 mov dword ptr [esp+18h],eax
289 mov dword ptr [esp+14h],edx
293 mov ecx,dword ptr [esp+14h]
294 mov eax,dword ptr [esp+10h]
297 mov eax,dword ptr [esp+0Ch]
306 mov ecx,dword ptr [esp+14h]
307 mov edx,dword ptr [esp+10h]
308 mov eax,dword ptr [esp+0Ch]
318 mul dword ptr [esp+18h]
320 mul dword ptr [esp+14h]
323 cmp edx,dword ptr [esp+10h]
326 cmp eax,dword ptr [esp+0Ch]
329 sub eax,dword ptr [esp+14h]
330 sbb edx,dword ptr [esp+18h]
332 sub eax,dword ptr [esp+0Ch]
333 sbb edx,dword ptr [esp+10h]
346 void __declspec(naked) _aullrem()
350 mov eax,dword ptr [esp+14h]
353 mov ecx,dword ptr [esp+10h]
354 mov eax,dword ptr [esp+0Ch]
357 mov eax,dword ptr [esp+8]
364 mov ebx,dword ptr [esp+10h]
365 mov edx,dword ptr [esp+0Ch]
366 mov eax,dword ptr [esp+8]
376 mul dword ptr [esp+14h]
378 mul dword ptr [esp+10h]
381 cmp edx,dword ptr [esp+0Ch]
384 cmp eax,dword ptr [esp+8]
387 sub eax,dword ptr [esp+10h]
388 sbb edx,dword ptr [esp+14h]
390 sub eax,dword ptr [esp+8]
391 sbb edx,dword ptr [esp+0Ch]
400 void __declspec(naked) _alldvrm()
408 mov eax,dword ptr [esp+14h]
413 mov edx,dword ptr [esp+10h]
417 mov dword ptr [esp+14h],eax
418 mov dword ptr [esp+10h],edx
420 mov eax,dword ptr [esp+1Ch]
424 mov edx,dword ptr [esp+18h]
428 mov dword ptr [esp+1Ch],eax
429 mov dword ptr [esp+18h],edx
433 mov ecx,dword ptr [esp+18h]
434 mov eax,dword ptr [esp+14h]
438 mov eax,dword ptr [esp+10h]
442 mul dword ptr [esp+18h]
445 mul dword ptr [esp+18h]
450 mov ecx,dword ptr [esp+18h]
451 mov edx,dword ptr [esp+14h]
452 mov eax,dword ptr [esp+10h]
462 mul dword ptr [esp+1Ch]
464 mov eax,dword ptr [esp+18h]
468 cmp edx,dword ptr [esp+14h]
471 cmp eax,dword ptr [esp+10h]
475 sub eax,dword ptr [esp+18h]
476 sbb edx,dword ptr [esp+1Ch]
480 sub eax,dword ptr [esp+10h]
481 sbb edx,dword ptr [esp+14h]
505 void __declspec(naked) _aulldvrm()
509 mov eax,dword ptr [esp+14h]
512 mov ecx,dword ptr [esp+10h]
513 mov eax,dword ptr [esp+0Ch]
517 mov eax,dword ptr [esp+8]
521 mul dword ptr [esp+10h]
524 mul dword ptr [esp+10h]
529 mov ebx,dword ptr [esp+10h]
530 mov edx,dword ptr [esp+0Ch]
531 mov eax,dword ptr [esp+8]
541 mul dword ptr [esp+14h]
543 mov eax,dword ptr [esp+10h]
547 cmp edx,dword ptr [esp+0Ch]
550 cmp eax,dword ptr [esp+8]
554 sub eax,dword ptr [esp+10h]
555 sbb edx,dword ptr [esp+14h]
559 sub eax,dword ptr [esp+8]
560 sbb edx,dword ptr [esp+0Ch]
573 void __declspec(naked) _allshl()
595 void __declspec(naked) _aullshr()
620 #endif /* !HAVE_LIBC */