summaryrefslogtreecommitdiff
path: root/src/setjmp/riscv64/longjmp.S
blob: 41e2d2102e73fd03b8fee1597100e2615c412ee3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
.global __longjmp
.global _longjmp
.global longjmp
.type __longjmp, %function
.type _longjmp,  %function
.type longjmp,   %function
__longjmp:
_longjmp:
longjmp:
	ld s0,    0(a0)
	ld s1,    8(a0)
	ld s2,    16(a0)
	ld s3,    24(a0)
	ld s4,    32(a0)
	ld s5,    40(a0)
	ld s6,    48(a0)
	ld s7,    56(a0)
	ld s8,    64(a0)
	ld s9,    72(a0)
	ld s10,   80(a0)
	ld s11,   88(a0)
	ld sp,    96(a0)
	ld ra,    104(a0)

#ifndef __riscv_float_abi_soft
	fld fs0,  112(a0)
	fld fs1,  120(a0)
	fld fs2,  128(a0)
	fld fs3,  136(a0)
	fld fs4,  144(a0)
	fld fs5,  152(a0)
	fld fs6,  160(a0)
	fld fs7,  168(a0)
	fld fs8,  176(a0)
	fld fs9,  184(a0)
	fld fs10, 192(a0)
	fld fs11, 200(a0)
#endif

	seqz a0, a1
	add a0, a0, a1
	ret