xref: /plan9-contrib/sys/src/ape/lib/ap/riscv/setjmp.s (revision ce95e1b3727b9cb1c223ffbed69aff21a8ced255)
1*ce95e1b3SDavid du Colombierarg=8
2*ce95e1b3SDavid du Colombierlink=1
3*ce95e1b3SDavid du Colombiersp=2
4*ce95e1b3SDavid du Colombier
5*ce95e1b3SDavid du ColombierTEXT	setjmp(SB), 1, $-4
6*ce95e1b3SDavid du Colombier	MOVW	R(sp), (R(arg+0))
7*ce95e1b3SDavid du Colombier	MOVW	R(link), 4(R(arg+0))
8*ce95e1b3SDavid du Colombier	MOVW	$0, R(arg)
9*ce95e1b3SDavid du Colombier	RET
10*ce95e1b3SDavid du Colombier
11*ce95e1b3SDavid du ColombierTEXT	sigsetjmp(SB), 1, $-4
12*ce95e1b3SDavid du Colombier	MOVW	savemask+4(FP), R(arg+2)
13*ce95e1b3SDavid du Colombier	MOVW	R(arg+2), 0(R(arg+0))
14*ce95e1b3SDavid du Colombier	MOVW	$_psigblocked(SB), R(arg+2)
15*ce95e1b3SDavid du Colombier	MOVW	R2, 4(R(arg+0))
16*ce95e1b3SDavid du Colombier	MOVW	R(sp), 8(R(arg+0))
17*ce95e1b3SDavid du Colombier	MOVW	R(link), 12(R(arg+0))
18*ce95e1b3SDavid du Colombier	MOVW	$0, R(arg+0)
19*ce95e1b3SDavid du Colombier	RET
20*ce95e1b3SDavid du Colombier
21*ce95e1b3SDavid du ColombierTEXT	longjmp(SB), 1, $-4
22*ce95e1b3SDavid du Colombier	MOVW	r+4(FP), R(arg+2)
23*ce95e1b3SDavid du Colombier	BNE	R(arg+2), ok		/* ansi: "longjmp(0) => longjmp(1)" */
24*ce95e1b3SDavid du Colombier	MOVW	$1, R(arg+2)		/* bless their pointed heads */
25*ce95e1b3SDavid du Colombierok:	MOVW	(R(arg+0)), R(sp)
26*ce95e1b3SDavid du Colombier	MOVW	4(R(arg+0)), R(link)
27*ce95e1b3SDavid du Colombier	MOVW	R(arg+2), R(arg+0)
28*ce95e1b3SDavid du Colombier	RET
29