1 1.1 jmcneill /* $NetBSD: setjmp.S,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */ 2 1.1 jmcneill 3 1.1 jmcneill .text 4 1.1 jmcneill .globl setjmp 5 1.1 jmcneill #ifndef __MINGW32__ 6 1.1 jmcneill .type setjmp, @function 7 1.1 jmcneill #else 8 1.1 jmcneill .def setjmp; .scl 2; .type 32; .endef 9 1.1 jmcneill #endif 10 1.1 jmcneill setjmp: 11 1.1 jmcneill pop %rsi 12 1.1 jmcneill movq %rbx,0x00(%rdi) 13 1.1 jmcneill movq %rsp,0x08(%rdi) 14 1.1 jmcneill push %rsi 15 1.1 jmcneill movq %rbp,0x10(%rdi) 16 1.1 jmcneill movq %r12,0x18(%rdi) 17 1.1 jmcneill movq %r13,0x20(%rdi) 18 1.1 jmcneill movq %r14,0x28(%rdi) 19 1.1 jmcneill movq %r15,0x30(%rdi) 20 1.1 jmcneill movq %rsi,0x38(%rdi) 21 1.1 jmcneill xor %rax,%rax 22 1.1 jmcneill ret 23 1.1 jmcneill 24 1.1 jmcneill .globl longjmp 25 1.1 jmcneill #ifndef __MINGW32__ 26 1.1 jmcneill .type longjmp, @function 27 1.1 jmcneill #else 28 1.1 jmcneill .def longjmp; .scl 2; .type 32; .endef 29 1.1 jmcneill #endif 30 1.1 jmcneill longjmp: 31 1.1 jmcneill movl %esi, %eax 32 1.1 jmcneill movq 0x00(%rdi), %rbx 33 1.1 jmcneill movq 0x08(%rdi), %rsp 34 1.1 jmcneill movq 0x10(%rdi), %rbp 35 1.1 jmcneill movq 0x18(%rdi), %r12 36 1.1 jmcneill movq 0x20(%rdi), %r13 37 1.1 jmcneill movq 0x28(%rdi), %r14 38 1.1 jmcneill movq 0x30(%rdi), %r15 39 1.1 jmcneill xor %rdx,%rdx 40 1.1 jmcneill mov $1,%rcx 41 1.1 jmcneill cmp %rax,%rdx 42 1.1 jmcneill cmove %rcx,%rax 43 1.1 jmcneill jmp *0x38(%rdi) 44