diff options
Diffstat (limited to 'libc-top-half/musl/src/setjmp/x86_64/longjmp.s')
-rw-r--r-- | libc-top-half/musl/src/setjmp/x86_64/longjmp.s | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libc-top-half/musl/src/setjmp/x86_64/longjmp.s b/libc-top-half/musl/src/setjmp/x86_64/longjmp.s new file mode 100644 index 0000000..1b2661c --- /dev/null +++ b/libc-top-half/musl/src/setjmp/x86_64/longjmp.s @@ -0,0 +1,18 @@ +/* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */ +.global _longjmp +.global longjmp +.type _longjmp,@function +.type longjmp,@function +_longjmp: +longjmp: + 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 48(%rdi),%rsp + jmp *56(%rdi) /* goto saved address without altering rsp */ |