xref: /plan9/sys/src/ape/lib/ap/386/setjmp.s (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1219b2ee8SDavid du ColombierTEXT	longjmp(SB), $0
2219b2ee8SDavid du Colombier	MOVL	r+4(FP), AX
3219b2ee8SDavid du Colombier	CMPL	AX, $0
4219b2ee8SDavid du Colombier	JNE	ok		/* ansi: "longjmp(0) => longjmp(1)" */
5219b2ee8SDavid du Colombier	MOVL	$1, AX		/* bless their pointed heads */
6219b2ee8SDavid du Colombierok:	MOVL	l+0(FP), BX
7219b2ee8SDavid du Colombier	MOVL	0(BX), SP	/* restore sp */
8219b2ee8SDavid du Colombier	MOVL	4(BX), BX	/* put return pc on the stack */
9219b2ee8SDavid du Colombier	MOVL	BX, 0(SP)
10219b2ee8SDavid du Colombier	RET
11219b2ee8SDavid du Colombier
12219b2ee8SDavid du ColombierTEXT	setjmp(SB), $0
13219b2ee8SDavid du Colombier	MOVL	l+0(FP), AX
14219b2ee8SDavid du Colombier	MOVL	SP, 0(AX)	/* store sp */
15219b2ee8SDavid du Colombier	MOVL	0(SP), BX	/* store return pc */
16219b2ee8SDavid du Colombier	MOVL	BX, 4(AX)
17219b2ee8SDavid du Colombier	MOVL	$0, AX		/* return 0 */
18219b2ee8SDavid du Colombier	RET
19*7dd7cddfSDavid du Colombier
20*7dd7cddfSDavid du ColombierTEXT	sigsetjmp(SB), $0
21*7dd7cddfSDavid du Colombier	MOVL	buf+0(FP), AX
22*7dd7cddfSDavid du Colombier	MOVL	savemask+4(FP),BX
23*7dd7cddfSDavid du Colombier	MOVL	BX,0(AX)
24*7dd7cddfSDavid du Colombier	MOVL	$_psigblocked(SB),4(AX)
25*7dd7cddfSDavid du Colombier	MOVL	SP, 8(AX)	/* store sp */
26*7dd7cddfSDavid du Colombier	MOVL	0(SP), BX	/* store return pc */
27*7dd7cddfSDavid du Colombier	MOVL	BX, 12(AX)
28*7dd7cddfSDavid du Colombier	MOVL	$0, AX		/* return 0 */
29*7dd7cddfSDavid du Colombier	RET
30