.text .globl jehanne_longjmp jehanne_longjmp: movq %rdi, %r9 movq 0(%r9), %rbx movq 8(%r9), %r12 movq 16(%r9), %r13 movq 24(%r9), %r14 movq 32(%r9), %r15 movq 40(%r9), %rbp movq 48(%r9), %rsp movl %esi, %eax test %eax, %eax /* if val != 0 */ jnz 1f /* return val */ incl %eax /* else return 1 */ 1: movq 56(%r9), %r8 /* return to caller of setjmp */ movq 64(%r9), %rdi /* 1st function argument */ movq 72(%r9), %rsi /* 2nd function argument */ jmp *%r8 .globl jehanne_setjmp jehanne_setjmp: movq %rbx, 0(%rdi) movq %r12, 8(%rdi) movq %r13, 16(%rdi) movq %r14, 24(%rdi) movq %r15, 32(%rdi) movq %rbp, 40(%rdi) popq %rdx /* return address */ movq %rsp, 48(%rdi) movq %rdx, 56(%rdi) xorl %eax, %eax /* return 0 */ jmp *%rdx