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