From 940b39882a5b63f3333e9f4977e012dea42a3c8e 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 --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401350 --- 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 zcmZ`+c|6o>7azZwu{TYYjG-|z#xj<%USw|8)QId#NR6dLMAn;SY%%ub8HtoAN{B8g zDcQ1RsR-q!QnsRSDHWOFzs~bL=X}q3e$RQ9bFvZ|s)07xSilj2u=UTB zmzKQ&x236O)^xOH*3>Z^0h@#KK>r%hcxl-*BD(Vz15nSmP58=B9)QiaoSmS~g%vmR ziK_F`v|qHphG+A^U{hK!*k+hGh)$AZ2*BWlHM6EaQ_Q=#9D7wS5^WW`mUJ=@XZ28Y z%v`6j<;l&Hs#F(vhUlo(pBs6EolCaph?M8BJeHT9Q%PR?Bh6ib(Excfzeo-?8rvVK zC2iL=nVG5>soUv_-XWC>eC{lv?2C{I{n%VS6Zj`$hPBmzHAC5OZDC$FZ+SaOQM!kO zpF34sbWQEYo?4jKpQU$<}>%9_m}Z<_f@S@+k|2hTr$IO)fH z&03^gb{ls*`{6O8=5npQ9K&Hy%cqo_C)?4gEaE;`k=uy7V6SPRms3;rLA>-@YsAy= zoZjex=b^!%OE256m3}WxO)B@zg;N^VjSlX(mofO{ux^%{S7p?#f^P|1v-M!99jEV4 zE(my#vAK+IU&r6t5o|Hgo3Ld!pCz4hB_!6wBIR75*b8Mwe@Vo9k30Gj8b2TTz)`%UKrG8R7@5`>a;#J=qS0Bi`_9B<02ps z-!E-nj+6TGv|qrDNJ{-s7}b8)b@?f+WZ<-Wjrgmty?-oo-flyr zfSV^36&-Rg1cSCeO{WvIu(5K4=)IXSQspjb8RT>yw34Hw)p%W)^$}#9nhJYH{#4Im zL8K%hqrmulUQ#RNV;iZf%R;^KrgKz+Ov^X6XVuP&jGUdth6+66GlorQnyGF3Oua(O z#BKF7@$~KV7l-S`ay}27BpAZtBvzJ^J;aU*D=yRyPN<^`FGaa;c6zt1?8&s_-H7;y z;iHT1c+Up1d7T2NGvR%<(}2)^Y0>n?^QJ#A(QiJSsdC#H)>!3O{R}z#P(n2%^h)&d z&h(X%wI)W>5)Y!J7p`F;xUO3N{N zj@7Wvr1YLASF5L{dvZkTuZLX$ zJsv#c!o$ySzDmmT*R2V=%ADrR;??}njE=9&`h>gHGml$677gP1^b#LsTXshikd3-E z6wmwK)~B9p62eCCdDrdAKb|PoZ6@&Uxo!KV)Q)jXEJCildUBi{)-b}Bx_^g7+k-ri zmzXe7k+9-peAX<@`-G(>QeUh^Kc=^^S(G71?lJ2a5qwx;GS^s+PU5@|1G6^ONe{&eMY&RN`LS0%60Uri%`pTLXd`DbCybMS%q)g_2|%e?}8QN3m4ew zS1zO?!LjpCRj))Bm)xo>Cr4Q6NS$rP$Q}@oMwRN)<1ae*$8N@J_lg-Kk&gk`xBNTYI14E zg}Qn7K%0FgMe>y&j!;bOeEtrJRMCWVZ>FK!%sf9)yF zxS@$y*hcRsPEI$j2p#{My!(}&oZ*KA=?RoO-GR}2V@qq*<=T7^wQaIPD_)<8^*hZ}Jd@8*H4 z^U{ElguK}LmH+EI185{;K&O;Ex7!yfKRED|Fy=3(=ix_|Hy|HE`jNRZcYM~5Gejf$V%EAzSgeOuMV604Oz%aCqp z8cNQUoDB}qY^mO7NZC1z^R3q=n_m(A^eV6Zs&`0D3uUbF@7r6q9?OyN`D9??JQkak zpe1x&O4R{A6ZK z*=+KppuoObR<){WxyiTASs>s>bY45?=;f&3;k$lp~~P?OPg4^_R}wH zGV|d`m6!Hs=0a_hE^bJCk~E?hU`&qU&nLFMq%-r66(23WHZ`%oB8ow*^P`{|0$jaQ z@u*mGzEHj0=-4^T@Bw{ASoYb*h>Jn|4Ua;;R^s0Jw`zx$1w{nQi}!6Ki>o60-tJ@5 z6CdkTKbyAI*&20GHqw(y)U&WW;NgLe#a-R*s%>~aywhx4>)eKE4Q1z^naL{8)y}cH z3rrEUsD_CQg-4V1?@s-muvcaD9A7pzNQP4058_raeJa$x+J#jmYcFMAZlr>G6af}pNZgJ+2X}Fs;prdXK+e^i8$IFbfB+Z6Q~*ARSDaHnP0%z~<$_E8 zmRvpnPgejw;U=}-$3}kH6c#}T5MVf21l*O8<4$Km#)gZe))Fs_0Jp+^F?$>Kzp-k4 z!XyH3VBw6l+lStg<#YuRLg!#ppNOnU2 zFLO=w&xO0*I)N>j7;x8IiE9SyBw&q%s+He`{Dnx@$^o%~2av)^v%M?d1P=IDUr zv~D@+;((fr<)MLZOeqkUycxV>@q%$C4q{`$8gnatotpcY{!YyUgTdxwcgcV?CLaI) z&+P9}KxDESWJCZ}$z;%+hJ#`WKqDOkKBwtIJ?o+~BrFd!((xdR$`6!S3P3O$1;4HY z0|u@bpp`8Nsw$MHL12@Og`26ZtI0r#^&9j~3v5agTi@ou3+O^ywSNrJ zpcUvtae6<77@)+G0K>^RNORkF2+t2hQgk84KSN0no}vJ#00s3K13JqV!k7R$3k&*L z+o1zHI3gui7EoE6!C&bpXrl$7v%~>Uh7@>_f&ft&SZMEe=xT-xCsTX|7OJx5SY6E! z01P93kdXQtyv&@dP;bG^*}1F3>Q4*&oF delta 3906 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 #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 */