19 lines
548 B
ArmAsm
19 lines
548 B
ArmAsm
|
/* 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 */
|