36 lines
601 B
NASM
36 lines
601 B
NASM
|
global _setjmp
|
||
|
global setjmp
|
||
|
_setjmp:
|
||
|
setjmp:
|
||
|
mov rsi, 0
|
||
|
mov [rdi], rbx
|
||
|
mov [rdi+8], r12
|
||
|
mov [rdi+16], r13
|
||
|
mov [rdi+24], r14
|
||
|
mov [rdi+32], r15
|
||
|
mov [rdi+40], rbp
|
||
|
mov [rdi+48], rsp
|
||
|
mov rax, [rsp]
|
||
|
mov [rdi+56], rax
|
||
|
xor rax, rax
|
||
|
ret
|
||
|
|
||
|
global _longjmp
|
||
|
global longjmp
|
||
|
_longjmp:
|
||
|
longjmp:
|
||
|
mov rax, rsi
|
||
|
cmp rax, 0
|
||
|
jne .nonzero
|
||
|
mov rax, 1
|
||
|
.nonzero:
|
||
|
mov rbx, [rdi]
|
||
|
mov r12, [rdi+8]
|
||
|
mov r13, [rdi+16]
|
||
|
mov r14, [rdi+24]
|
||
|
mov r15, [rdi+32]
|
||
|
mov rbp, [rdi+40]
|
||
|
mov rsp, [rdi+48]
|
||
|
mov rcx, [rdi+56]
|
||
|
mov [rsp], rcx
|
||
|
ret
|