166926Sobrien/*	$NetBSD: _setjmp.S,v 1.1 1997/03/29 20:55:53 thorpej Exp $	*/
266926Sobrien
366926Sobrien#include <machine/asm.h>
466926Sobrien
566928Sobrien#if (defined(LIBC_SCCS) || defined(LIBC_RCS)) && !defined(lint)
666926Sobrien	.text
766928Sobrien	.asciz "$FreeBSD$"
866926Sobrien#endif
966926Sobrien
1066926Sobrien/*
1166926Sobrien * C library -- _setjmp, _longjmp
1266926Sobrien *
1366926Sobrien *	_longjmp(a,v)
1466926Sobrien * will generate a "return(v?v:1)" from the last call to
1566926Sobrien *	_setjmp(a)
1666926Sobrien * by restoring registers from the stack.
1766926Sobrien * The previous signal state is NOT restored.
1866926Sobrien */
1966926Sobrien
2066926SobrienENTRY(_setjmp)
2166926Sobrien	mflr	11
2266926Sobrien	mfcr	12
2366926Sobrien	mr	10,1
2466926Sobrien	mr	9,2
2566926Sobrien	stmw	9,8(3)
2666926Sobrien	li	3,0
2766926Sobrien	blr
2866926Sobrien
2966926SobrienENTRY(_longjmp)
3066926Sobrien	lmw	9,8(3)
3166926Sobrien	mtlr	11
3266926Sobrien	mtcr	12
3366926Sobrien	mr	2,9
3466926Sobrien	mr	1,10
3568544Sbenno	mr	3,4
3666926Sobrien	blr
37