diff --git a/runtime/libia2/include/ia2_internal.h b/runtime/libia2/include/ia2_internal.h index df6bb854d..7f61fa335 100644 --- a/runtime/libia2/include/ia2_internal.h +++ b/runtime/libia2/include/ia2_internal.h @@ -271,12 +271,12 @@ asm(".macro movz_shifted_tag_x18 tag\n" "mov x9, sp\n" \ /* switch to newly allocated stack */ \ "mov sp, %0\n" \ - /* push old stack pointer to new stack */ \ - "str x9, [sp], #-8\n" \ + /* push the stack pointer in x9 and a dummy reg to new stack */ \ + "stp x9, x10, [sp, #-16]!\n" \ /* initialize TLS */ \ "bl init_tls_" #i "\n" \ /* pop old stack pointer from new stack */ \ - "ldr x9, [sp, #8]!\n" \ + "ldp x9, x10, [sp], #16\n" \ /* save pointer to new stack */ \ "mov x10, sp\n" \ /* switch to old stack */ \