.global _setjmp .global setjmp _setjmp: setjmp: mov $0, %rsi mov %rbx, (%rdi) mov %r12, 0x8(%rdi) mov %r13, 0x10(%rdi) mov %r14, 0x18(%rdi) mov %r15, 0x20(%rdi) mov %rbp, 0x28(%rdi) mov %rsp, 0x30(%rdi) mov (%rsp), %rax mov %rax, 0x38(%rdi) xor %rax, %rax ret .global _longjmp .global longjmp _longjmp: longjmp: mov %rsi, %rax cmp $0, %rax jne .nonzero mov $1, %rax .nonzero: mov (%rdi), %rbx mov 0x8(%rdi), %r12 mov 0x10(%rdi), %r13 mov 0x18(%rdi), %r14 mov 0x20(%rdi), %r15 mov 0x28(%rdi), %rbp mov 0x30(%rdi), %rsp mov 0x38(%rdi), %rcx mov %rcx, (%rsp) ret