Home | History | Annotate | Line # | Download | only in gen
compat_setjmp.S revision 1.2
      1  1.2  matt /*	$NetBSD: compat_setjmp.S,v 1.2 2011/01/15 07:31:13 matt Exp $	*/
      2  1.1  matt 
      3  1.2  matt #include "SYS.h"
      4  1.2  matt #include "assym.h"
      5  1.1  matt 
      6  1.1  matt #if defined(LIBC_SCCS)
      7  1.2  matt __RCSID("$NetBSD: compat_setjmp.S,v 1.2 2011/01/15 07:31:13 matt Exp $")
      8  1.1  matt #endif
      9  1.1  matt 
     10  1.1  matt /*
     11  1.1  matt  * C library -- _setjmp, _longjmp
     12  1.1  matt  *
     13  1.1  matt  *	longjmp(a,v)
     14  1.1  matt  * will generate a "return(v?v:1)" from the last call to
     15  1.1  matt  *	setjmp(a)
     16  1.1  matt  * by restoring registers from the stack.
     17  1.1  matt  * The previous signal state is restored.
     18  1.1  matt  */
     19  1.1  matt 
     20  1.1  matt ENTRY(setjmp)
     21  1.1  matt 	mr	%r6,%r3
     22  1.2  matt 	li	%r3,SIG_BLOCK
     23  1.1  matt 	li	%r4,0
     24  1.2  matt 	_DOSYSCALL(compat_13_sigprocmask13) # assume no error	XXX
     25  1.1  matt 	mflr	%r11
     26  1.1  matt 	mfcr	%r12
     27  1.1  matt 	mr	%r10,%r1
     28  1.1  matt 	mr	%r9,%r2
     29  1.1  matt 	mr	%r8,%r3
     30  1.1  matt 	stmw	%r8,4(%r6)
     31  1.1  matt 	li	%r3,0
     32  1.1  matt 	blr
     33  1.2  matt END(setjmp)
     34  1.1  matt 
     35  1.1  matt ENTRY(longjmp)
     36  1.1  matt 	lmw	%r8,4(%r3)
     37  1.1  matt 	mr	%r6,%r4
     38  1.1  matt 	mtlr	%r11
     39  1.1  matt 	mtcr	%r12
     40  1.1  matt 	mr	%r2,%r9
     41  1.1  matt 	mr	%r1,%r10
     42  1.1  matt 	mr	%r4,%r8
     43  1.2  matt 	li	%r3,SIG_SETMASK
     44  1.2  matt 	_DOSYSCALL(compat_13_sigprocmask13) # assume no error	XXX
     45  1.1  matt 	or.	%r3,%r6,%r6
     46  1.1  matt 	bnelr
     47  1.1  matt 	li	%r3,1
     48  1.1  matt 	blr
     49  1.2  matt END(longjmp)
     50