xref: /aosp_15_r20/external/musl/src/setjmp/x86_64/setjmp.s (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker/* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */
2*c9945492SAndroid Build Coastguard Worker.global __setjmp
3*c9945492SAndroid Build Coastguard Worker.global _setjmp
4*c9945492SAndroid Build Coastguard Worker.global setjmp
5*c9945492SAndroid Build Coastguard Worker.type __setjmp,@function
6*c9945492SAndroid Build Coastguard Worker.type _setjmp,@function
7*c9945492SAndroid Build Coastguard Worker.type setjmp,@function
8*c9945492SAndroid Build Coastguard Worker__setjmp:
9*c9945492SAndroid Build Coastguard Worker_setjmp:
10*c9945492SAndroid Build Coastguard Workersetjmp:
11*c9945492SAndroid Build Coastguard Worker	mov %rbx,(%rdi)         /* rdi is jmp_buf, move registers onto it */
12*c9945492SAndroid Build Coastguard Worker	mov %rbp,8(%rdi)
13*c9945492SAndroid Build Coastguard Worker	mov %r12,16(%rdi)
14*c9945492SAndroid Build Coastguard Worker	mov %r13,24(%rdi)
15*c9945492SAndroid Build Coastguard Worker	mov %r14,32(%rdi)
16*c9945492SAndroid Build Coastguard Worker	mov %r15,40(%rdi)
17*c9945492SAndroid Build Coastguard Worker	lea 8(%rsp),%rdx        /* this is our rsp WITHOUT current ret addr */
18*c9945492SAndroid Build Coastguard Worker	mov %rdx,48(%rdi)
19*c9945492SAndroid Build Coastguard Worker	mov (%rsp),%rdx         /* save return addr ptr for new rip */
20*c9945492SAndroid Build Coastguard Worker	mov %rdx,56(%rdi)
21*c9945492SAndroid Build Coastguard Worker	xor %eax,%eax           /* always return 0 */
22*c9945492SAndroid Build Coastguard Worker	ret
23