فهرست منبع

stdlib: move all mslibc functions to SDL_mslibc.c

This allows disabling LTO on them by only specifying a single file.
Anonymous Maarten 2 سال پیش
والد
کامیت
5da85376b9

+ 2 - 1
CMakeLists.txt

@@ -678,7 +678,8 @@ endif()
 
 if(MSVC)
   # Due to a limitation of Microsoft's LTO implementation, LTO must be disabled for memcpy and memset.
-  set_property(SOURCE src/stdlib/SDL_memcpy.c src/stdlib/SDL_memset.c APPEND PROPERTY COMPILE_FLAGS /GL-)
+  # The same applies to various functions normally belonging in the C library (for x86 architecture).
+  set_property(SOURCE src/stdlib/SDL_mslibc.c APPEND PROPERTY COMPILE_FLAGS /GL-)
 endif()
 
 if(SDL_ASSEMBLY)

+ 1 - 1
Makefile.os2

@@ -68,7 +68,7 @@ CFLAGS_DLL+= -DSDL_BUILD_MINOR_VERSION=$(MINOR_VERSION)
 CFLAGS_DLL+= -DSDL_BUILD_MICRO_VERSION=$(MICRO_VERSION)
 
 SRCS = SDL.c SDL_assert.c SDL_error.c SDL_guid.c SDL_log.c SDL_dataqueue.c SDL_hints.c SDL_list.c SDL_utils.c
-SRCS+= SDL_getenv.c SDL_iconv.c SDL_malloc.c SDL_memcpy.c SDL_memset.c SDL_qsort.c SDL_stdlib.c SDL_string.c SDL_strtokr.c SDL_crc32.c
+SRCS+= SDL_getenv.c SDL_iconv.c SDL_malloc.c SDL_qsort.c SDL_stdlib.c SDL_string.c SDL_strtokr.c SDL_crc32.c
 SRCS+= SDL_cpuinfo.c SDL_atomic.c SDL_spinlock.c SDL_thread.c SDL_timer.c
 SRCS+= SDL_rwops.c SDL_power.c
 SRCS+= SDL_audio.c SDL_audiocvt.c SDL_audiodev.c SDL_audiotypecvt.c SDL_mixer.c SDL_wave.c

+ 1 - 1
Makefile.w32

@@ -44,7 +44,7 @@ CFLAGS_DLL+= -DSDL_BUILD_MICRO_VERSION=$(MICRO_VERSION)
 RCFLAGS = -q -r -bt=nt $(INCPATH)
 
 SRCS = SDL.c SDL_assert.c SDL_error.c SDL_guid.c SDL_log.c SDL_dataqueue.c SDL_hints.c SDL_list.c SDL_utils.c
-SRCS+= SDL_getenv.c SDL_iconv.c SDL_malloc.c SDL_memcpy.c SDL_memset.c SDL_qsort.c SDL_stdlib.c SDL_string.c SDL_strtokr.c SDL_crc32.c
+SRCS+= SDL_getenv.c SDL_iconv.c SDL_malloc.c SDL_qsort.c SDL_stdlib.c SDL_string.c SDL_strtokr.c SDL_crc32.c
 SRCS+= SDL_cpuinfo.c SDL_atomic.c SDL_spinlock.c SDL_thread.c SDL_timer.c
 SRCS+= SDL_rwops.c SDL_power.c
 SRCS+= SDL_audio.c SDL_audiocvt.c SDL_audiodev.c SDL_audiotypecvt.c SDL_mixer.c SDL_wave.c

+ 1 - 2
VisualC-GDK/SDL/SDL.vcxproj

@@ -697,8 +697,7 @@
     <ClCompile Include="..\..\src\stdlib\SDL_getenv.c" />
     <ClCompile Include="..\..\src\stdlib\SDL_iconv.c" />
     <ClCompile Include="..\..\src\stdlib\SDL_malloc.c" />
-    <ClCompile Include="..\..\src\stdlib\SDL_memcpy.c" />
-    <ClCompile Include="..\..\src\stdlib\SDL_memset.c" />
+    <ClCompile Include="..\..\src\stdlib\SDL_mslibc.c" />
     <ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
     <ClCompile Include="..\..\src\stdlib\SDL_stdlib.c" />
     <ClCompile Include="..\..\src\stdlib\SDL_string.c" />

+ 1 - 4
VisualC-GDK/SDL/SDL.vcxproj.filters

@@ -1352,10 +1352,7 @@
     <ClCompile Include="..\..\src\render\direct3d12\SDL_shaders_d3d12.c">
       <Filter>render\direct3d12</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\src\stdlib\SDL_memcpy.c">
-      <Filter>stdlib</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\src\stdlib\SDL_memset.c">
+    <ClCompile Include="..\..\src\stdlib\SDL_mslibc.c">
       <Filter>stdlib</Filter>
     </ClCompile>
     <ClCompile Include="..\..\src\core\gdk\SDL_gdk.cpp">

