Files
MontaukOS/programs/lib/libc/setjmp.S
T

41 lines
719 B
ArmAsm

/*
* setjmp.S
* setjmp/longjmp for x86_64 MontaukOS userspace
* Copyright (c) 2026 Daniel Hammer
*/
.text
.global setjmp
.type setjmp, @function
setjmp:
mov %rbx, (%rdi)
mov %rbp, 8(%rdi)
mov %r12, 16(%rdi)
mov %r13, 24(%rdi)
mov %r14, 32(%rdi)
mov %r15, 40(%rdi)
lea 8(%rsp), %rax
mov %rax, 48(%rdi)
mov (%rsp), %rax
mov %rax, 56(%rdi)
xor %eax, %eax
ret
.global longjmp
.type longjmp, @function
longjmp:
mov %esi, %eax
test %eax, %eax
jnz 1f
inc %eax
1:
mov (%rdi), %rbx
mov 8(%rdi), %rbp
mov 16(%rdi), %r12
mov 24(%rdi), %r13
mov 32(%rdi), %r14
mov 40(%rdi), %r15
mov 48(%rdi), %rsp
jmp *56(%rdi)