diff --git a/src/arm.rs b/src/arm.rs index 0759b55..ad2b39a 100644 --- a/src/arm.rs +++ b/src/arm.rs @@ -9,7 +9,8 @@ pub unsafe fn __aeabi_uidivmod() { sub sp, sp, #4 mov r2, sp bl __udivmodsi4 - ldr r1, [sp], #4 + ldr r1, [sp] + add sp, sp, #4 pop {pc}"); intrinsics::unreachable(); } @@ -17,13 +18,15 @@ pub unsafe fn __aeabi_uidivmod() { #[naked] #[cfg_attr(not(test), no_mangle)] pub unsafe fn __aeabi_uldivmod() { - asm!("push {lr} - sub r12, sp, #12 - str r12, [sp, #-20]! + asm!("push {r4, lr} + sub sp, sp, #16 + add r4, sp, #8 + str r4, [sp] bl __udivmoddi4 - ldrd r2, r3, [sp, #8] - add sp, sp, #20 - pop {pc}"); + ldr r2, [sp, #8] + ldr r3, [sp, #12] + add sp, sp, #16 + pop {r4, pc}"); intrinsics::unreachable(); }