xref: /netbsd/lib/libc/arch/powerpc/gen/_setjmp.S (revision bf9ec67e)
1/*	$NetBSD: _setjmp.S,v 1.1 1997/03/29 20:55:53 thorpej Exp $	*/
2
3#include <machine/asm.h>
4
5#if defined(LIBC_SCCS)
6	.text
7	.asciz "$NetBSD: _setjmp.S,v 1.1 1997/03/29 20:55:53 thorpej Exp $"
8#endif
9
10/*
11 * C library -- _setjmp, _longjmp
12 *
13 *	_longjmp(a,v)
14 * will generate a "return(v?v:1)" from the last call to
15 *	_setjmp(a)
16 * by restoring registers from the stack.
17 * The previous signal state is NOT restored.
18 */
19
20ENTRY(_setjmp)
21	mflr	11
22	mfcr	12
23	mr	10,1
24	mr	9,2
25	stmw	9,8(3)
26	li	3,0
27	blr
28
29ENTRY(_longjmp)
30	lmw	9,8(3)
31	mtlr	11
32	mtcr	12
33	mr	2,9
34	mr	1,10
35	or.	3,4,4
36	bnelr
37	li	3,1
38	blr
39