jehanne/sys/src/lib/jehanne/amd64/setjmp.s

40 lines
767 B
ArmAsm

.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