41 lines
719 B
ArmAsm
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)
|