ClickHouse/libs/libglibc-compatibility/musl/longjmp.s

20 lines
682 B
ArmAsm
Raw Normal View History

/* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */
.global musl_longjmp
.type musl_longjmp,@function
musl_longjmp:
mov %rsi,%rax /* val will be longjmp return */
test %rax,%rax
jnz 1f
inc %rax /* if val==0, val=1 per longjmp semantics */
1:
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 */