19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/*
29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    SDL - Simple DirectMedia Layer
39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    Copyright (C) 1997-2012 Sam Lantinga
49682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
59682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    This library is free software; you can redistribute it and/or
69682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    modify it under the terms of the GNU Lesser General Public
79682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    License as published by the Free Software Foundation; either
89682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    version 2.1 of the License, or (at your option) any later version.
99682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    This library is distributed in the hope that it will be useful,
119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    but WITHOUT ANY WARRANTY; without even the implied warranty of
129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    Lesser General Public License for more details.
149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    You should have received a copy of the GNU Lesser General Public
169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    License along with this library; if not, write to the Free Software
179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    Sam Lantinga
209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    slouken@libsdl.org
219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall*/
229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include "SDL_config.h"
239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* This file contains portable stdlib functions for SDL */
259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include "SDL_stdinc.h"
279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef HAVE_LIBC
299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* These are some C runtime intrinsics that need to be defined */
309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#if defined(_MSC_VER)
329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef __FLTUSED__
349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define __FLTUSED__
359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifdef __cplusplus
369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall   extern "C"
379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	   __declspec(selectany) int _fltused=1;
399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* Float to long */
429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid __declspec(naked) _ftol()
439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	__asm {
459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        ebp
469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebp,esp
479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sub         esp,20h
489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		and         esp,0FFFFFFF0h
499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		fld         st(0)
509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		fst         dword ptr [esp+18h]
519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		fistp       qword ptr [esp+10h]
529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		fild        qword ptr [esp+10h]
539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+18h]
549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+10h]
559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		test        eax,eax
569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		je          integer_QnaN_or_zero
579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallarg_is_not_integer_QnaN:
589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		fsubp       st(1),st
599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		test        edx,edx
609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jns         positive
619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		fstp        dword ptr [esp]
629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,dword ptr [esp]
639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         ecx,80000000h
649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         ecx,7FFFFFFFh
659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		adc         eax,0
669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+14h]
679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		adc         edx,0
689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jmp         localexit
699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallpositive:
709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		fstp        dword ptr [esp]
719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,dword ptr [esp]
729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         ecx,7FFFFFFFh
739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         eax,0
749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+14h]
759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,0
769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jmp         localexit
779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallinteger_QnaN_or_zero:
789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+14h]
799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		test        edx,7FFFFFFFh
809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         arg_is_not_integer_QnaN
819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		fstp        dword ptr [esp+18h]
829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		fstp        dword ptr [esp+18h]
839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halllocalexit:
849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		leave
859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret
869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	}
879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid __declspec(naked) _ftol2_sse()
899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	_ftol();
919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* 64-bit math operators for 32-bit systems */
949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid __declspec(naked) _allmul()
959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	__asm {
979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        ebp
989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebp,esp
999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        edi
1009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        esi
1019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        ebx
1029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sub         esp,0Ch
1039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [ebp+10h]
1049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edi,dword ptr [ebp+8]
1059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,eax
1069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         esi,eax
1079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sar         esi,1Fh
1089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [ebp+8]
1099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         ebx
1109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		imul        edi,esi
1119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,edx
1129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [ebp-18h],eax
1139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [ebp+0Ch]
1149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         ecx,edi
1159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		imul        ebx,edx
1169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [ebp-18h]
1179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		lea         ebx,[ebx+ecx]
1189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [ebp-14h],ebx
1199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [ebp-14h]
1209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         esp,0Ch
1219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         ebx
1229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         esi
1239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         edi
1249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         ebp
1259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret
1269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	}
1279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
1289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid __declspec(naked) _alldiv()
1299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
1309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	__asm {
1319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        edi
1329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        esi
1339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        ebx
1349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edi,edi
1359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+14h]
1369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
1379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jge         L1
1389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		inc         edi
1399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+10h]
1409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
1419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
1429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         eax,0
1439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+14h],eax
1449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+10h],edx
1459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL1:
1469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+1Ch]
1479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
1489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jge         L2
1499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		inc         edi
1509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+18h]
1519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
1529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
1539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         eax,0
1549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+1Ch],eax
1559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+18h],edx
1569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL2:
1579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
1589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L3
1599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,dword ptr [esp+18h]
1609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+14h]
1619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
1629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
1639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,eax
1649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+10h]
1659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
1669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,ebx
1679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jmp         L4
1689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL3:
1699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,eax
1709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,dword ptr [esp+18h]
1719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+14h]
1729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+10h]
1739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL5:
1749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         ebx,1
1759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         ecx,1
1769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         edx,1
1779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         eax,1
1789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          ebx,ebx
1799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L5
1809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
1819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         esi,eax
1829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+1Ch]
1839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
1849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+18h]
1859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         esi
1869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         edx,ecx
1879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L6
1889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         edx,dword ptr [esp+14h]
1899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ja          L6
1909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L7
1919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         eax,dword ptr [esp+10h]
1929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jbe         L7
1939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL6:
1949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		dec         esi
1959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL7:
1969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
1979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,esi
1989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL4:
1999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		dec         edi
2009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L8
2019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
2029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
2039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,0
2049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL8:
2059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         ebx
2069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         esi
2079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         edi
2089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret         10h
2099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	}
2109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
2119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid __declspec(naked) _aulldiv()
2129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
2139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	__asm {
2149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        ebx
2159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        esi
2169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+18h]
2179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
2189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L1
2199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,dword ptr [esp+14h]
2209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+10h]
2219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
2229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
2239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,eax
2249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+0Ch]
2259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
2269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,ebx
2279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jmp         L2
2289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL1:
2299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
2309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,dword ptr [esp+14h]
2319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+10h]
2329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+0Ch]
2339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL3:
2349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         ecx,1
2359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         ebx,1
2369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         edx,1
2379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         eax,1
2389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          ecx,ecx
2399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L3
2409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ebx
2419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         esi,eax
2429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+18h]
2439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
2449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+14h]
2459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         esi
2469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         edx,ecx
2479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L4
2489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         edx,dword ptr [esp+10h]
2499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ja          L4
2509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L5
2519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         eax,dword ptr [esp+0Ch]
2529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jbe         L5
2539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL4:
2549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		dec         esi
2559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL5:
2569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
2579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,esi
2589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL2:
2599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         esi
2609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         ebx
2619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret         10h
2629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	}
2639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
2649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid __declspec(naked) _allrem()
2659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
2669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	__asm {
2679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        ebx
2689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        edi
2699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edi,edi
2709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+10h]
2719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
2729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jge         L1
2739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		inc         edi
2749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+0Ch]
2759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
2769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
2779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         eax,0
2789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+10h],eax
2799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+0Ch],edx
2809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL1:
2819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+18h]
2829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
2839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jge         L2
2849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+14h]
2859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
2869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
2879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         eax,0
2889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+18h],eax
2899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+14h],edx
2909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL2:
2919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
2929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L3
2939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,dword ptr [esp+14h]
2949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+10h]
2959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
2969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
2979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+0Ch]
2989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
2999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,edx
3009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
3019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		dec         edi
3029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jns         L4
3039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jmp         L8
3049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL3:
3059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,eax
3069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,dword ptr [esp+14h]
3079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+10h]
3089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+0Ch]
3099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL5:
3109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         ebx,1
3119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         ecx,1
3129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         edx,1
3139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         eax,1
3149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          ebx,ebx
3159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L5
3169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
3179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
3189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+18h]
3199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xchg        eax,ecx
3209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+14h]
3219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         edx,ecx
3229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L6
3239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         edx,dword ptr [esp+10h]
3249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ja          L6
3259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L7
3269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         eax,dword ptr [esp+0Ch]
3279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jbe         L7
3289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL6:
3299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sub         eax,dword ptr [esp+14h]
3309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,dword ptr [esp+18h]
3319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL7:
3329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sub         eax,dword ptr [esp+0Ch]
3339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,dword ptr [esp+10h]
3349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		dec         edi
3359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jns         L8
3369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL4:
3379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
3389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
3399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,0
3409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL8:
3419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         edi
3429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         ebx
3439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret         10h
3449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	}
3459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
3469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid __declspec(naked) _aullrem()
3479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
3489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	__asm {
3499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        ebx
3509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+14h]
3519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
3529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L1
3539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,dword ptr [esp+10h]
3549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+0Ch]
3559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
3569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
3579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+8]
3589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
3599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,edx
3609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
3619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jmp         L2
3629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL1:
3639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
3649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,dword ptr [esp+10h]
3659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+0Ch]
3669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+8]
3679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL3:
3689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         ecx,1
3699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         ebx,1
3709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         edx,1
3719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         eax,1
3729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          ecx,ecx
3739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L3
3749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ebx
3759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
3769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+14h]
3779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xchg        eax,ecx
3789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+10h]
3799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         edx,ecx
3809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L4
3819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         edx,dword ptr [esp+0Ch]
3829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ja          L4
3839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L5
3849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         eax,dword ptr [esp+8]
3859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jbe         L5
3869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL4:
3879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sub         eax,dword ptr [esp+10h]
3889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,dword ptr [esp+14h]
3899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL5:
3909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sub         eax,dword ptr [esp+8]
3919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,dword ptr [esp+0Ch]
3929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
3939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
3949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,0
3959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL2:
3969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         ebx
3979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret         10h
3989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	}
3999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
4009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid __declspec(naked) _alldvrm()
4019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
4029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	__asm {
4039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        edi
4049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        esi
4059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        ebp
4069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edi,edi
4079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         ebp,ebp
4089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+14h]
4099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
4109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jge         L1
4119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		inc         edi
4129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		inc         ebp
4139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+10h]
4149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
4159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
4169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         eax,0
4179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+14h],eax
4189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+10h],edx
4199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL1:
4209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+1Ch]
4219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
4229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jge         L2
4239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		inc         edi
4249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+18h]
4259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
4269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
4279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         eax,0
4289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+1Ch],eax
4299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         dword ptr [esp+18h],edx
4309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL2:
4319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
4329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L3
4339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,dword ptr [esp+18h]
4349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+14h]
4359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
4369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
4379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,eax
4389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+10h]
4399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
4409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         esi,eax
4419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,ebx
4429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+18h]
4439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
4449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,esi
4459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+18h]
4469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         edx,ecx
4479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jmp         L4
4489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL3:
4499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,eax
4509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,dword ptr [esp+18h]
4519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+14h]
4529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+10h]
4539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL5:
4549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         ebx,1
4559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         ecx,1
4569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         edx,1
4579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         eax,1
4589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          ebx,ebx
4599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L5
4609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
4619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         esi,eax
4629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+1Ch]
4639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
4649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+18h]
4659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         esi
4669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         edx,ecx
4679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L6
4689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         edx,dword ptr [esp+14h]
4699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ja          L6
4709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L7
4719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         eax,dword ptr [esp+10h]
4729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jbe         L7
4739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL6:
4749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		dec         esi
4759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sub         eax,dword ptr [esp+18h]
4769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,dword ptr [esp+1Ch]
4779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL7:
4789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         ebx,ebx
4799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL4:
4809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sub         eax,dword ptr [esp+10h]
4819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,dword ptr [esp+14h]
4829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		dec         ebp
4839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jns         L9
4849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
4859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
4869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,0
4879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL9:
4889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,edx
4899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,ebx
4909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,ecx
4919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
4929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,esi
4939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		dec         edi
4949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L8
4959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
4969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
4979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,0
4989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL8:
4999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         ebp
5009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         esi
5019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         edi
5029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret         10h
5039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	}
5049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
5059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid __declspec(naked) _aulldvrm()
5069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
5079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	__asm {
5089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		push        esi
5099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+14h]
5109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          eax,eax
5119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L1
5129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,dword ptr [esp+10h]
5139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+0Ch]
5149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
5159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
5169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,eax
5179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+8]
5189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ecx
5199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         esi,eax
5209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,ebx
5219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+10h]
5229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
5239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,esi
5249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+10h]
5259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         edx,ecx
5269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jmp         L2
5279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL1:
5289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
5299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,dword ptr [esp+10h]
5309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,dword ptr [esp+0Ch]
5319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+8]
5329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL3:
5339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         ecx,1
5349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         ebx,1
5359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         edx,1
5369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rcr         eax,1
5379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		or          ecx,ecx
5389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jne         L3
5399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		div         ebx
5409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         esi,eax
5419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         dword ptr [esp+14h]
5429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
5439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,dword ptr [esp+10h]
5449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mul         esi
5459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		add         edx,ecx
5469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L4
5479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         edx,dword ptr [esp+0Ch]
5489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ja          L4
5499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jb          L5
5509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         eax,dword ptr [esp+8]
5519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jbe         L5
5529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL4:
5539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		dec         esi
5549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sub         eax,dword ptr [esp+10h]
5559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,dword ptr [esp+14h]
5569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL5:
5579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         ebx,ebx
5589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallL2:
5599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sub         eax,dword ptr [esp+8]
5609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,dword ptr [esp+0Ch]
5619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         edx
5629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		neg         eax
5639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		sbb         edx,0
5649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,edx
5659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,ebx
5669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ebx,ecx
5679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         ecx,eax
5689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,esi
5699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		pop         esi
5709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret         10h
5719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	}
5729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
5739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid __declspec(naked) _allshl()
5749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
5759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	__asm {
5769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         cl,40h
5779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jae         RETZERO
5789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         cl,20h
5799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jae         MORE32
5809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shld        edx,eax,cl
5819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shl         eax,cl
5829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret
5839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallMORE32:
5849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         edx,eax
5859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         eax,eax
5869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		and         cl,1Fh
5879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shl         edx,cl
5889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret
5899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallRETZERO:
5909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         eax,eax
5919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
5929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret
5939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	}
5949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
5959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid __declspec(naked) _aullshr()
5969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
5979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	__asm {
5989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         cl,40h
5999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jae         RETZERO
6009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		cmp         cl,20h
6019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		jae         MORE32
6029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shrd        eax,edx,cl
6039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         edx,cl
6049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret
6059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallMORE32:
6069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		mov         eax,edx
6079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
6089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		and         cl,1Fh
6099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		shr         eax,cl
6109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret
6119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallRETZERO:
6129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         eax,eax
6139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		xor         edx,edx
6149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		ret
6159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	}
6169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
6179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
6189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif /* MSC_VER */
6199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
6209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif /* !HAVE_LIBC */
621