BizHawk/waterbox/libc/functions/setjmp/setjmp.s

54 lines
1.1 KiB
ArmAsm

/*
* ====================================================
* Copyright (C) 2007 by Ellips BV. All rights reserved.
*
* Permission to use, copy, modify, and distribute this
* software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
/*
** jmp_buf:
** rbx rbp r12 r13 r14 r15 rsp rip
** 0 8 16 24 32 40 48 56
*/
.global setjmp
.global longjmp
.type setjmp,@function
.type longjmp,@function
setjmp:
movq %rbx, 0 (%rdi)
movq %rbp, 8 (%rdi)
movq %r12, 16 (%rdi)
movq %r13, 24 (%rdi)
movq %r14, 32 (%rdi)
movq %r15, 40 (%rdi)
leaq 8 (%rsp), %rax
movq %rax, 48 (%rdi)
movq (%rsp), %rax
movq %rax, 56 (%rdi)
movq $0, %rax
ret
longjmp:
movq %rsi, %rax /* Return value */
test %rax, %rax
jnz L0
inc %rax /* if 0 was passed, send back 1 instead */
L0:
movq 8 (%rdi), %rbp
cli
movq 48 (%rdi), %rsp
pushq 56 (%rdi)
movq 0 (%rdi), %rbx
movq 16 (%rdi), %r12
movq 24 (%rdi), %r13
movq 32 (%rdi), %r14
movq 40 (%rdi), %r15
sti
ret