From 3bd1d4800608e0c695fb7dd97646d9daa260a230 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 8 Feb 2006 08:55:33 +0000 Subject: [PATCH] Default to build SDL without MSVCRT --- VisualC.zip | Bin 38405 -> 38996 bytes include/SDL_types.h | 10 +- src/stdlib/SDL_stdlib.c | 568 ++++++++++++++++++++++++++++++++++++++-- 3 files changed, 561 insertions(+), 17 deletions(-) diff --git a/VisualC.zip b/VisualC.zip index c7a8ab20cd023d857634053d1686a1fa9aa612e3..525aa0eace94adfc9889e5676861e5dc24f572b0 100644 GIT binary patch delta 4367 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 Qfvw8=>Y`yVZpPZ^KdFL14*&oF delta 3906 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 A%K!iX diff --git a/include/SDL_types.h b/include/SDL_types.h index 08e4b5cff..feb704493 100644 --- a/include/SDL_types.h +++ b/include/SDL_types.h @@ -27,8 +27,14 @@ #include #ifdef _MSC_VER -/* FIXME!! */ -typedef unsigned int size_t; +#ifndef _SIZE_T_DEFINED +#ifdef _WIN64 +typedef unsigned __int64 size_t; +#else +typedef _W64 unsigned int size_t; +#endif +#define _SIZE_T_DEFINED +#endif typedef size_t uintptr_t; #endif diff --git a/src/stdlib/SDL_stdlib.c b/src/stdlib/SDL_stdlib.c index 4e7e7b13c..1bac89c89 100644 --- a/src/stdlib/SDL_stdlib.c +++ b/src/stdlib/SDL_stdlib.c @@ -30,43 +30,581 @@ #if defined(_MSC_VER) -/* Float to long (FIXME!) */ -long _ftol() +/* Float to long */ +void __declspec(naked) _ftol() { - return 0; + __asm { + push ebp + mov ebp,esp + sub esp,20h + and esp,0FFFFFFF0h + fld st(0) + fst dword ptr [esp+18h] + fistp qword ptr [esp+10h] + fild qword ptr [esp+10h] + mov edx,dword ptr [esp+18h] + mov eax,dword ptr [esp+10h] + test eax,eax + je integer_QnaN_or_zero +arg_is_not_integer_QnaN: + fsubp st(1),st + test edx,edx + jns positive + fstp dword ptr [esp] + mov ecx,dword ptr [esp] + xor ecx,80000000h + add ecx,7FFFFFFFh + adc eax,0 + mov edx,dword ptr [esp+14h] + adc edx,0 + jmp localexit +positive: + fstp dword ptr [esp] + mov ecx,dword ptr [esp] + add ecx,7FFFFFFFh + sbb eax,0 + mov edx,dword ptr [esp+14h] + sbb edx,0 + jmp localexit +integer_QnaN_or_zero: + mov edx,dword ptr [esp+14h] + test edx,7FFFFFFFh + jne arg_is_not_integer_QnaN + fstp dword ptr [esp+18h] + fstp dword ptr [esp+18h] +localexit: + leave + ret + } } -long _ftol2_sse() +void __declspec(naked) _ftol2_sse() { - return 0; + _ftol(); } -/* 64-bit math operators (FIXME!) */ -void _allmul() +/* 64-bit math operators for 32-bit systems */ +void __declspec(naked) _allmul() { + __asm { + push ebp + mov ebp,esp + push edi + push esi + push ebx + sub esp,0Ch + mov eax,dword ptr [ebp+10h] + mov edi,dword ptr [ebp+8] + mov ebx,eax + mov esi,eax + sar esi,1Fh + mov eax,dword ptr [ebp+8] + mul ebx + imul edi,esi + mov ecx,edx + mov dword ptr [ebp-18h],eax + mov edx,dword ptr [ebp+0Ch] + add ecx,edi + imul ebx,edx + mov eax,dword ptr [ebp-18h] + lea ebx,[ebx+ecx] + mov dword ptr [ebp-14h],ebx + mov edx,dword ptr [ebp-14h] + add esp,0Ch + pop ebx + pop esi + pop edi + pop ebp + ret + } } -void _alldiv() +void __declspec(naked) _alldiv() { + __asm { + push edi + push esi + push ebx + xor edi,edi + mov eax,dword ptr [esp+14h] + or eax,eax + jge L1 + inc edi + mov edx,dword ptr [esp+10h] + neg eax + neg edx + sbb eax,0 + mov dword ptr [esp+14h],eax + mov dword ptr [esp+10h],edx +L1: + mov eax,dword ptr [esp+1Ch] + or eax,eax + jge L2 + inc edi + mov edx,dword ptr [esp+18h] + neg eax + neg edx + sbb eax,0 + mov dword ptr [esp+1Ch],eax + mov dword ptr [esp+18h],edx +L2: + or eax,eax + jne L3 + mov ecx,dword ptr [esp+18h] + mov eax,dword ptr [esp+14h] + xor edx,edx + div ecx + mov ebx,eax + mov eax,dword ptr [esp+10h] + div ecx + mov edx,ebx + jmp L4 +L3: + mov ebx,eax + mov ecx,dword ptr [esp+18h] + mov edx,dword ptr [esp+14h] + mov eax,dword ptr [esp+10h] +L5: + shr ebx,1 + rcr ecx,1 + shr edx,1 + rcr eax,1 + or ebx,ebx + jne L5 + div ecx + mov esi,eax + mul dword ptr [esp+1Ch] + mov ecx,eax + mov eax,dword ptr [esp+18h] + mul esi + add edx,ecx + jb L6 + cmp edx,dword ptr [esp+14h] + ja L6 + jb L7 + cmp eax,dword ptr [esp+10h] + jbe L7 +L6: + dec esi +L7: + xor edx,edx + mov eax,esi +L4: + dec edi + jne L8 + neg edx + neg eax + sbb edx,0 +L8: + pop ebx + pop esi + pop edi + ret 10h + } } -void _aulldiv() +void __declspec(naked) _aulldiv() { + __asm { + push ebx + push esi + mov eax,dword ptr [esp+18h] + or eax,eax + jne L1 + mov ecx,dword ptr [esp+14h] + mov eax,dword ptr [esp+10h] + xor edx,edx + div ecx + mov ebx,eax + mov eax,dword ptr [esp+0Ch] + div ecx + mov edx,ebx + jmp L2 +L1: + mov ecx,eax + mov ebx,dword ptr [esp+14h] + mov edx,dword ptr [esp+10h] + mov eax,dword ptr [esp+0Ch] +L3: + shr ecx,1 + rcr ebx,1 + shr edx,1 + rcr eax,1 + or ecx,ecx + jne L3 + div ebx + mov esi,eax + mul dword ptr [esp+18h] + mov ecx,eax + mov eax,dword ptr [esp+14h] + mul esi + add edx,ecx + jb L4 + cmp edx,dword ptr [esp+10h] + ja L4 + jb L5 + cmp eax,dword ptr [esp+0Ch] + jbe L5 +L4: + dec esi +L5: + xor edx,edx + mov eax,esi +L2: + pop esi + pop ebx + ret 10h + } } -void _allrem() +void __declspec(naked) _allrem() { + __asm { + push ebx + push edi + xor edi,edi + mov eax,dword ptr [esp+10h] + or eax,eax + jge L1 + inc edi + mov edx,dword ptr [esp+0Ch] + neg eax + neg edx + sbb eax,0 + mov dword ptr [esp+10h],eax + mov dword ptr [esp+0Ch],edx +L1: + mov eax,dword ptr [esp+18h] + or eax,eax + jge L2 + mov edx,dword ptr [esp+14h] + neg eax + neg edx + sbb eax,0 + mov dword ptr [esp+18h],eax + mov dword ptr [esp+14h],edx +L2: + or eax,eax + jne L3 + mov ecx,dword ptr [esp+14h] + mov eax,dword ptr [esp+10h] + xor edx,edx + div ecx + mov eax,dword ptr [esp+0Ch] + div ecx + mov eax,edx + xor edx,edx + dec edi + jns L4 + jmp L8 +L3: + mov ebx,eax + mov ecx,dword ptr [esp+14h] + mov edx,dword ptr [esp+10h] + mov eax,dword ptr [esp+0Ch] +L5: + shr ebx,1 + rcr ecx,1 + shr edx,1 + rcr eax,1 + or ebx,ebx + jne L5 + div ecx + mov ecx,eax + mul dword ptr [esp+18h] + xchg eax,ecx + mul dword ptr [esp+14h] + add edx,ecx + jb L6 + cmp edx,dword ptr [esp+10h] + ja L6 + jb L7 + cmp eax,dword ptr [esp+0Ch] + jbe L7 +L6: + sub eax,dword ptr [esp+14h] + sbb edx,dword ptr [esp+18h] +L7: + sub eax,dword ptr [esp+0Ch] + sbb edx,dword ptr [esp+10h] + dec edi + jns L8 +L4: + neg edx + neg eax + sbb edx,0 +L8: + pop edi + pop ebx + ret 10h + } } -void _aullrem() +void __declspec(naked) _aullrem() { + __asm { + push ebx + mov eax,dword ptr [esp+14h] + or eax,eax + jne L1 + mov ecx,dword ptr [esp+10h] + mov eax,dword ptr [esp+0Ch] + xor edx,edx + div ecx + mov eax,dword ptr [esp+8] + div ecx + mov eax,edx + xor edx,edx + jmp L2 +L1: + mov ecx,eax + mov ebx,dword ptr [esp+10h] + mov edx,dword ptr [esp+0Ch] + mov eax,dword ptr [esp+8] +L3: + shr ecx,1 + rcr ebx,1 + shr edx,1 + rcr eax,1 + or ecx,ecx + jne L3 + div ebx + mov ecx,eax + mul dword ptr [esp+14h] + xchg eax,ecx + mul dword ptr [esp+10h] + add edx,ecx + jb L4 + cmp edx,dword ptr [esp+0Ch] + ja L4 + jb L5 + cmp eax,dword ptr [esp+8] + jbe L5 +L4: + sub eax,dword ptr [esp+10h] + sbb edx,dword ptr [esp+14h] +L5: + sub eax,dword ptr [esp+8] + sbb edx,dword ptr [esp+0Ch] + neg edx + neg eax + sbb edx,0 +L2: + pop ebx + ret 10h + } } -void _alldvrm() +void __declspec(naked) _alldvrm() { + __asm { + push edi + push esi + push ebp + xor edi,edi + xor ebp,ebp + mov eax,dword ptr [esp+14h] + or eax,eax + jge L1 + inc edi + inc ebp + mov edx,dword ptr [esp+10h] + neg eax + neg edx + sbb eax,0 + mov dword ptr [esp+14h],eax + mov dword ptr [esp+10h],edx +L1: + mov eax,dword ptr [esp+1Ch] + or eax,eax + jge L2 + inc edi + mov edx,dword ptr [esp+18h] + neg eax + neg edx + sbb eax,0 + mov dword ptr [esp+1Ch],eax + mov dword ptr [esp+18h],edx +L2: + or eax,eax + jne L3 + mov ecx,dword ptr [esp+18h] + mov eax,dword ptr [esp+14h] + xor edx,edx + div ecx + mov ebx,eax + mov eax,dword ptr [esp+10h] + div ecx + mov esi,eax + mov eax,ebx + mul dword ptr [esp+18h] + mov ecx,eax + mov eax,esi + mul dword ptr [esp+18h] + add edx,ecx + jmp L4 +L3: + mov ebx,eax + mov ecx,dword ptr [esp+18h] + mov edx,dword ptr [esp+14h] + mov eax,dword ptr [esp+10h] +L5: + shr ebx,1 + rcr ecx,1 + shr edx,1 + rcr eax,1 + or ebx,ebx + jne L5 + div ecx + mov esi,eax + mul dword ptr [esp+1Ch] + mov ecx,eax + mov eax,dword ptr [esp+18h] + mul esi + add edx,ecx + jb L6 + cmp edx,dword ptr [esp+14h] + ja L6 + jb L7 + cmp eax,dword ptr [esp+10h] + jbe L7 +L6: + dec esi + sub eax,dword ptr [esp+18h] + sbb edx,dword ptr [esp+1Ch] +L7: + xor ebx,ebx +L4: + sub eax,dword ptr [esp+10h] + sbb edx,dword ptr [esp+14h] + dec ebp + jns L9 + neg edx + neg eax + sbb edx,0 +L9: + mov ecx,edx + mov edx,ebx + mov ebx,ecx + mov ecx,eax + mov eax,esi + dec edi + jne L8 + neg edx + neg eax + sbb edx,0 +L8: + pop ebp + pop esi + pop edi + ret 10h + } } -void _aulldvrm() +void __declspec(naked) _aulldvrm() { + __asm { + push esi + mov eax,dword ptr [esp+14h] + or eax,eax + jne L1 + mov ecx,dword ptr [esp+10h] + mov eax,dword ptr [esp+0Ch] + xor edx,edx + div ecx + mov ebx,eax + mov eax,dword ptr [esp+8] + div ecx + mov esi,eax + mov eax,ebx + mul dword ptr [esp+10h] + mov ecx,eax + mov eax,esi + mul dword ptr [esp+10h] + add edx,ecx + jmp L2 +L1: + mov ecx,eax + mov ebx,dword ptr [esp+10h] + mov edx,dword ptr [esp+0Ch] + mov eax,dword ptr [esp+8] +L3: + shr ecx,1 + rcr ebx,1 + shr edx,1 + rcr eax,1 + or ecx,ecx + jne L3 + div ebx + mov esi,eax + mul dword ptr [esp+14h] + mov ecx,eax + mov eax,dword ptr [esp+10h] + mul esi + add edx,ecx + jb L4 + cmp edx,dword ptr [esp+0Ch] + ja L4 + jb L5 + cmp eax,dword ptr [esp+8] + jbe L5 +L4: + dec esi + sub eax,dword ptr [esp+10h] + sbb edx,dword ptr [esp+14h] +L5: + xor ebx,ebx +L2: + sub eax,dword ptr [esp+8] + sbb edx,dword ptr [esp+0Ch] + neg edx + neg eax + sbb edx,0 + mov ecx,edx + mov edx,ebx + mov ebx,ecx + mov ecx,eax + mov eax,esi + pop esi + ret 10h + } } -void _allshl() +void __declspec(naked) _allshl() { + __asm { + cmp cl,40h + jae RETZERO + cmp cl,20h + jae MORE32 + shld edx,eax,cl + shl eax,cl + ret +MORE32: + mov edx,eax + xor eax,eax + and cl,1Fh + shl edx,cl + ret +RETZERO: + xor eax,eax + xor edx,edx + ret + } } -void _aullshr() +void __declspec(naked) _aullshr() { + __asm { + cmp cl,40h + jae RETZERO + cmp cl,20h + jae MORE32 + shrd eax,edx,cl + shr edx,cl + ret +MORE32: + mov eax,edx + xor edx,edx + and cl,1Fh + shr eax,cl + ret +RETZERO: + xor eax,eax + xor edx,edx + ret + } } #endif /* MSC_VER */