mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-06-04 19:07:40 +00:00
Implement __chkstk for arm64
Lifted from a previously built SDL3.dll
This commit is contained in:
parent
578ac0ef52
commit
4fbf59ac3a
4 changed files with 47 additions and 13 deletions
|
@ -505,9 +505,14 @@ if(MSVC AND TARGET SDL3-shared AND NOT SDL_LIBC)
|
||||||
target_compile_options(SDL3-shared PRIVATE "$<$<COMPILE_LANGUAGE:ASM_MASM>:/nologo>")
|
target_compile_options(SDL3-shared PRIVATE "$<$<COMPILE_LANGUAGE:ASM_MASM>:/nologo>")
|
||||||
set_property(SOURCE "${asm_src}" PROPERTY LANGUAGE "ASM_MASM")
|
set_property(SOURCE "${asm_src}" PROPERTY LANGUAGE "ASM_MASM")
|
||||||
target_sources(SDL3-shared PRIVATE "${asm_src}")
|
target_sources(SDL3-shared PRIVATE "${asm_src}")
|
||||||
elseif(SDL_CPU_ARM32 OR SDL_CPU_ARM64)
|
elseif(SDL_CPU_ARM64)
|
||||||
# FIXME: ARM assembler (armasm.exe/armasm64.exe) is NOT ASM_MASM, and does currently not work with CMake
|
enable_language(ASM_MARMASM)
|
||||||
# (https://gitlab.kitware.com/cmake/cmake/-/issues/18912)
|
set(asm_src "${SDL3_SOURCE_DIR}/src/stdlib/SDL_mslibc_arm64.masm")
|
||||||
|
target_compile_options(SDL3-shared PRIVATE "$<$<COMPILE_LANGUAGE:ASM_MARMASM>:/nologo>")
|
||||||
|
set_property(SOURCE "${asm_src}" PROPERTY LANGUAGE "ASM_MARMASM")
|
||||||
|
target_sources(SDL3-shared PRIVATE "${asm_src}")
|
||||||
|
elseif(SDL_CPU_ARM32)
|
||||||
|
# FIXME
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -3388,6 +3393,17 @@ if(SDL_SHARED)
|
||||||
# (__rt_sdiv, __rt_udiv, __rt_sdiv64, _rt_udiv64, __dtou64, __u64tod, __i64tos)
|
# (__rt_sdiv, __rt_udiv, __rt_sdiv64, _rt_udiv64, __dtou64, __u64tod, __i64tos)
|
||||||
target_link_libraries(SDL3-shared PRIVATE msvcrt.lib)
|
target_link_libraries(SDL3-shared PRIVATE msvcrt.lib)
|
||||||
endif()
|
endif()
|
||||||
|
find_library(HAVE_ONECORE_LIB NAMES "onecore.lib")
|
||||||
|
if(HAVE_ONECORE_LIB)
|
||||||
|
# SDL_malloc.c: __imp_MapViewOfFileNuma2 referenced in function MapViewOfFile2
|
||||||
|
target_link_libraries(SDL3-shared PRIVATE onecore.lib)
|
||||||
|
endif()
|
||||||
|
find_library(HAVE_VOLATILEACCESSU_LIB NAMES "volatileaccessu.lib")
|
||||||
|
if(HAVE_VOLATILEACCESSU_LIB)
|
||||||
|
# SDL_malloc.c : RtlSetVolatileMemory referenced in function RtlFillVolatileMemory
|
||||||
|
# SDL_malloc.c : RtlFillDeviceMemory referenced in function RtlZeroDeviceMemory
|
||||||
|
target_link_libraries(SDL3-shared PRIVATE volatileaccessu.lib)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if(HAS_Q_NO_USE_LIBIRC)
|
if(HAS_Q_NO_USE_LIBIRC)
|
||||||
target_compile_options(SDL3-shared PRIVATE /Q_no-use-libirc)
|
target_compile_options(SDL3-shared PRIVATE /Q_no-use-libirc)
|
||||||
|
|
|
@ -34,7 +34,7 @@ function(SDL_AddCommonCompilerFlags TARGET)
|
||||||
cmake_push_check_state()
|
cmake_push_check_state()
|
||||||
check_c_compiler_flag("/W3" COMPILER_SUPPORTS_W3)
|
check_c_compiler_flag("/W3" COMPILER_SUPPORTS_W3)
|
||||||
if(COMPILER_SUPPORTS_W3)
|
if(COMPILER_SUPPORTS_W3)
|
||||||
target_compile_options(${TARGET} PRIVATE "/W3")
|
target_compile_options(${TARGET} PRIVATE "$<$<COMPILE_LANGUAGE:C,CXX>:/W3>")
|
||||||
endif()
|
endif()
|
||||||
cmake_pop_check_state()
|
cmake_pop_check_state()
|
||||||
endif()
|
endif()
|
||||||
|
@ -131,7 +131,7 @@ function(SDL_AddCommonCompilerFlags TARGET)
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
check_c_compiler_flag(/WX HAVE_WX)
|
check_c_compiler_flag(/WX HAVE_WX)
|
||||||
if(HAVE_WX)
|
if(HAVE_WX)
|
||||||
target_compile_options(${TARGET} PRIVATE "/WX")
|
target_compile_options(${TARGET} PRIVATE "$<$<COMPILE_LANGUAGE:C,CXX>:/WX>")
|
||||||
endif()
|
endif()
|
||||||
elseif(USE_GCC OR USE_CLANG OR USE_INTELCC OR USE_QNX)
|
elseif(USE_GCC OR USE_CLANG OR USE_INTELCC OR USE_QNX)
|
||||||
check_c_compiler_flag(-Werror HAVE_WERROR)
|
check_c_compiler_flag(-Werror HAVE_WERROR)
|
||||||
|
|
|
@ -728,14 +728,6 @@ void __declspec(naked) _alloca_probe_16(void)
|
||||||
|
|
||||||
#endif // _M_IX86
|
#endif // _M_IX86
|
||||||
|
|
||||||
#ifdef _M_ARM64
|
|
||||||
|
|
||||||
void __chkstk(void);
|
|
||||||
void __chkstk() {
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // MSC_VER
|
#endif // MSC_VER
|
||||||
|
|
||||||
#ifdef __ICL
|
#ifdef __ICL
|
||||||
|
|
26
src/stdlib/SDL_mslibc_arm64.masm
Normal file
26
src/stdlib/SDL_mslibc_arm64.masm
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
TeStackLimit EQU 0x00010
|
||||||
|
PAGE_SIZE equ 0x1000
|
||||||
|
|
||||||
|
AREA CODE, READONLY
|
||||||
|
|
||||||
|
EXPORT __chkstk
|
||||||
|
|
||||||
|
__chkstk PROC
|
||||||
|
ldr x17,[x18, #TeStackLimit]
|
||||||
|
subs x16,sp,x15, LSL #0x4
|
||||||
|
csel x16,xzr,x16,cc
|
||||||
|
cmp x16,x17
|
||||||
|
b.cc chkstk_start_loop
|
||||||
|
ret
|
||||||
|
chkstk_start_loop
|
||||||
|
and x16,x16,#-PAGE_SIZE
|
||||||
|
chkstk_loop
|
||||||
|
sub x17,x17,#0x1, LSL #12
|
||||||
|
ldr xzr,[x17]
|
||||||
|
cmp x17,x16
|
||||||
|
b.ne chkstk_loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
END
|
Loading…
Add table
Add a link
Reference in a new issue