xref: /drstd/dlibc/src/unix/header/setjmp/impl/x86_64/setjmp.s (revision 9670759b785600bf6315e4173e46a602f16add7a)
1/* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */
2.global __setjmp
3.global _setjmp
4.global setjmp
5.type __setjmp,@function
6.type _setjmp,@function
7.type setjmp,@function
8__setjmp:
9_setjmp:
10setjmp:
11	mov [rdi], rbx						/* rdi is jmp_buf, move registers onto it */
12	mov [rdi + 8], rbp
13	mov [rdi + 16], r12
14	mov [rdi + 24], r13
15	mov [rdi + 32], r14
16	mov [rdi + 40], r15
17	lea rdx, [rsp + 8]				/* this is our rsp WITHOUT current ret addr */
18	mov [rdi + 48], rdx
19	mov rdx, [rsp]						/* save return addr ptr for new rip */
20	mov [rdi + 56], rdx
21	xor rax, rax							/* always return 0 */
22	ret
23