+ 1 - 2
VisualC-WinRT/SDL-UWP.vcxproj

@@ -311,8 +311,7 @@
     <ClCompile Include="..\src\stdlib\SDL_getenv.c" />
     <ClCompile Include="..\src\stdlib\SDL_iconv.c" />
     <ClCompile Include="..\src\stdlib\SDL_malloc.c" />
-    <ClCompile Include="..\src\stdlib\SDL_memcpy.c" />
-    <ClCompile Include="..\src\stdlib\SDL_memset.c" />
+    <ClCompile Include="..\src\stdlib\SDL_mslibc.c" />
     <ClCompile Include="..\src\stdlib\SDL_qsort.c" />
     <ClCompile Include="..\src\stdlib\SDL_stdlib.c" />
     <ClCompile Include="..\src\stdlib\SDL_string.c" />

+ 1 - 2
VisualC/SDL/SDL.vcxproj

@@ -565,8 +565,7 @@
     <ClCompile Include="..\..\src\stdlib\SDL_getenv.c" />
     <ClCompile Include="..\..\src\stdlib\SDL_iconv.c" />
     <ClCompile Include="..\..\src\stdlib\SDL_malloc.c" />
-    <ClCompile Include="..\..\src\stdlib\SDL_memcpy.c" />
-    <ClCompile Include="..\..\src\stdlib\SDL_memset.c" />
+    <ClCompile Include="..\..\src\stdlib\SDL_mslibc.c" />
     <ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
     <ClCompile Include="..\..\src\stdlib\SDL_stdlib.c" />
     <ClCompile Include="..\..\src\stdlib\SDL_string.c" />

+ 0 - 40
Xcode/SDL/SDL.xcodeproj/project.pbxproj

@@ -3382,24 +3382,6 @@
 		DB31407017554B71006C0E22 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; };
 		DB31407217554B71006C0E22 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317C10858E15000B2BC32 /* Carbon.framework */; };
 		DB31408D17554D3C006C0E22 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00CFA89C106B4BA100758660 /* ForceFeedback.framework */; };
