xref: /minix3/lib/libc/arch/powerpc64/gen/__setjmp14.S (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc/*	$NetBSD: __setjmp14.S,v 1.3 2014/08/23 02:24:22 matt Exp $	*/
22fe8fb19SBen Gras
3*0a6a1f1dSLionel Sambuc#include "SYS.h"
42fe8fb19SBen Gras
52fe8fb19SBen Gras#if defined(LIBC_SCCS)
6*0a6a1f1dSLionel Sambuc__RCSID("$NetBSD: __setjmp14.S,v 1.3 2014/08/23 02:24:22 matt Exp $")
72fe8fb19SBen Gras#endif
82fe8fb19SBen Gras
92fe8fb19SBen Gras/*
102fe8fb19SBen Gras * C library -- _setjmp, _longjmp
112fe8fb19SBen Gras *
122fe8fb19SBen Gras *	longjmp(a,v)
132fe8fb19SBen Gras * will generate a "return(v?v:1)" from the last call to
142fe8fb19SBen Gras *	setjmp(a)
152fe8fb19SBen Gras * by restoring registers from the stack.
162fe8fb19SBen Gras * The previous signal state is restored.
172fe8fb19SBen Gras */
182fe8fb19SBen Gras
192fe8fb19SBen GrasENTRY(__setjmp14)
202fe8fb19SBen Gras	mr	%r6,%r3
212fe8fb19SBen Gras	li	%r3,1			# SIG_BLOCK
222fe8fb19SBen Gras	li	%r4,0
232fe8fb19SBen Gras	addi	%r5,%r6,100		# &sigmask
24*0a6a1f1dSLionel Sambuc	_DOSYSCALL(__sigprocmask14)	# assume no error	XXX
252fe8fb19SBen Gras	mflr	%r11
262fe8fb19SBen Gras	mfcr	%r12
272fe8fb19SBen Gras	mr	%r10,%r1
282fe8fb19SBen Gras	mr	%r9,%r2
292fe8fb19SBen Gras
302fe8fb19SBen Gras	std	%r8,8(%r6)		# save r8-r31
312fe8fb19SBen Gras	std	%r9,16(%r6)
322fe8fb19SBen Gras	std	%r10,24(%r6)
332fe8fb19SBen Gras	std	%r11,32(%r6)
342fe8fb19SBen Gras	std	%r12,40(%r6)
352fe8fb19SBen Gras	std	%r13,48(%r6)
362fe8fb19SBen Gras	std	%r14,56(%r6)
372fe8fb19SBen Gras	std	%r15,64(%r6)
382fe8fb19SBen Gras	std	%r16,72(%r6)
392fe8fb19SBen Gras	std	%r17,80(%r6)
402fe8fb19SBen Gras	std	%r18,88(%r6)
412fe8fb19SBen Gras	std	%r19,96(%r6)
422fe8fb19SBen Gras	std	%r20,104(%r6)
432fe8fb19SBen Gras	std	%r21,112(%r6)
442fe8fb19SBen Gras	std	%r22,120(%r6)
452fe8fb19SBen Gras	std	%r23,128(%r6)
462fe8fb19SBen Gras	std	%r24,136(%r6)
472fe8fb19SBen Gras	std	%r25,144(%r6)
482fe8fb19SBen Gras	std	%r26,152(%r6)
492fe8fb19SBen Gras	std	%r27,160(%r6)
502fe8fb19SBen Gras	std	%r28,168(%r6)
512fe8fb19SBen Gras	std	%r29,176(%r6)
522fe8fb19SBen Gras	std	%r30,184(%r6)
532fe8fb19SBen Gras	std	%r31,192(%r6)
542fe8fb19SBen Gras
552fe8fb19SBen Gras	li	%r3,0
562fe8fb19SBen Gras	blr
57*0a6a1f1dSLionel SambucEND(__setjmp14)
582fe8fb19SBen Gras
592fe8fb19SBen GrasENTRY(__longjmp14)
602fe8fb19SBen Gras	ld	%r8,8(%r6)		# load r8-r31
612fe8fb19SBen Gras	ld	%r9,16(%r6)
622fe8fb19SBen Gras	ld	%r10,24(%r6)
632fe8fb19SBen Gras	ld	%r11,32(%r6)
642fe8fb19SBen Gras	ld	%r12,40(%r6)
652fe8fb19SBen Gras	ld	%r13,48(%r6)
662fe8fb19SBen Gras	ld	%r14,56(%r6)
672fe8fb19SBen Gras	ld	%r15,64(%r6)
682fe8fb19SBen Gras	ld	%r16,72(%r6)
692fe8fb19SBen Gras	ld	%r17,80(%r6)
702fe8fb19SBen Gras	ld	%r18,88(%r6)
712fe8fb19SBen Gras	ld	%r19,96(%r6)
722fe8fb19SBen Gras	ld	%r20,104(%r6)
732fe8fb19SBen Gras	ld	%r21,112(%r6)
742fe8fb19SBen Gras	ld	%r22,120(%r6)
752fe8fb19SBen Gras	ld	%r23,128(%r6)
762fe8fb19SBen Gras	ld	%r24,136(%r6)
772fe8fb19SBen Gras	ld	%r25,144(%r6)
782fe8fb19SBen Gras	ld	%r26,152(%r6)
792fe8fb19SBen Gras	ld	%r27,160(%r6)
802fe8fb19SBen Gras	ld	%r28,168(%r6)
812fe8fb19SBen Gras	ld	%r29,176(%r6)
822fe8fb19SBen Gras	ld	%r30,184(%r6)
832fe8fb19SBen Gras	ld	%r31,192(%r6)
842fe8fb19SBen Gras
852fe8fb19SBen Gras	mr	%r6,%r4
862fe8fb19SBen Gras	mtlr	%r11
872fe8fb19SBen Gras	mtcr	%r12
882fe8fb19SBen Gras	mr	%r2,%r9
892fe8fb19SBen Gras	mr	%r1,%r10
902fe8fb19SBen Gras	addi	%r4,%r3,100		# &sigmask
912fe8fb19SBen Gras	li	%r3,3			# SIG_SETMASK
922fe8fb19SBen Gras	li	%r5,0
93*0a6a1f1dSLionel Sambuc	_DOSYSCALL(__sigprocmask14)	# assume no error	XXX
942fe8fb19SBen Gras	or.	%r3,%r6,%r6
952fe8fb19SBen Gras	bnelr
962fe8fb19SBen Gras	li	%r3,1
972fe8fb19SBen Gras	blr
98*0a6a1f1dSLionel SambucEND(__longjmp14)
99