xref: /netbsd-src/lib/libc/arch/powerpc64/gen/__setjmp14.S (revision ea952cb848ce3fe813ba15ed123efa5019ce2f7f)
1*ea952cb8Sskrll/*	$NetBSD: __setjmp14.S,v 1.5 2023/10/11 09:12:21 skrll Exp $	*/
260ce5dccSross
338dcdc34Smatt#include "SYS.h"
460ce5dccSross
560ce5dccSross#if defined(LIBC_SCCS)
6*ea952cb8Sskrll__RCSID("$NetBSD: __setjmp14.S,v 1.5 2023/10/11 09:12:21 skrll Exp $")
760ce5dccSross#endif
860ce5dccSross
960ce5dccSross/*
1060ce5dccSross * C library -- _setjmp, _longjmp
1160ce5dccSross *
1260ce5dccSross *	longjmp(a,v)
1360ce5dccSross * will generate a "return(v?v:1)" from the last call to
1460ce5dccSross *	setjmp(a)
1560ce5dccSross * by restoring registers from the stack.
1660ce5dccSross * The previous signal state is restored.
1760ce5dccSross */
1860ce5dccSross
1960ce5dccSrossENTRY(__setjmp14)
2060ce5dccSross	mr	%r6,%r3
21*ea952cb8Sskrll	li	%r3,0
2260ce5dccSross	li	%r4,0
2360ce5dccSross	addi	%r5,%r6,100		# &sigmask
2438dcdc34Smatt	_DOSYSCALL(__sigprocmask14)	# assume no error	XXX
2560ce5dccSross	mflr	%r11
2660ce5dccSross	mfcr	%r12
2760ce5dccSross	mr	%r10,%r1
2860ce5dccSross	mr	%r9,%r2
295da54c35She
305da54c35She	std	%r8,8(%r6)		# save r8-r31
315da54c35She	std	%r9,16(%r6)
325da54c35She	std	%r10,24(%r6)
335da54c35She	std	%r11,32(%r6)
345da54c35She	std	%r12,40(%r6)
355da54c35She	std	%r13,48(%r6)
365da54c35She	std	%r14,56(%r6)
375da54c35She	std	%r15,64(%r6)
385da54c35She	std	%r16,72(%r6)
395da54c35She	std	%r17,80(%r6)
405da54c35She	std	%r18,88(%r6)
415da54c35She	std	%r19,96(%r6)
425da54c35She	std	%r20,104(%r6)
435da54c35She	std	%r21,112(%r6)
445da54c35She	std	%r22,120(%r6)
455da54c35She	std	%r23,128(%r6)
465da54c35She	std	%r24,136(%r6)
475da54c35She	std	%r25,144(%r6)
485da54c35She	std	%r26,152(%r6)
495da54c35She	std	%r27,160(%r6)
505da54c35She	std	%r28,168(%r6)
515da54c35She	std	%r29,176(%r6)
525da54c35She	std	%r30,184(%r6)
535da54c35She	std	%r31,192(%r6)
545da54c35She
5560ce5dccSross	li	%r3,0
5660ce5dccSross	blr
5738dcdc34SmattEND(__setjmp14)
5860ce5dccSross
5960ce5dccSrossENTRY(__longjmp14)
605da54c35She	ld	%r8,8(%r6)		# load r8-r31
615da54c35She	ld	%r9,16(%r6)
625da54c35She	ld	%r10,24(%r6)
635da54c35She	ld	%r11,32(%r6)
645da54c35She	ld	%r12,40(%r6)
655da54c35She	ld	%r13,48(%r6)
665da54c35She	ld	%r14,56(%r6)
675da54c35She	ld	%r15,64(%r6)
685da54c35She	ld	%r16,72(%r6)
695da54c35She	ld	%r17,80(%r6)
705da54c35She	ld	%r18,88(%r6)
715da54c35She	ld	%r19,96(%r6)
725da54c35She	ld	%r20,104(%r6)
735da54c35She	ld	%r21,112(%r6)
745da54c35She	ld	%r22,120(%r6)
755da54c35She	ld	%r23,128(%r6)
765da54c35She	ld	%r24,136(%r6)
775da54c35She	ld	%r25,144(%r6)
785da54c35She	ld	%r26,152(%r6)
795da54c35She	ld	%r27,160(%r6)
805da54c35She	ld	%r28,168(%r6)
815da54c35She	ld	%r29,176(%r6)
825da54c35She	ld	%r30,184(%r6)
835da54c35She	ld	%r31,192(%r6)
845da54c35She
8560ce5dccSross	mr	%r6,%r4
8660ce5dccSross	mtlr	%r11
8760ce5dccSross	mtcr	%r12
8860ce5dccSross	mr	%r2,%r9
8960ce5dccSross	mr	%r1,%r10
9060ce5dccSross	addi	%r4,%r3,100		# &sigmask
9160ce5dccSross	li	%r3,3			# SIG_SETMASK
9260ce5dccSross	li	%r5,0
9338dcdc34Smatt	_DOSYSCALL(__sigprocmask14)	# assume no error	XXX
9460ce5dccSross	or.	%r3,%r6,%r6
9560ce5dccSross	bnelr
9660ce5dccSross	li	%r3,1
9760ce5dccSross	blr
9838dcdc34SmattEND(__longjmp14)
99