-		F3249B1E285A85FF00DB9B5C /* SDL_memset.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1C285A85FF00DB9B5C /* SDL_memset.c */; };
-		F3249B1F285A85FF00DB9B5C /* SDL_memset.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1C285A85FF00DB9B5C /* SDL_memset.c */; };
-		F3249B20285A85FF00DB9B5C /* SDL_memset.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1C285A85FF00DB9B5C /* SDL_memset.c */; };
-		F3249B21285A85FF00DB9B5C /* SDL_memset.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1C285A85FF00DB9B5C /* SDL_memset.c */; };
-		F3249B22285A85FF00DB9B5C /* SDL_memset.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1C285A85FF00DB9B5C /* SDL_memset.c */; };
-		F3249B23285A85FF00DB9B5C /* SDL_memset.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1C285A85FF00DB9B5C /* SDL_memset.c */; };
-		F3249B24285A85FF00DB9B5C /* SDL_memset.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1C285A85FF00DB9B5C /* SDL_memset.c */; };
-		F3249B25285A85FF00DB9B5C /* SDL_memset.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1C285A85FF00DB9B5C /* SDL_memset.c */; };
-		F3249B26285A85FF00DB9B5C /* SDL_memset.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1C285A85FF00DB9B5C /* SDL_memset.c */; };
-		F3249B27285A85FF00DB9B5C /* SDL_memcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */; };
-		F3249B28285A85FF00DB9B5C /* SDL_memcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */; };
-		F3249B29285A85FF00DB9B5C /* SDL_memcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */; };
-		F3249B2A285A85FF00DB9B5C /* SDL_memcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */; };
-		F3249B2B285A85FF00DB9B5C /* SDL_memcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */; };
-		F3249B2C285A85FF00DB9B5C /* SDL_memcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */; };
-		F3249B2D285A85FF00DB9B5C /* SDL_memcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */; };
-		F3249B2E285A85FF00DB9B5C /* SDL_memcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */; };
-		F3249B2F285A85FF00DB9B5C /* SDL_memcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */; };
 		F3631C6424884ACF004F28EA /* SDL_locale.h in Headers */ = {isa = PBXBuildFile; fileRef = 566E26792462701100718109 /* SDL_locale.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		F3631C652488534E004F28EA /* SDL_locale.h in Headers */ = {isa = PBXBuildFile; fileRef = 566E26792462701100718109 /* SDL_locale.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		F376F6192559B29300CFC0BC /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6182559B29300CFC0BC /* OpenGLES.framework */; platformFilter = ios; };
@@ -4072,8 +4054,6 @@
 		BECDF6B30761BA81005FE872 /* libSDL2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDL2.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		BECDF6BE0761BA81005FE872 /* SDL2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = SDL2; sourceTree = BUILT_PRODUCTS_DIR; };
 		DB31407717554B71006C0E22 /* libSDL2.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libSDL2.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
-		F3249B1C285A85FF00DB9B5C /* SDL_memset.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_memset.c; sourceTree = "<group>"; };
-		F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_memcpy.c; sourceTree = "<group>"; };
 		F376F6182559B29300CFC0BC /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.1.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; };
 		F376F61A2559B2AF00CFC0BC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/iOSSupport/System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
 		F376F6312559B31D00CFC0BC /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/iOSSupport/System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
@@ -5139,8 +5119,6 @@
 				A7D8A8D423E2514000DCD162 /* SDL_getenv.c */,
 				A7D8A8D323E2514000DCD162 /* SDL_iconv.c */,
 				A7D8A8D923E2514000DCD162 /* SDL_malloc.c */,
-				F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */,
-				F3249B1C285A85FF00DB9B5C /* SDL_memset.c */,
 				A7D8A8D723E2514000DCD162 /* SDL_qsort.c */,
 				A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */,
 				A7D8A8D523E2514000DCD162 /* SDL_string.c */,
@@ -7711,7 +7689,6 @@
 				A75FCE5023E25AB700529352 /* SDL_syspower.m in Sources */,
 				A75FCE5123E25AB700529352 /* e_log10.c in Sources */,
 				A75FCE5223E25AB700529352 /* SDL_uikitopenglview.m in Sources */,
-				F3249B2E285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
 				A75FCE5323E25AB700529352 /* SDL_mixer.c in Sources */,
 				5616CA64252BB35F005D5928 /* SDL_url.c in Sources */,
 				A75FCE5423E25AB700529352 /* SDL_events.c in Sources */,
@@ -7767,7 +7744,6 @@
 				F3F07D61269640160074468B /* SDL_hidapi_luna.c in Sources */,
 				A75FCE8923E25AB700529352 /* SDL_rwopsbundlesupport.m in Sources */,
 				A75FCE8A23E25AB700529352 /* SDL_video.c in Sources */,
-				F3249B25285A85FF00DB9B5C /* SDL_memset.c in Sources */,
 				A75FCE8B23E25AB700529352 /* SDL_offscreenopengl.c in Sources */,
 				A75FCE8C23E25AB700529352 /* SDL_uikitmetalview.m in Sources */,
 				A75FCE8D23E25AB700529352 /* SDL_steamcontroller.c in Sources */,
@@ -7905,7 +7881,6 @@
 				A75FD00923E25AC700529352 /* SDL_syspower.m in Sources */,
 				A75FD00A23E25AC700529352 /* e_log10.c in Sources */,
 				A75FD00B23E25AC700529352 /* SDL_uikitopenglview.m in Sources */,
-				F3249B2F285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
 				A75FD00C23E25AC700529352 /* SDL_mixer.c in Sources */,
 				5616CA67252BB361005D5928 /* SDL_url.c in Sources */,
 				A75FD00D23E25AC700529352 /* SDL_events.c in Sources */,
@@ -7961,7 +7936,6 @@
 				F3F07D62269640160074468B /* SDL_hidapi_luna.c in Sources */,
 				A75FD04223E25AC700529352 /* SDL_rwopsbundlesupport.m in Sources */,
 				A75FD04323E25AC700529352 /* SDL_video.c in Sources */,
-				F3249B26285A85FF00DB9B5C /* SDL_memset.c in Sources */,
 				A75FD04423E25AC700529352 /* SDL_offscreenopengl.c in Sources */,
 				A75FD04523E25AC700529352 /* SDL_uikitmetalview.m in Sources */,
 				A75FD04623E25AC700529352 /* SDL_steamcontroller.c in Sources */,
@@ -8089,7 +8063,6 @@
 				A769B1D523E259AE00872273 /* SDL_render.c in Sources */,
 				A769B1D623E259AE00872273 /* SDL_stretch.c in Sources */,
 				A769B1D723E259AE00872273 /* s_floor.c in Sources */,
-				F3249B23285A85FF00DB9B5C /* SDL_memset.c in Sources */,
 				A769B1D823E259AE00872273 /* SDL_blit_copy.c in Sources */,
 				A769B1D923E259AE00872273 /* e_fmod.c in Sources */,
 				A769B1DA23E259AE00872273 /* SDL_syspower.m in Sources */,
@@ -8152,7 +8125,6 @@
 				A769B21123E259AE00872273 /* SDL_quit.c in Sources */,
 				A769B21223E259AE00872273 /* SDL_cocoawindow.m in Sources */,
 				A769B21323E259AE00872273 /* SDL_sysmutex.c in Sources */,
-				F3249B2C285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
 				A769B21423E259AE00872273 /* SDL_syshaptic.c in Sources */,
 				A769B21523E259AE00872273 /* SDL_rwopsbundlesupport.m in Sources */,
 				A769B21623E259AE00872273 /* SDL_video.c in Sources */,
@@ -8294,7 +8266,6 @@
 				A7D8AC7023E2514100DCD162 /* SDL_uikitopenglview.m in Sources */,
 				A7D8B76523E2514300DCD162 /* SDL_mixer.c in Sources */,
 				A7D8BB5823E2514500DCD162 /* SDL_events.c in Sources */,
-				F3249B28285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
 				A7D8ADE723E2514100DCD162 /* SDL_blit_0.c in Sources */,
 				A7D8BB0A23E2514500DCD162 /* k_tan.c in Sources */,
 				A75FDBCF23EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
@@ -8350,7 +8321,6 @@
 				F3F07D5B269640160074468B /* SDL_hidapi_luna.c in Sources */,
 				A7D8AB5623E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
 				A7D8ACC423E2514100DCD162 /* SDL_uikitmetalview.m in Sources */,
-				F3249B1F285A85FF00DB9B5C /* SDL_memset.c in Sources */,
 				A7D8BA5C23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
 				A7D8B14123E2514200DCD162 /* SDL_blit_1.c in Sources */,
 				5605720F2473688000B46B66 /* SDL_locale.c in Sources */,
@@ -8488,7 +8458,6 @@
 				A7D8AC7123E2514100DCD162 /* SDL_uikitopenglview.m in Sources */,
 				A7D8B76623E2514300DCD162 /* SDL_mixer.c in Sources */,
 				A7D8BB5923E2514500DCD162 /* SDL_events.c in Sources */,
-				F3249B29285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
 				A7D8ADE823E2514100DCD162 /* SDL_blit_0.c in Sources */,
 				A7D8BB0B23E2514500DCD162 /* k_tan.c in Sources */,
 				A75FDBD023EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
@@ -8544,7 +8513,6 @@
 				F3F07D5C269640160074468B /* SDL_hidapi_luna.c in Sources */,
 				A7D8AB5723E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
 				A7D8ACC523E2514100DCD162 /* SDL_uikitmetalview.m in Sources */,
-				F3249B20285A85FF00DB9B5C /* SDL_memset.c in Sources */,
 				A7D8BA5D23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
 				A7D8B14223E2514200DCD162 /* SDL_blit_1.c in Sources */,
 				560572102473688000B46B66 /* SDL_locale.c in Sources */,
@@ -8672,7 +8640,6 @@
 				A7D8B97E23E2514400DCD162 /* SDL_render.c in Sources */,
 				A7D8ABD723E2514100DCD162 /* SDL_stretch.c in Sources */,
 				A7D8BB0123E2514500DCD162 /* s_floor.c in Sources */,
-				F3249B22285A85FF00DB9B5C /* SDL_memset.c in Sources */,
 				A7D8AC3D23E2514100DCD162 /* SDL_blit_copy.c in Sources */,
 				A7D8BAE323E2514500DCD162 /* e_fmod.c in Sources */,
 				A7D8B5D323E2514300DCD162 /* SDL_syspower.m in Sources */,
@@ -8735,7 +8702,6 @@
 				A7D8BB8523E2514500DCD162 /* SDL_quit.c in Sources */,
 				A7D8AEAA23E2514100DCD162 /* SDL_cocoawindow.m in Sources */,
 				A7D8B43E23E2514300DCD162 /* SDL_sysmutex.c in Sources */,
-				F3249B2B285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
 				A7D8AAB423E2514100DCD162 /* SDL_syshaptic.c in Sources */,
 				A7D8B5CD23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */,
 				A7D8AC1323E2514100DCD162 /* SDL_video.c in Sources */,
@@ -8831,7 +8797,6 @@
 				F3984CD025BCC92900374F43 /* SDL_hidapi_stadia.c in Sources */,
 				A7D8AAB623E2514100DCD162 /* SDL_haptic.c in Sources */,
 				A7D8AF2423E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
-				F3249B1E285A85FF00DB9B5C /* SDL_memset.c in Sources */,
 				A7D8B86023E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
 				A7D8BBC523E2561500DCD162 /* SDL_steamcontroller.c in Sources */,
 				A7D8AD3223E2514100DCD162 /* SDL_blit_N.c in Sources */,
@@ -8902,7 +8867,6 @@
 				A7D8B4DC23E2514300DCD162 /* SDL_joystick.c in Sources */,
 				A7D8BA4923E2514400DCD162 /* SDL_render_gles2.c in Sources */,
 				A7D8AC2D23E2514100DCD162 /* SDL_surface.c in Sources */,
-				F3249B27285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
 				A7D8B54B23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
 				A7D8AD2323E2514100DCD162 /* SDL_blit_auto.c in Sources */,
 				F3A4909E2554D38600E92A8B /* SDL_hidapi_ps5.c in Sources */,
@@ -9023,7 +8987,6 @@
 				A7D8AF2723E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
 				A7D8B86323E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
 				A7D8AD3523E2514100DCD162 /* SDL_blit_N.c in Sources */,
-				F3249B21285A85FF00DB9B5C /* SDL_memset.c in Sources */,
 				A7D8BB7E23E2514500DCD162 /* SDL_dropevents.c in Sources */,
 				A7D8BBFA23E2574800DCD162 /* SDL_uikitopengles.m in Sources */,
 				A7D8BAD023E2514500DCD162 /* e_atan2.c in Sources */,
@@ -9094,7 +9057,6 @@
 				A7D8BA4C23E2514400DCD162 /* SDL_render_gles2.c in Sources */,
 				A7D8AC3023E2514100DCD162 /* SDL_surface.c in Sources */,
 				A7D8B54E23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
-				F3249B2A285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
 				A7D8AD2623E2514100DCD162 /* SDL_blit_auto.c in Sources */,
 				A7D8BB6C23E2514500DCD162 /* SDL_keyboard.c in Sources */,
 				A7D8ACEA23E2514100DCD162 /* SDL_rect.c in Sources */,
@@ -9215,7 +9177,6 @@
 				A7D8AF2923E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
 				A7D8B86523E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
 				A7D8AC5C23E2514100DCD162 /* SDL_uikitevents.m in Sources */,
-				F3249B24285A85FF00DB9B5C /* SDL_memset.c in Sources */,
 				A7D8ACBC23E2514100DCD162 /* SDL_uikitmodes.m in Sources */,
 				A7D8AD3723E2514100DCD162 /* SDL_blit_N.c in Sources */,
 				A7D8BB8023E2514500DCD162 /* SDL_dropevents.c in Sources */,
@@ -9286,7 +9247,6 @@
 				A7D8B4E123E2514300DCD162 /* SDL_joystick.c in Sources */,
 				A7D8BA4E23E2514400DCD162 /* SDL_render_gles2.c in Sources */,
 				A7D8AC3223E2514100DCD162 /* SDL_surface.c in Sources */,
-				F3249B2D285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
 				A7D8B55023E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
 				A7D8AD2823E2514100DCD162 /* SDL_blit_auto.c in Sources */,
 				A7D8BB6E23E2514500DCD162 /* SDL_keyboard.c in Sources */,

+ 0 - 79
src/stdlib/SDL_memcpy.c

@@ -1,79 +0,0 @@
-/*
-  Simple DirectMedia Layer
-  Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "../SDL_internal.h"
-
-/* This file contains a portable memcpy manipulation function for SDL */
-
-void *
-SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len)
-{
-#ifdef __GNUC__
-    /* Presumably this is well tuned for speed.
-       On my machine this is twice as fast as the C code below.
-     */
-    return __builtin_memcpy(dst, src, len);
-#elif defined(HAVE_MEMCPY)
-    return memcpy(dst, src, len);
-#elif defined(HAVE_BCOPY)
-    bcopy(src, dst, len);
-    return dst;
-#else
-    /* GCC 4.9.0 with -O3 will generate movaps instructions with the loop
-       using Uint32* pointers, so we need to make sure the pointers are
-       aligned before we loop using them.
-     */
-    if (((uintptr_t)src & 0x3) || ((uintptr_t)dst & 0x3)) {
-        /* Do an unaligned byte copy */
-        Uint8 *srcp1 = (Uint8 *)src;
-        Uint8 *dstp1 = (Uint8 *)dst;
-
-        while (len--) {
-            *dstp1++ = *srcp1++;
-        }
-    } else {
-        size_t left = (len % 4);
-        Uint32 *srcp4, *dstp4;
-        Uint8 *srcp1, *dstp1;
-
-        srcp4 = (Uint32 *) src;
-        dstp4 = (Uint32 *) dst;
-        len /= 4;
-        while (len--) {
-            *dstp4++ = *srcp4++;
-        }
-
-        srcp1 = (Uint8 *) srcp4;
-        dstp1 = (Uint8 *) dstp4;
-        switch (left) {
-            case 3:
-                *dstp1++ = *srcp1++;
-            case 2:
-                *dstp1++ = *srcp1++;
-            case 1:
-                *dstp1++ = *srcp1++;
-        }
-    }
-    return dst;
-#endif /* __GNUC__ */
-}
-
-/* vi: set ts=4 sw=4 expandtab: */

