xref: /plan9/sys/src/libc/power/setjmp.s (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1*7dd7cddfSDavid du ColombierTEXT	setjmp(SB), 1, $-4
2*7dd7cddfSDavid du Colombier	MOVW	LR, R4
3*7dd7cddfSDavid du Colombier	MOVW	R1, (R3)
4*7dd7cddfSDavid du Colombier	MOVW	R4, 4(R3)
5*7dd7cddfSDavid du Colombier	MOVW	$0, R3
6*7dd7cddfSDavid du Colombier	RETURN
7*7dd7cddfSDavid du Colombier
8*7dd7cddfSDavid du ColombierTEXT	longjmp(SB), 1, $-4
9*7dd7cddfSDavid du Colombier	MOVW	R3, R4
10*7dd7cddfSDavid du Colombier	MOVW	r+4(FP), R3
11*7dd7cddfSDavid du Colombier	CMP	R3, $0
12*7dd7cddfSDavid du Colombier	BNE	ok		/* ansi: "longjmp(0) => longjmp(1)" */
13*7dd7cddfSDavid du Colombier	MOVW	$1, R3		/* bless their pointed heads */
14*7dd7cddfSDavid du Colombierok:	MOVW	(R4), R1
15*7dd7cddfSDavid du Colombier	MOVW	4(R4), R4
16*7dd7cddfSDavid du Colombier	MOVW	R4, LR
17*7dd7cddfSDavid du Colombier	BR	(LR)
18*7dd7cddfSDavid du Colombier
19*7dd7cddfSDavid du Colombier/*
20*7dd7cddfSDavid du Colombier * trampoline functions because the kernel smashes r1
21*7dd7cddfSDavid du Colombier * in the uregs given to notejmp
22*7dd7cddfSDavid du Colombier */
23*7dd7cddfSDavid du ColombierTEXT	__noterestore(SB), 1, $-4
24*7dd7cddfSDavid du Colombier	MOVW	R4, R3
25*7dd7cddfSDavid du Colombier	MOVW	R5, LR
26*7dd7cddfSDavid du Colombier	BR	(LR)
27