Blame src/setjmp/nt64/longjmp.s
|
|
860627 |
.text
|
|
|
860627 |
.globl __longjmp
|
|
|
860627 |
.globl _longjmp
|
|
|
860627 |
.globl longjmp
|
|
|
860627 |
|
|
|
860627 |
__longjmp:
|
|
|
860627 |
_longjmp:
|
|
|
860627 |
longjmp:
|
|
|
860627 |
test %edx, %edx # is val zero?
|
|
|
860627 |
jne 1f # no: return val
|
|
|
860627 |
xor $1, %edx # yes: return one
|
|
|
860627 |
|
|
|
860627 |
1:
|
|
|
860627 |
mov %edx, %eax # return value
|
|
|
860627 |
|
|
|
860627 |
2:
|
|
|
860627 |
mov 0x10(%rcx), %rbx # restore regs
|
|
|
860627 |
mov 0x18(%rcx), %rbp
|
|
|
860627 |
mov 0x20(%rcx), %rdi
|
|
|
860627 |
mov 0x28(%rcx), %rsi
|
|
|
860627 |
mov 0x30(%rcx), %r12
|
|
|
860627 |
mov 0x38(%rcx), %r13
|
|
|
860627 |
mov 0x40(%rcx), %r14
|
|
|
860627 |
mov 0x48(%rcx), %r15
|
|
|
860627 |
|
|
|
860627 |
mov 0x08(%rcx), %rsp # saved stack pointer
|
|
|
860627 |
mov (%rcx), %rdx # return address
|
|
|
860627 |
jmp *%rdx # return
|