+ 0 - 75
src/stdlib/SDL_memset.c

@@ -1,75 +0,0 @@
-/*
-  Simple DirectMedia Layer
-  Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "../SDL_internal.h"
-
-/* This file contains a portable memset manipulation function for SDL */
-
-void *
-SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len)
-{
-#if defined(HAVE_MEMSET)
-    return memset(dst, c, len);
-#else
-    size_t left;
-    Uint32 *dstp4;
-    Uint8 *dstp1 = (Uint8 *) dst;
-    Uint8 value1;
-    Uint32 value4;
-
-    /* The value used in memset() is a byte, passed as an int */
-    c &= 0xff;
-
-    /* The destination pointer needs to be aligned on a 4-byte boundary to
-     * execute a 32-bit set. Set first bytes manually if needed until it is
-     * aligned. */
-    value1 = (Uint8)c;
-    while ((uintptr_t)dstp1 & 0x3) {
-        if (len--) {
-            *dstp1++ = value1;
-        } else {
-            return dst;
-        }
-    }
-
-    value4 = ((Uint32)c | ((Uint32)c << 8) | ((Uint32)c << 16) | ((Uint32)c << 24));
-    dstp4 = (Uint32 *) dstp1;
-    left = (len % 4);
-    len /= 4;
-    while (len--) {
-        *dstp4++ = value4;
-    }
-
-    dstp1 = (Uint8 *) dstp4;
-    switch (left) {
-        case 3:
-            *dstp1++ = value1;
-        case 2:
-            *dstp1++ = value1;
-        case 1:
-            *dstp1++ = value1;
-    }
-
-    return dst;
-#endif /* HAVE_MEMSET */
-}
-
-/* vi: set ts=4 sw=4 expandtab: */

