| .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 |