.globl setjmp setjmp: mov (%rsp), %rsi mov %rsi, (%rdi) mov %rsp, 0x8(%rdi) mov %rbp, 0x10(%rdi) mov %rbx, 0x18(%rdi) mov %r12, 0x20(%rdi) mov %r13, 0x28(%rdi) mov %r14, 0x30(%rdi) mov %r15, 0x38(%rdi) xor %eax, %eax ret .globl longjmp longjmp: mov %esi, %eax mov 0x38(%rdi), %r15 mov 0x30(%rdi), %r14 mov 0x28(%rdi), %r13 mov 0x20(%rdi), %r12 mov 0x18(%rdi), %rbx mov 0x10(%rdi), %rbp mov 0x8(%rdi), %rsp mov (%rdi), %rsi mov %rsi, (%rsp) ret