+ 717 - 0
src/stdlib/SDL_mslibc.c

@@ -0,0 +1,717 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+
+#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS)
+#define SDL_DISABLE_ANALYZE_MACROS 1
+#endif
+
+#include "../SDL_internal.h"
+
+/* This file contains SDL replacements for functions in the C library */
+
+#ifndef HAVE_LIBC
+/* These are some C runtime intrinsics that need to be defined */
+
+#if defined(_MSC_VER)
+
+#ifndef __FLTUSED__
+#define __FLTUSED__
+__declspec(selectany) int _fltused = 1;
+#endif
+
+/* The optimizer on Visual Studio 2005 and later generates memcpy() and memset() calls.
+   Always provide it for the SDL2 DLL, but skip it when building static lib w/ static runtime. */
+#if (_MSC_VER >= 1400) && (!defined(_MT) || defined(DLL_EXPORT))
+extern void *memcpy(void* dst, const void* src, size_t len);
+#pragma intrinsic(memcpy)
+
+#pragma function(memcpy)
+void *
+memcpy(void *dst, const void *src, size_t len)
+{
+    return SDL_memcpy(dst, src, len);
+}
+
+extern void *memset(void* dst, int c, size_t len);
+#pragma intrinsic(memset)
+
+#pragma function(memset)
+void *
+memset(void *dst, int c, size_t len)
+{
+    return SDL_memset(dst, c, len);
+}
+#endif /* (_MSC_VER >= 1400) && (!defined(_MT) || defined(DLL_EXPORT)) */
+
+#ifdef _M_IX86
+
+/* Float to long */
+void
+__declspec(naked)
+_ftol()
+{
+    /* *INDENT-OFF* */
+    __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
+    }
+    /* *INDENT-ON* */
+}
+
+void
+_ftol2_sse()
+{
+    _ftol();
+}
+
+/* 64-bit math operators for 32-bit systems */
+void
+__declspec(naked)
+_allmul()
+{
+    /* *INDENT-OFF* */
+    __asm {
+        mov         eax, dword ptr[esp+8]
+        mov         ecx, dword ptr[esp+10h]
+        or          ecx, eax
+        mov         ecx, dword ptr[esp+0Ch]
+        jne         hard
+        mov         eax, dword ptr[esp+4]
+        mul         ecx
+        ret         10h
+hard:
+        push        ebx
+        mul         ecx
+        mov         ebx, eax
+        mov         eax, dword ptr[esp+8]
+        mul         dword ptr[esp+14h]
+        add         ebx, eax
+        mov         eax, dword ptr[esp+8]
+        mul         ecx
+        add         edx, ebx
+        pop         ebx
+        ret         10h
+    }
+    /* *INDENT-ON* */
+}
+
+void
+__declspec(naked)
+_alldiv()
+{
+    /* *INDENT-OFF* */
+    __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
+    }
+    /* *INDENT-ON* */
+}
+
+void
+__declspec(naked)
+_aulldiv()
+{
+    /* *INDENT-OFF* */
+    __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
+    }
+    /* *INDENT-ON* */
+}
+
+void
+__declspec(naked)
+_allrem()
+{
+    /* *INDENT-OFF* */
+    __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
+    }
+    /* *INDENT-ON* */
+}
+
+void
+__declspec(naked)
+_aullrem()
+{
+    /* *INDENT-OFF* */
+    __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
+    }
+    /* *INDENT-ON* */
+}
+
+void
+__declspec(naked)
+_alldvrm()
+{
+    /* *INDENT-OFF* */
+    __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
+    }
+    /* *INDENT-ON* */
+}
+
+void
+__declspec(naked)
+_aulldvrm()
+{
+    /* *INDENT-OFF* */
+    __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
+    }
+    /* *INDENT-ON* */
+}
+
+void
+__declspec(naked)
+_allshl()
+{
+    /* *INDENT-OFF* */
+    __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
+    }
+    /* *INDENT-ON* */
+}
+
+void
+__declspec(naked)
+_allshr()
+{
+    /* *INDENT-OFF* */
+    __asm {
+        cmp         cl,3Fh
+        jae         RETSIGN
+        cmp         cl,20h
+        jae         MORE32
+        shrd        eax,edx,cl
+        sar         edx,cl
+        ret
+MORE32:
+        mov         eax,edx
+        sar         edx,1Fh
+        and         cl,1Fh
+        sar         eax,cl
+        ret
+RETSIGN:
+        sar         edx,1Fh
+        mov         eax,edx
+        ret
+    }
+    /* *INDENT-ON* */
+}
+
+void
+__declspec(naked)
+_aullshr()
+{
+    /* *INDENT-OFF* */
+    __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
+    }
+    /* *INDENT-ON* */
+}
+
+#endif /* _M_IX86 */
+
+#endif /* MSC_VER */
+
+#endif /* !HAVE_LIBC */
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 95 - 678
src/stdlib/SDL_stdlib.c

