diff --git a/tests/checkasm/arm/checkasm.S b/tests/checkasm/arm/checkasm.S index 199c96a591..f004af3b90 100644 --- a/tests/checkasm/arm/checkasm.S +++ b/tests/checkasm/arm/checkasm.S @@ -42,6 +42,9 @@ endconst #define ARG_STACK 4*(MAX_ARGS - 2) +@ align the used stack space to 8 to preserve the stack alignment +#define ARG_STACK_A (((ARG_STACK + pushed + 7) & ~7) - pushed) + .macro clobbercheck variant .equ pushed, 4*9 function checkasm_checked_call_\variant, export=1 @@ -59,10 +62,10 @@ function checkasm_checked_call_\variant, export=1 .endif ldm r12, {r4-r11} - sub sp, sp, #ARG_STACK + sub sp, sp, #ARG_STACK_A .equ pos, 0 .rept MAX_ARGS-2 - ldr r12, [sp, #ARG_STACK + pushed + 8 + pos] + ldr r12, [sp, #ARG_STACK_A + pushed + 8 + pos] str r12, [sp, #pos] .equ pos, pos + 4 .endr @@ -70,9 +73,9 @@ function checkasm_checked_call_\variant, export=1 mov r12, r0 mov r0, r2 mov r1, r3 - ldrd r2, r3, [sp, #ARG_STACK + pushed] + ldrd r2, r3, [sp, #ARG_STACK_A + pushed] blx r12 - add sp, sp, #ARG_STACK + add sp, sp, #ARG_STACK_A push {r0, r1} movrel r12, register_init