/* * setjmp-aarch64.S * setjmp/longjmp for AArch64 MontaukOS userspace * Copyright (c) 2026 Daniel Hammer */ /* jmp_buf: x19-x28, x29 (fp), x30 (lr), sp, d8-d15 -- everything AAPCS64 requires a callee to preserve. */ .text .global setjmp .type setjmp, %function setjmp: stp x19, x20, [x0, #0] stp x21, x22, [x0, #16] stp x23, x24, [x0, #32] stp x25, x26, [x0, #48] stp x27, x28, [x0, #64] stp x29, x30, [x0, #80] mov x2, sp str x2, [x0, #96] stp d8, d9, [x0, #104] stp d10, d11, [x0, #120] stp d12, d13, [x0, #136] stp d14, d15, [x0, #152] mov w0, #0 ret .size setjmp, . - setjmp .global longjmp .type longjmp, %function longjmp: ldp x19, x20, [x0, #0] ldp x21, x22, [x0, #16] ldp x23, x24, [x0, #32] ldp x25, x26, [x0, #48] ldp x27, x28, [x0, #64] ldp x29, x30, [x0, #80] ldr x2, [x0, #96] mov sp, x2 ldp d8, d9, [x0, #104] ldp d10, d11, [x0, #120] ldp d12, d13, [x0, #136] ldp d14, d15, [x0, #152] cmp w1, #0 csinc w0, w1, wzr, ne ret .size longjmp, . - longjmp