@@ -533,697 +533,114 @@ int SDL_toupper(int x) { return ((x) >= 'a') && ((x) <= 'z') ? ('A'+((x)-'a')) :
 int SDL_tolower(int x) { return ((x) >= 'A') && ((x) <= 'Z') ? ('a'+((x)-'A')) : (x); }
 #endif
 
-#if defined(HAVE_CTYPE_H) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-int SDL_isblank(int x) { return isblank(x); }
-#else
-int SDL_isblank(int x) { return ((x) == ' ') || ((x) == '\t'); }
-#endif
-
-#ifndef HAVE_LIBC
-/* These are some C runtime intrinsics that need to be defined */
-
-#if defined(_MSC_VER)
-
-#ifndef __FLTUSED__
-#define __FLTUSED__
-__declspec(selectany) int _fltused = 1;
-#endif
+/* This file contains a portable memcpy manipulation function for SDL */
 
-/* The optimizer on Visual Studio 2005 and later generates memcpy() and memset() calls.
-   Always provide it for the SDL2 DLL, but skip it when building static lib w/ static runtime. */
-#if (_MSC_VER >= 1400) && (!defined(_MT) || defined(DLL_EXPORT))
-extern void *memcpy(void* dst, const void* src, size_t len);
-#pragma intrinsic(memcpy)
-
-#pragma function(memcpy)
-void *
-memcpy(void *dst, const void *src, size_t len)
-{
-    return SDL_memcpy(dst, src, len);
-}
-
-extern void *memset(void* dst, int c, size_t len);
-#pragma intrinsic(memset)
-
-#pragma function(memset)
 void *
-memset(void *dst, int c, size_t len)
-{
-    return SDL_memset(dst, c, len);
-}
-#endif /* (_MSC_VER >= 1400) && (!defined(_MT) || defined(DLL_EXPORT)) */
-
-#ifdef _M_IX86
-
-/* Float to long */
-void
-__declspec(naked)
-_ftol()
-{
-    /* *INDENT-OFF* */
-    __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
-    }
-    /* *INDENT-ON* */
-}
-
-void
-_ftol2_sse()
-{
-    _ftol();
-}
-
-/* 64-bit math operators for 32-bit systems */
-void
-__declspec(naked)
-_allmul()
-{
-    /* *INDENT-OFF* */
-    __asm {
-        mov         eax, dword ptr[esp+8]
-        mov         ecx, dword ptr[esp+10h]
-        or          ecx, eax
-        mov         ecx, dword ptr[esp+0Ch]
-        jne         hard
-        mov         eax, dword ptr[esp+4]
-        mul         ecx
-        ret         10h
-hard:
-        push        ebx
-        mul         ecx
-        mov         ebx, eax
-        mov         eax, dword ptr[esp+8]
-        mul         dword ptr[esp+14h]
-        add         ebx, eax
-        mov         eax, dword ptr[esp+8]
-        mul         ecx
-        add         edx, ebx
-        pop         ebx
-        ret         10h
-    }
-    /* *INDENT-ON* */
-}
-
-void
-__declspec(naked)
-_alldiv()
-{
-    /* *INDENT-OFF* */
-    __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
-    }
-    /* *INDENT-ON* */
-}
-
-void
-__declspec(naked)
-_aulldiv()
-{
-    /* *INDENT-OFF* */
-    __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
-    }
-    /* *INDENT-ON* */
-}
-
-void
-__declspec(naked)
-_allrem()
-{
-    /* *INDENT-OFF* */
-    __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
-    }
-    /* *INDENT-ON* */
-}
-
-void
-__declspec(naked)
-_aullrem()
-{
-    /* *INDENT-OFF* */
-    __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
-    }
-    /* *INDENT-ON* */
-}
+SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len)
+{
+#ifdef __GNUC__
+    /* Presumably this is well tuned for speed.
+       On my machine this is twice as fast as the C code below.
+     */
+    return __builtin_memcpy(dst, src, len);
+#elif defined(HAVE_MEMCPY)
+    return memcpy(dst, src, len);
+#elif defined(HAVE_BCOPY)
+    bcopy(src, dst, len);
+    return dst;
+#else
+    /* GCC 4.9.0 with -O3 will generate movaps instructions with the loop
+       using Uint32* pointers, so we need to make sure the pointers are
+       aligned before we loop using them.
+     */
+    if (((uintptr_t)src & 0x3) || ((uintptr_t)dst & 0x3)) {
+        /* Do an unaligned byte copy */
+        Uint8 *srcp1 = (Uint8 *)src;
+        Uint8 *dstp1 = (Uint8 *)dst;
+
+        while (len--) {
+            *dstp1++ = *srcp1++;
+        }
+    } else {
+        size_t left = (len % 4);
+        Uint32 *srcp4, *dstp4;
+        Uint8 *srcp1, *dstp1;
+
+        srcp4 = (Uint32 *) src;
+        dstp4 = (Uint32 *) dst;
+        len /= 4;
+        while (len--) {
+            *dstp4++ = *srcp4++;
+        }
 
-void
-__declspec(naked)
-_alldvrm()
-{
-    /* *INDENT-OFF* */
-    __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
+        srcp1 = (Uint8 *) srcp4;
+        dstp1 = (Uint8 *) dstp4;
+        switch (left) {
+        case 3:
+            *dstp1++ = *srcp1++;
+        case 2:
+            *dstp1++ = *srcp1++;
+        case 1:
+            *dstp1++ = *srcp1++;
+        }
     }
-    /* *INDENT-ON* */
+    return dst;
+#endif /* __GNUC__ */
 }
 
-void
-__declspec(naked)
-_aulldvrm()
-{
-    /* *INDENT-OFF* */
-    __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 *
+SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len)
+{
+#if defined(HAVE_MEMSET)
+    return memset(dst, c, len);
+#else
+    size_t left;
+    Uint32 *dstp4;
+    Uint8 *dstp1 = (Uint8 *) dst;
+    Uint8 value1;
+    Uint32 value4;
+
+    /* The value used in memset() is a byte, passed as an int */
+    c &= 0xff;
+
+    /* The destination pointer needs to be aligned on a 4-byte boundary to
+     * execute a 32-bit set. Set first bytes manually if needed until it is
+     * aligned. */
+    value1 = (Uint8)c;
+    while ((uintptr_t)dstp1 & 0x3) {
+        if (len--) {
+            *dstp1++ = value1;
+        } else {
+            return dst;
+        }
     }
-    /* *INDENT-ON* */
-}
 
-void
-__declspec(naked)
-_allshl()
-{
-    /* *INDENT-OFF* */
-    __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
+    value4 = ((Uint32)c | ((Uint32)c << 8) | ((Uint32)c << 16) | ((Uint32)c << 24));
+    dstp4 = (Uint32 *) dstp1;
+    left = (len % 4);
+    len /= 4;
+    while (len--) {
+        *dstp4++ = value4;
     }
-    /* *INDENT-ON* */
-}
 
-void
-__declspec(naked)
-_allshr()
-{
-    /* *INDENT-OFF* */
-    __asm {
-        cmp         cl,3Fh
-        jae         RETSIGN
-        cmp         cl,20h
-        jae         MORE32
-        shrd        eax,edx,cl
-        sar         edx,cl
-        ret
-MORE32:
-        mov         eax,edx
-        sar         edx,1Fh
-        and         cl,1Fh
-        sar         eax,cl
-        ret
-RETSIGN:
-        sar         edx,1Fh
-        mov         eax,edx
-        ret
+    dstp1 = (Uint8 *) dstp4;
+    switch (left) {
+    case 3:
+        *dstp1++ = value1;
+    case 2:
+        *dstp1++ = value1;
+    case 1:
+        *dstp1++ = value1;
     }
-    /* *INDENT-ON* */
-}
 
-void
-__declspec(naked)
-_aullshr()
-{
-    /* *INDENT-OFF* */
-    __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
-    }
-    /* *INDENT-ON* */
+    return dst;
+#endif /* HAVE_MEMSET */
 }
 
-#endif /* _M_IX86 */
-
-#endif /* MSC_VER */
-
-#endif /* !HAVE_LIBC */
+#if defined(HAVE_CTYPE_H) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+int SDL_isblank(int x) { return isblank(x); }
+#else
+int SDL_isblank(int x) { return ((x) == ' ') || ((x) == '\t'); }
+#endif
 
 /* vi: set ts=4 sw=4 expandtab: */