projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
elf.h: add ELFCOMPRESS_ZSTD
[musl]
/
src
/
setjmp
/
x86_64
/
longjmp.s
diff --git
a/src/setjmp/x86_64/longjmp.s
b/src/setjmp/x86_64/longjmp.s
index
e709aca
..
1b2661c
100644
(file)
--- a/
src/setjmp/x86_64/longjmp.s
+++ b/
src/setjmp/x86_64/longjmp.s
@@
-5,18
+5,14
@@
.type longjmp,@function
_longjmp:
longjmp:
.type longjmp,@function
_longjmp:
longjmp:
- mov %esi,%eax /* val will be longjmp return */
- test %esi,%esi
- jnz 1f
- inc %eax /* if val==0, val=1 per longjmp semantics */
-1:
+ xor %eax,%eax
+ cmp $1,%esi /* CF = val ? 0 : 1 */
+ adc %esi,%eax /* eax = val + !val */
mov (%rdi),%rbx /* rdi is the jmp_buf, restore regs from it */
mov 8(%rdi),%rbp
mov 16(%rdi),%r12
mov 24(%rdi),%r13
mov 32(%rdi),%r14
mov 40(%rdi),%r15
mov (%rdi),%rbx /* rdi is the jmp_buf, restore regs from it */
mov 8(%rdi),%rbp
mov 16(%rdi),%r12
mov 24(%rdi),%r13
mov 32(%rdi),%r14
mov 40(%rdi),%r15
- mov 48(%rdi),%rdx /* this ends up being the stack pointer */
- mov %rdx,%rsp
- mov 56(%rdi),%rdx /* this is the instruction pointer */
- jmp *%rdx /* goto saved address without altering rsp */
+ mov 48(%rdi),%rsp
+ jmp *56(%rdi) /* goto saved address without altering rsp */