1/* $NetBSD: __setjmp14.S,v 1.1 1998/10/03 12:30:38 tsubai Exp $ */ 2 3#include <sys/syscall.h> 4 5#include <machine/asm.h> 6 7#if defined(LIBC_SCCS) 8 .text 9 .asciz "$NetBSD: __setjmp14.S,v 1.1 1998/10/03 12:30:38 tsubai Exp $" 10#endif 11 12/* 13 * C library -- _setjmp, _longjmp 14 * 15 * longjmp(a,v) 16 * will generate a "return(v?v:1)" from the last call to 17 * setjmp(a) 18 * by restoring registers from the stack. 19 * The previous signal state is restored. 20 */ 21 22ENTRY(__setjmp14) 23 mr 6,3 24 li 3,1 # SIG_BLOCK 25 li 4,0 26 addi 5,6,100 # &sigmask 27 li 0,SYS___sigprocmask14 28 sc # assume no error XXX 29 mflr 11 30 mfcr 12 31 mr 10,1 32 mr 9,2 33 stmw 8,4(6) # save r8-r31 34 li 3,0 35 blr 36 37ENTRY(__longjmp14) 38 lmw 8,4(3) # load r8-r31 39 mr 6,4 40 mtlr 11 41 mtcr 12 42 mr 2,9 43 mr 1,10 44 addi 4,3,100 # &sigmask 45 li 3,3 # SIG_SETMASK 46 li 5,0 47 li 0,SYS___sigprocmask14 48 sc # assume no error XXX 49 or. 3,6,6 50 bnelr 51 li 3,1 52 blr 53