From 18c3592091594219230888d4b186ba5eb54796ba Mon Sep 17 00:00:00 2001 From: Adrien BODINEAU Date: Mon, 7 Apr 2025 23:44:04 +0200 Subject: [PATCH 1/3] update README.md to check the box --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e5350d58c..c94eb2f3f 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ rely on CI. - [x] arm/aeabi_memset.S - [x] arm/aeabi_uidivmod.S - [x] arm/aeabi_uldivmod.S -- [ ] arm/chkstk.S +- [x] arm/chkstk.S - [ ] arm/divmodsi4.S (generic version is done) - [ ] arm/divsi3.S (generic version is done) - [ ] arm/modsi3.S (generic version is done) From 9bf5fd932a210151d620b86406a91999bd6f7cc1 Mon Sep 17 00:00:00 2001 From: Adrien BODINEAU Date: Mon, 7 Apr 2025 23:51:24 +0200 Subject: [PATCH 2/3] Add __chkstk for arm64ec-pc-windows-msvc --- compiler-builtins/src/arm.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/compiler-builtins/src/arm.rs b/compiler-builtins/src/arm.rs index 9e6608397..02c0c4e1e 100644 --- a/compiler-builtins/src/arm.rs +++ b/compiler-builtins/src/arm.rs @@ -162,4 +162,25 @@ intrinsics! { pub unsafe extern "aapcs" fn __aeabi_memclr8(dest: *mut u8, n: usize) { __aeabi_memset4(dest, n, 0); } + + // NOTE This function is implemented using assembly because they are using + // a custom calling convention + #[naked] + #[cfg(all(target_arch = "arm64ec", target_env = "msvc", not(feature = "no-asm")))] + pub unsafe extern "C" fn __chkstk() { + core::arch::naked_asm!( + ".p2align 2", + "lsl r4, r4, #2", + "mov r12, sp", + "push {{ r5, r6 }}", + "mov r5, r4", + "1:", + "sub r12, r12, 4096", + "subs r5, r5, 4096", + "ldr r6, [r12]", + "bgt 1b", + "pop {{ r5, r6 }}", + "bx lr", + ); + } } From 042fd78728623278c05cf597090d51ea5ec1ccb3 Mon Sep 17 00:00:00 2001 From: Adrien BODINEAU Date: Tue, 8 Apr 2025 20:44:27 +0200 Subject: [PATCH 3/3] try fixing cfg --- compiler-builtins/src/arm.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler-builtins/src/arm.rs b/compiler-builtins/src/arm.rs index 02c0c4e1e..cfc0f1ab6 100644 --- a/compiler-builtins/src/arm.rs +++ b/compiler-builtins/src/arm.rs @@ -166,7 +166,7 @@ intrinsics! { // NOTE This function is implemented using assembly because they are using // a custom calling convention #[naked] - #[cfg(all(target_arch = "arm64ec", target_env = "msvc", not(feature = "no-asm")))] + #[cfg(all(target_env = "msvc", not(feature = "no-asm")))] pub unsafe extern "C" fn __chkstk() { core::arch::naked_asm!( ".p2align 2",