stdlib: move all mslibc functions to SDL_mslibc.c
This allows disabling LTO on them by only specifying a single file.main
parent
a169259f62
commit
5da85376b9
|
@ -678,7 +678,8 @@ endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
# Due to a limitation of Microsoft's LTO implementation, LTO must be disabled for memcpy and memset.
|
# 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()
|
endif()
|
||||||
|
|
||||||
if(SDL_ASSEMBLY)
|
if(SDL_ASSEMBLY)
|
||||||
|
|
|
@ -68,7 +68,7 @@ CFLAGS_DLL+= -DSDL_BUILD_MINOR_VERSION=$(MINOR_VERSION)
|
||||||
CFLAGS_DLL+= -DSDL_BUILD_MICRO_VERSION=$(MICRO_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.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_cpuinfo.c SDL_atomic.c SDL_spinlock.c SDL_thread.c SDL_timer.c
|
||||||
SRCS+= SDL_rwops.c SDL_power.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
|
SRCS+= SDL_audio.c SDL_audiocvt.c SDL_audiodev.c SDL_audiotypecvt.c SDL_mixer.c SDL_wave.c
|
||||||
|
|
|
@ -44,7 +44,7 @@ CFLAGS_DLL+= -DSDL_BUILD_MICRO_VERSION=$(MICRO_VERSION)
|
||||||
RCFLAGS = -q -r -bt=nt $(INCPATH)
|
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.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_cpuinfo.c SDL_atomic.c SDL_spinlock.c SDL_thread.c SDL_timer.c
|
||||||
SRCS+= SDL_rwops.c SDL_power.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
|
SRCS+= SDL_audio.c SDL_audiocvt.c SDL_audiodev.c SDL_audiotypecvt.c SDL_mixer.c SDL_wave.c
|
||||||
|
|
|
@ -697,8 +697,7 @@
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_getenv.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_getenv.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_iconv.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_iconv.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_malloc.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_malloc.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_memcpy.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_mslibc.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_memset.c" />
|
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_stdlib.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_stdlib.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_string.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_string.c" />
|
||||||
|
|
|
@ -1352,10 +1352,7 @@
|
||||||
<ClCompile Include="..\..\src\render\direct3d12\SDL_shaders_d3d12.c">
|
<ClCompile Include="..\..\src\render\direct3d12\SDL_shaders_d3d12.c">
|
||||||
<Filter>render\direct3d12</Filter>
|
<Filter>render\direct3d12</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_memcpy.c">
|
<ClCompile Include="..\..\src\stdlib\SDL_mslibc.c">
|
||||||
<Filter>stdlib</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_memset.c">
|
|
||||||
<Filter>stdlib</Filter>
|
<Filter>stdlib</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\core\gdk\SDL_gdk.cpp">
|
<ClCompile Include="..\..\src\core\gdk\SDL_gdk.cpp">
|
||||||
|
|
|
@ -311,8 +311,7 @@
|
||||||
<ClCompile Include="..\src\stdlib\SDL_getenv.c" />
|
<ClCompile Include="..\src\stdlib\SDL_getenv.c" />
|
||||||
<ClCompile Include="..\src\stdlib\SDL_iconv.c" />
|
<ClCompile Include="..\src\stdlib\SDL_iconv.c" />
|
||||||
<ClCompile Include="..\src\stdlib\SDL_malloc.c" />
|
<ClCompile Include="..\src\stdlib\SDL_malloc.c" />
|
||||||
<ClCompile Include="..\src\stdlib\SDL_memcpy.c" />
|
<ClCompile Include="..\src\stdlib\SDL_mslibc.c" />
|
||||||
<ClCompile Include="..\src\stdlib\SDL_memset.c" />
|
|
||||||
<ClCompile Include="..\src\stdlib\SDL_qsort.c" />
|
<ClCompile Include="..\src\stdlib\SDL_qsort.c" />
|
||||||
<ClCompile Include="..\src\stdlib\SDL_stdlib.c" />
|
<ClCompile Include="..\src\stdlib\SDL_stdlib.c" />
|
||||||
<ClCompile Include="..\src\stdlib\SDL_string.c" />
|
<ClCompile Include="..\src\stdlib\SDL_string.c" />
|
||||||
|
|
|
@ -565,8 +565,7 @@
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_getenv.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_getenv.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_iconv.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_iconv.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_malloc.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_malloc.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_memcpy.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_mslibc.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_memset.c" />
|
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_stdlib.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_stdlib.c" />
|
||||||
<ClCompile Include="..\..\src\stdlib\SDL_string.c" />
|
<ClCompile Include="..\..\src\stdlib\SDL_string.c" />
|
||||||
|
|
|
@ -3382,24 +3382,6 @@
|
||||||
DB31407017554B71006C0E22 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; };
|
DB31407017554B71006C0E22 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; };
|
||||||
DB31407217554B71006C0E22 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317C10858E15000B2BC32 /* Carbon.framework */; };
|
DB31407217554B71006C0E22 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317C10858E15000B2BC32 /* Carbon.framework */; };
|
||||||
DB31408D17554D3C006C0E22 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00CFA89C106B4BA100758660 /* ForceFeedback.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, ); }; };
|
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, ); }; };
|
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; };
|
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; };
|
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; };
|
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; };
|
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; };
|
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; };
|
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; };
|
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 */,
|
A7D8A8D423E2514000DCD162 /* SDL_getenv.c */,
|
||||||
A7D8A8D323E2514000DCD162 /* SDL_iconv.c */,
|
A7D8A8D323E2514000DCD162 /* SDL_iconv.c */,
|
||||||
A7D8A8D923E2514000DCD162 /* SDL_malloc.c */,
|
A7D8A8D923E2514000DCD162 /* SDL_malloc.c */,
|
||||||
F3249B1D285A85FF00DB9B5C /* SDL_memcpy.c */,
|
|
||||||
F3249B1C285A85FF00DB9B5C /* SDL_memset.c */,
|
|
||||||
A7D8A8D723E2514000DCD162 /* SDL_qsort.c */,
|
A7D8A8D723E2514000DCD162 /* SDL_qsort.c */,
|
||||||
A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */,
|
A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */,
|
||||||
A7D8A8D523E2514000DCD162 /* SDL_string.c */,
|
A7D8A8D523E2514000DCD162 /* SDL_string.c */,
|
||||||
|
@ -7711,7 +7689,6 @@
|
||||||
A75FCE5023E25AB700529352 /* SDL_syspower.m in Sources */,
|
A75FCE5023E25AB700529352 /* SDL_syspower.m in Sources */,
|
||||||
A75FCE5123E25AB700529352 /* e_log10.c in Sources */,
|
A75FCE5123E25AB700529352 /* e_log10.c in Sources */,
|
||||||
A75FCE5223E25AB700529352 /* SDL_uikitopenglview.m in Sources */,
|
A75FCE5223E25AB700529352 /* SDL_uikitopenglview.m in Sources */,
|
||||||
F3249B2E285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
|
|
||||||
A75FCE5323E25AB700529352 /* SDL_mixer.c in Sources */,
|
A75FCE5323E25AB700529352 /* SDL_mixer.c in Sources */,
|
||||||
5616CA64252BB35F005D5928 /* SDL_url.c in Sources */,
|
5616CA64252BB35F005D5928 /* SDL_url.c in Sources */,
|
||||||
A75FCE5423E25AB700529352 /* SDL_events.c in Sources */,
|
A75FCE5423E25AB700529352 /* SDL_events.c in Sources */,
|
||||||
|
@ -7767,7 +7744,6 @@
|
||||||
F3F07D61269640160074468B /* SDL_hidapi_luna.c in Sources */,
|
F3F07D61269640160074468B /* SDL_hidapi_luna.c in Sources */,
|
||||||
A75FCE8923E25AB700529352 /* SDL_rwopsbundlesupport.m in Sources */,
|
A75FCE8923E25AB700529352 /* SDL_rwopsbundlesupport.m in Sources */,
|
||||||
A75FCE8A23E25AB700529352 /* SDL_video.c in Sources */,
|
A75FCE8A23E25AB700529352 /* SDL_video.c in Sources */,
|
||||||
F3249B25285A85FF00DB9B5C /* SDL_memset.c in Sources */,
|
|
||||||
A75FCE8B23E25AB700529352 /* SDL_offscreenopengl.c in Sources */,
|
A75FCE8B23E25AB700529352 /* SDL_offscreenopengl.c in Sources */,
|
||||||
A75FCE8C23E25AB700529352 /* SDL_uikitmetalview.m in Sources */,
|
A75FCE8C23E25AB700529352 /* SDL_uikitmetalview.m in Sources */,
|
||||||
A75FCE8D23E25AB700529352 /* SDL_steamcontroller.c in Sources */,
|
A75FCE8D23E25AB700529352 /* SDL_steamcontroller.c in Sources */,
|
||||||
|
@ -7905,7 +7881,6 @@
|
||||||
A75FD00923E25AC700529352 /* SDL_syspower.m in Sources */,
|
A75FD00923E25AC700529352 /* SDL_syspower.m in Sources */,
|
||||||
A75FD00A23E25AC700529352 /* e_log10.c in Sources */,
|
A75FD00A23E25AC700529352 /* e_log10.c in Sources */,
|
||||||
A75FD00B23E25AC700529352 /* SDL_uikitopenglview.m in Sources */,
|
A75FD00B23E25AC700529352 /* SDL_uikitopenglview.m in Sources */,
|
||||||
F3249B2F285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
|
|
||||||
A75FD00C23E25AC700529352 /* SDL_mixer.c in Sources */,
|
A75FD00C23E25AC700529352 /* SDL_mixer.c in Sources */,
|
||||||
5616CA67252BB361005D5928 /* SDL_url.c in Sources */,
|
5616CA67252BB361005D5928 /* SDL_url.c in Sources */,
|
||||||
A75FD00D23E25AC700529352 /* SDL_events.c in Sources */,
|
A75FD00D23E25AC700529352 /* SDL_events.c in Sources */,
|
||||||
|
@ -7961,7 +7936,6 @@
|
||||||
F3F07D62269640160074468B /* SDL_hidapi_luna.c in Sources */,
|
F3F07D62269640160074468B /* SDL_hidapi_luna.c in Sources */,
|
||||||
A75FD04223E25AC700529352 /* SDL_rwopsbundlesupport.m in Sources */,
|
A75FD04223E25AC700529352 /* SDL_rwopsbundlesupport.m in Sources */,
|
||||||
A75FD04323E25AC700529352 /* SDL_video.c in Sources */,
|
A75FD04323E25AC700529352 /* SDL_video.c in Sources */,
|
||||||
F3249B26285A85FF00DB9B5C /* SDL_memset.c in Sources */,
|
|
||||||
A75FD04423E25AC700529352 /* SDL_offscreenopengl.c in Sources */,
|
A75FD04423E25AC700529352 /* SDL_offscreenopengl.c in Sources */,
|
||||||
A75FD04523E25AC700529352 /* SDL_uikitmetalview.m in Sources */,
|
A75FD04523E25AC700529352 /* SDL_uikitmetalview.m in Sources */,
|
||||||
A75FD04623E25AC700529352 /* SDL_steamcontroller.c in Sources */,
|
A75FD04623E25AC700529352 /* SDL_steamcontroller.c in Sources */,
|
||||||
|
@ -8089,7 +8063,6 @@
|
||||||
A769B1D523E259AE00872273 /* SDL_render.c in Sources */,
|
A769B1D523E259AE00872273 /* SDL_render.c in Sources */,
|
||||||
A769B1D623E259AE00872273 /* SDL_stretch.c in Sources */,
|
A769B1D623E259AE00872273 /* SDL_stretch.c in Sources */,
|
||||||
A769B1D723E259AE00872273 /* s_floor.c in Sources */,
|
A769B1D723E259AE00872273 /* s_floor.c in Sources */,
|
||||||
F3249B23285A85FF00DB9B5C /* SDL_memset.c in Sources */,
|
|
||||||
A769B1D823E259AE00872273 /* SDL_blit_copy.c in Sources */,
|
A769B1D823E259AE00872273 /* SDL_blit_copy.c in Sources */,
|
||||||
A769B1D923E259AE00872273 /* e_fmod.c in Sources */,
|
A769B1D923E259AE00872273 /* e_fmod.c in Sources */,
|
||||||
A769B1DA23E259AE00872273 /* SDL_syspower.m in Sources */,
|
A769B1DA23E259AE00872273 /* SDL_syspower.m in Sources */,
|
||||||
|
@ -8152,7 +8125,6 @@
|
||||||
A769B21123E259AE00872273 /* SDL_quit.c in Sources */,
|
A769B21123E259AE00872273 /* SDL_quit.c in Sources */,
|
||||||
A769B21223E259AE00872273 /* SDL_cocoawindow.m in Sources */,
|
A769B21223E259AE00872273 /* SDL_cocoawindow.m in Sources */,
|
||||||
A769B21323E259AE00872273 /* SDL_sysmutex.c in Sources */,
|
A769B21323E259AE00872273 /* SDL_sysmutex.c in Sources */,
|
||||||
F3249B2C285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
|
|
||||||
A769B21423E259AE00872273 /* SDL_syshaptic.c in Sources */,
|
A769B21423E259AE00872273 /* SDL_syshaptic.c in Sources */,
|
||||||
A769B21523E259AE00872273 /* SDL_rwopsbundlesupport.m in Sources */,
|
A769B21523E259AE00872273 /* SDL_rwopsbundlesupport.m in Sources */,
|
||||||
A769B21623E259AE00872273 /* SDL_video.c in Sources */,
|
A769B21623E259AE00872273 /* SDL_video.c in Sources */,
|
||||||
|
@ -8294,7 +8266,6 @@
|
||||||
A7D8AC7023E2514100DCD162 /* SDL_uikitopenglview.m in Sources */,
|
A7D8AC7023E2514100DCD162 /* SDL_uikitopenglview.m in Sources */,
|
||||||
A7D8B76523E2514300DCD162 /* SDL_mixer.c in Sources */,
|
A7D8B76523E2514300DCD162 /* SDL_mixer.c in Sources */,
|
||||||
A7D8BB5823E2514500DCD162 /* SDL_events.c in Sources */,
|
A7D8BB5823E2514500DCD162 /* SDL_events.c in Sources */,
|
||||||
F3249B28285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
|
|
||||||
A7D8ADE723E2514100DCD162 /* SDL_blit_0.c in Sources */,
|
A7D8ADE723E2514100DCD162 /* SDL_blit_0.c in Sources */,
|
||||||
A7D8BB0A23E2514500DCD162 /* k_tan.c in Sources */,
|
A7D8BB0A23E2514500DCD162 /* k_tan.c in Sources */,
|
||||||
A75FDBCF23EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
|
A75FDBCF23EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
|
||||||
|
@ -8350,7 +8321,6 @@
|
||||||
F3F07D5B269640160074468B /* SDL_hidapi_luna.c in Sources */,
|
F3F07D5B269640160074468B /* SDL_hidapi_luna.c in Sources */,
|
||||||
A7D8AB5623E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
|
A7D8AB5623E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
|
||||||
A7D8ACC423E2514100DCD162 /* SDL_uikitmetalview.m in Sources */,
|
A7D8ACC423E2514100DCD162 /* SDL_uikitmetalview.m in Sources */,
|
||||||
F3249B1F285A85FF00DB9B5C /* SDL_memset.c in Sources */,
|
|
||||||
A7D8BA5C23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
|
A7D8BA5C23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
|
||||||
A7D8B14123E2514200DCD162 /* SDL_blit_1.c in Sources */,
|
A7D8B14123E2514200DCD162 /* SDL_blit_1.c in Sources */,
|
||||||
5605720F2473688000B46B66 /* SDL_locale.c in Sources */,
|
5605720F2473688000B46B66 /* SDL_locale.c in Sources */,
|
||||||
|
@ -8488,7 +8458,6 @@
|
||||||
A7D8AC7123E2514100DCD162 /* SDL_uikitopenglview.m in Sources */,
|
A7D8AC7123E2514100DCD162 /* SDL_uikitopenglview.m in Sources */,
|
||||||
A7D8B76623E2514300DCD162 /* SDL_mixer.c in Sources */,
|
A7D8B76623E2514300DCD162 /* SDL_mixer.c in Sources */,
|
||||||
A7D8BB5923E2514500DCD162 /* SDL_events.c in Sources */,
|
A7D8BB5923E2514500DCD162 /* SDL_events.c in Sources */,
|
||||||
F3249B29285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
|
|
||||||
A7D8ADE823E2514100DCD162 /* SDL_blit_0.c in Sources */,
|
A7D8ADE823E2514100DCD162 /* SDL_blit_0.c in Sources */,
|
||||||
A7D8BB0B23E2514500DCD162 /* k_tan.c in Sources */,
|
A7D8BB0B23E2514500DCD162 /* k_tan.c in Sources */,
|
||||||
A75FDBD023EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
|
A75FDBD023EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
|
||||||
|
@ -8544,7 +8513,6 @@
|
||||||
F3F07D5C269640160074468B /* SDL_hidapi_luna.c in Sources */,
|
F3F07D5C269640160074468B /* SDL_hidapi_luna.c in Sources */,
|
||||||
A7D8AB5723E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
|
A7D8AB5723E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
|
||||||
A7D8ACC523E2514100DCD162 /* SDL_uikitmetalview.m in Sources */,
|
A7D8ACC523E2514100DCD162 /* SDL_uikitmetalview.m in Sources */,
|
||||||
F3249B20285A85FF00DB9B5C /* SDL_memset.c in Sources */,
|
|
||||||
A7D8BA5D23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
|
A7D8BA5D23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
|
||||||
A7D8B14223E2514200DCD162 /* SDL_blit_1.c in Sources */,
|
A7D8B14223E2514200DCD162 /* SDL_blit_1.c in Sources */,
|
||||||
560572102473688000B46B66 /* SDL_locale.c in Sources */,
|
560572102473688000B46B66 /* SDL_locale.c in Sources */,
|
||||||
|
@ -8672,7 +8640,6 @@
|
||||||
A7D8B97E23E2514400DCD162 /* SDL_render.c in Sources */,
|
A7D8B97E23E2514400DCD162 /* SDL_render.c in Sources */,
|
||||||
A7D8ABD723E2514100DCD162 /* SDL_stretch.c in Sources */,
|
A7D8ABD723E2514100DCD162 /* SDL_stretch.c in Sources */,
|
||||||
A7D8BB0123E2514500DCD162 /* s_floor.c in Sources */,
|
A7D8BB0123E2514500DCD162 /* s_floor.c in Sources */,
|
||||||
F3249B22285A85FF00DB9B5C /* SDL_memset.c in Sources */,
|
|
||||||
A7D8AC3D23E2514100DCD162 /* SDL_blit_copy.c in Sources */,
|
A7D8AC3D23E2514100DCD162 /* SDL_blit_copy.c in Sources */,
|
||||||
A7D8BAE323E2514500DCD162 /* e_fmod.c in Sources */,
|
A7D8BAE323E2514500DCD162 /* e_fmod.c in Sources */,
|
||||||
A7D8B5D323E2514300DCD162 /* SDL_syspower.m in Sources */,
|
A7D8B5D323E2514300DCD162 /* SDL_syspower.m in Sources */,
|
||||||
|
@ -8735,7 +8702,6 @@
|
||||||
A7D8BB8523E2514500DCD162 /* SDL_quit.c in Sources */,
|
A7D8BB8523E2514500DCD162 /* SDL_quit.c in Sources */,
|
||||||
A7D8AEAA23E2514100DCD162 /* SDL_cocoawindow.m in Sources */,
|
A7D8AEAA23E2514100DCD162 /* SDL_cocoawindow.m in Sources */,
|
||||||
A7D8B43E23E2514300DCD162 /* SDL_sysmutex.c in Sources */,
|
A7D8B43E23E2514300DCD162 /* SDL_sysmutex.c in Sources */,
|
||||||
F3249B2B285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
|
|
||||||
A7D8AAB423E2514100DCD162 /* SDL_syshaptic.c in Sources */,
|
A7D8AAB423E2514100DCD162 /* SDL_syshaptic.c in Sources */,
|
||||||
A7D8B5CD23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */,
|
A7D8B5CD23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */,
|
||||||
A7D8AC1323E2514100DCD162 /* SDL_video.c in Sources */,
|
A7D8AC1323E2514100DCD162 /* SDL_video.c in Sources */,
|
||||||
|
@ -8831,7 +8797,6 @@
|
||||||
F3984CD025BCC92900374F43 /* SDL_hidapi_stadia.c in Sources */,
|
F3984CD025BCC92900374F43 /* SDL_hidapi_stadia.c in Sources */,
|
||||||
A7D8AAB623E2514100DCD162 /* SDL_haptic.c in Sources */,
|
A7D8AAB623E2514100DCD162 /* SDL_haptic.c in Sources */,
|
||||||
A7D8AF2423E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
|
A7D8AF2423E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
|
||||||
F3249B1E285A85FF00DB9B5C /* SDL_memset.c in Sources */,
|
|
||||||
A7D8B86023E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
|
A7D8B86023E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
|
||||||
A7D8BBC523E2561500DCD162 /* SDL_steamcontroller.c in Sources */,
|
A7D8BBC523E2561500DCD162 /* SDL_steamcontroller.c in Sources */,
|
||||||
A7D8AD3223E2514100DCD162 /* SDL_blit_N.c in Sources */,
|
A7D8AD3223E2514100DCD162 /* SDL_blit_N.c in Sources */,
|
||||||
|
@ -8902,7 +8867,6 @@
|
||||||
A7D8B4DC23E2514300DCD162 /* SDL_joystick.c in Sources */,
|
A7D8B4DC23E2514300DCD162 /* SDL_joystick.c in Sources */,
|
||||||
A7D8BA4923E2514400DCD162 /* SDL_render_gles2.c in Sources */,
|
A7D8BA4923E2514400DCD162 /* SDL_render_gles2.c in Sources */,
|
||||||
A7D8AC2D23E2514100DCD162 /* SDL_surface.c in Sources */,
|
A7D8AC2D23E2514100DCD162 /* SDL_surface.c in Sources */,
|
||||||
F3249B27285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
|
|
||||||
A7D8B54B23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
|
A7D8B54B23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
|
||||||
A7D8AD2323E2514100DCD162 /* SDL_blit_auto.c in Sources */,
|
A7D8AD2323E2514100DCD162 /* SDL_blit_auto.c in Sources */,
|
||||||
F3A4909E2554D38600E92A8B /* SDL_hidapi_ps5.c in Sources */,
|
F3A4909E2554D38600E92A8B /* SDL_hidapi_ps5.c in Sources */,
|
||||||
|
@ -9023,7 +8987,6 @@
|
||||||
A7D8AF2723E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
|
A7D8AF2723E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
|
||||||
A7D8B86323E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
|
A7D8B86323E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
|
||||||
A7D8AD3523E2514100DCD162 /* SDL_blit_N.c in Sources */,
|
A7D8AD3523E2514100DCD162 /* SDL_blit_N.c in Sources */,
|
||||||
F3249B21285A85FF00DB9B5C /* SDL_memset.c in Sources */,
|
|
||||||
A7D8BB7E23E2514500DCD162 /* SDL_dropevents.c in Sources */,
|
A7D8BB7E23E2514500DCD162 /* SDL_dropevents.c in Sources */,
|
||||||
A7D8BBFA23E2574800DCD162 /* SDL_uikitopengles.m in Sources */,
|
A7D8BBFA23E2574800DCD162 /* SDL_uikitopengles.m in Sources */,
|
||||||
A7D8BAD023E2514500DCD162 /* e_atan2.c in Sources */,
|
A7D8BAD023E2514500DCD162 /* e_atan2.c in Sources */,
|
||||||
|
@ -9094,7 +9057,6 @@
|
||||||
A7D8BA4C23E2514400DCD162 /* SDL_render_gles2.c in Sources */,
|
A7D8BA4C23E2514400DCD162 /* SDL_render_gles2.c in Sources */,
|
||||||
A7D8AC3023E2514100DCD162 /* SDL_surface.c in Sources */,
|
A7D8AC3023E2514100DCD162 /* SDL_surface.c in Sources */,
|
||||||
A7D8B54E23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
|
A7D8B54E23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
|
||||||
F3249B2A285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
|
|
||||||
A7D8AD2623E2514100DCD162 /* SDL_blit_auto.c in Sources */,
|
A7D8AD2623E2514100DCD162 /* SDL_blit_auto.c in Sources */,
|
||||||
A7D8BB6C23E2514500DCD162 /* SDL_keyboard.c in Sources */,
|
A7D8BB6C23E2514500DCD162 /* SDL_keyboard.c in Sources */,
|
||||||
A7D8ACEA23E2514100DCD162 /* SDL_rect.c in Sources */,
|
A7D8ACEA23E2514100DCD162 /* SDL_rect.c in Sources */,
|
||||||
|
@ -9215,7 +9177,6 @@
|
||||||
A7D8AF2923E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
|
A7D8AF2923E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
|
||||||
A7D8B86523E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
|
A7D8B86523E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
|
||||||
A7D8AC5C23E2514100DCD162 /* SDL_uikitevents.m in Sources */,
|
A7D8AC5C23E2514100DCD162 /* SDL_uikitevents.m in Sources */,
|
||||||
F3249B24285A85FF00DB9B5C /* SDL_memset.c in Sources */,
|
|
||||||
A7D8ACBC23E2514100DCD162 /* SDL_uikitmodes.m in Sources */,
|
A7D8ACBC23E2514100DCD162 /* SDL_uikitmodes.m in Sources */,
|
||||||
A7D8AD3723E2514100DCD162 /* SDL_blit_N.c in Sources */,
|
A7D8AD3723E2514100DCD162 /* SDL_blit_N.c in Sources */,
|
||||||
A7D8BB8023E2514500DCD162 /* SDL_dropevents.c in Sources */,
|
A7D8BB8023E2514500DCD162 /* SDL_dropevents.c in Sources */,
|
||||||
|
@ -9286,7 +9247,6 @@
|
||||||
A7D8B4E123E2514300DCD162 /* SDL_joystick.c in Sources */,
|
A7D8B4E123E2514300DCD162 /* SDL_joystick.c in Sources */,
|
||||||
A7D8BA4E23E2514400DCD162 /* SDL_render_gles2.c in Sources */,
|
A7D8BA4E23E2514400DCD162 /* SDL_render_gles2.c in Sources */,
|
||||||
A7D8AC3223E2514100DCD162 /* SDL_surface.c in Sources */,
|
A7D8AC3223E2514100DCD162 /* SDL_surface.c in Sources */,
|
||||||
F3249B2D285A85FF00DB9B5C /* SDL_memcpy.c in Sources */,
|
|
||||||
A7D8B55023E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
|
A7D8B55023E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
|
||||||
A7D8AD2823E2514100DCD162 /* SDL_blit_auto.c in Sources */,
|
A7D8AD2823E2514100DCD162 /* SDL_blit_auto.c in Sources */,
|
||||||
A7D8BB6E23E2514500DCD162 /* SDL_keyboard.c in Sources */,
|
A7D8BB6E23E2514500DCD162 /* SDL_keyboard.c in Sources */,
|
||||||
|
|
|
@ -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: */
|
|
|
@ -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: */
|
|
|
@ -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: */
|
|
@ -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); }
|
int SDL_tolower(int x) { return ((x) >= 'A') && ((x) <= 'Z') ? ('a'+((x)-'A')) : (x); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* 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__ */
|
||||||
|
}
|
||||||
|
|
||||||
|
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 */
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(HAVE_CTYPE_H) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
#if defined(HAVE_CTYPE_H) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
||||||
int SDL_isblank(int x) { return isblank(x); }
|
int SDL_isblank(int x) { return isblank(x); }
|
||||||
#else
|
#else
|
||||||
int SDL_isblank(int x) { return ((x) == ' ') || ((x) == '\t'); }
|
int SDL_isblank(int x) { return ((x) == ' ') || ((x) == '\t'); }
|
||||||
#endif
|
#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
|
|
||||||
|
|
||||||
/* 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: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
|
Loading…
Reference in New Issue