// void fx_call_on_stack(void *stack_top, void (*fn)(void *), void *arg) // Calls fn(arg) with sp moved to stack_top on the current thread, then restores sp. .text .globl _fx_call_on_stack .p2align 2 _fx_call_on_stack: stp x29, x30, [sp, #-16]! mov x29, sp mov x9, sp and x0, x0, #~15 mov sp, x0 stp x9, xzr, [sp, #-16]! mov x0, x2 blr x1 ldp x9, xzr, [sp], #16 mov sp, x9 ldp x29, x30, [sp], #16 ret