11.6Sskrll/*	$NetBSD: __setjmp14.S,v 1.6 2023/10/11 09:12:21 skrll Exp $	*/
21.1Stsubai
31.5Smatt#include "SYS.h"
41.5Smatt#include "assym.h"
51.1Stsubai
61.1Stsubai#if defined(LIBC_SCCS)
71.6Sskrll__RCSID("$NetBSD: __setjmp14.S,v 1.6 2023/10/11 09:12:21 skrll Exp $")
81.1Stsubai#endif
91.1Stsubai
101.1Stsubai/*
111.1Stsubai * C library -- _setjmp, _longjmp
121.1Stsubai *
131.1Stsubai *	longjmp(a,v)
141.1Stsubai * will generate a "return(v?v:1)" from the last call to
151.1Stsubai *	setjmp(a)
161.1Stsubai * by restoring registers from the stack.
171.1Stsubai * The previous signal state is restored.
181.1Stsubai */
191.1Stsubai
201.1StsubaiENTRY(__setjmp14)
211.2Smatt	mr	%r6,%r3
221.6Sskrll	li	%r3,0			# how is ignored
231.6Sskrll	li	%r4,0			# set = NULL
241.5Smatt	addi	%r5,%r6,4*(1+24)	# &sigmask
251.5Smatt	_DOSYSCALL(__sigprocmask14)	# assume no error	XXX
261.2Smatt	mflr	%r11
271.2Smatt	mfcr	%r12
281.2Smatt	mr	%r10,%r1
291.2Smatt	mr	%r9,%r2
301.2Smatt	stmw	%r8,4(%r6)		# save r8-r31
311.2Smatt	li	%r3,0
321.1Stsubai	blr
331.5SmattEND(__setjmp14)
341.1Stsubai
351.1StsubaiENTRY(__longjmp14)
361.2Smatt	lmw	%r8,4(%r3)		# load r8-r31
371.2Smatt	mr	%r6,%r4
381.2Smatt	mtlr	%r11
391.2Smatt	mtcr	%r12
401.2Smatt	mr	%r2,%r9
411.2Smatt	mr	%r1,%r10
421.5Smatt	addi	%r4,%r3,4*(1+24)	# &sigmask
431.5Smatt	li	%r3,SIG_SETMASK
441.2Smatt	li	%r5,0
451.5Smatt	_DOSYSCALL(__sigprocmask14)	# assume no error	XXX
461.2Smatt	or.	%r3,%r6,%r6
471.1Stsubai	bnelr
481.2Smatt	li	%r3,1
491.1Stsubai	blr
501.5SmattEND(__longjmp14)
51