__setjmp14.S revision 1.1
11.1Stsubai/*	$NetBSD: __setjmp14.S,v 1.1 1998/10/03 12:30:38 tsubai Exp $	*/
21.1Stsubai
31.1Stsubai#include <sys/syscall.h>
41.1Stsubai
51.1Stsubai#include <machine/asm.h>
61.1Stsubai
71.1Stsubai#if defined(LIBC_SCCS)
81.1Stsubai	.text
91.1Stsubai	.asciz "$NetBSD: __setjmp14.S,v 1.1 1998/10/03 12:30:38 tsubai Exp $"
101.1Stsubai#endif
111.1Stsubai
121.1Stsubai/*
131.1Stsubai * C library -- _setjmp, _longjmp
141.1Stsubai *
151.1Stsubai *	longjmp(a,v)
161.1Stsubai * will generate a "return(v?v:1)" from the last call to
171.1Stsubai *	setjmp(a)
181.1Stsubai * by restoring registers from the stack.
191.1Stsubai * The previous signal state is restored.
201.1Stsubai */
211.1Stsubai
221.1StsubaiENTRY(__setjmp14)
231.1Stsubai	mr	6,3
241.1Stsubai	li	3,1			# SIG_BLOCK
251.1Stsubai	li	4,0
261.1Stsubai	addi	5,6,100			# &sigmask
271.1Stsubai	li	0,SYS___sigprocmask14
281.1Stsubai	sc				# assume no error	XXX
291.1Stsubai	mflr	11
301.1Stsubai	mfcr	12
311.1Stsubai	mr	10,1
321.1Stsubai	mr	9,2
331.1Stsubai	stmw	8,4(6)			# save r8-r31
341.1Stsubai	li	3,0
351.1Stsubai	blr
361.1Stsubai
371.1StsubaiENTRY(__longjmp14)
381.1Stsubai	lmw	8,4(3)			# load r8-r31
391.1Stsubai	mr	6,4
401.1Stsubai	mtlr	11
411.1Stsubai	mtcr	12
421.1Stsubai	mr	2,9
431.1Stsubai	mr	1,10
441.1Stsubai	addi	4,3,100			# &sigmask
451.1Stsubai	li	3,3			# SIG_SETMASK
461.1Stsubai	li	5,0
471.1Stsubai	li	0,SYS___sigprocmask14
481.1Stsubai	sc				# assume no error	XXX
491.1Stsubai	or.	3,6,6
501.1Stsubai	bnelr
511.1Stsubai	li	3,1
521.1Stsubai	blr
53