summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/h8300/setjmp.S
blob: 53ecf3dbe9c9184242e1434a9bce5dff4a145a4f (plain)
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
43
44
45
46
47
48
49
#ifdef __H8300S__
	.h8300s
#else
	.h8300h
#endif
	.text
	
.global __setjmp
.global ___sigsetjmp
.global ___longjmp

__setjmp:
___sigsetjmp:
	add.l	#20,er0
	mov.l	er6,@er0
	mov.l	er5,@-er0
	mov.l	er4,@-er0
	mov.l	er3,@-er0
	mov.l	er2,@-er0
	mov.l	er1,@-er0
	mov.l	sp,@(24,er0)
	mov.l	@sp,er1
	mov.l	er1,@(28,er0)
	sub.l	er0,er0
	rts

___longjmp:
	mov.l	er1,er1
	bne	1f
	sub.l	er1,er1
	inc.l	#1,er1
1:
	adds	#4,er0
	adds	#4,er0
	mov.l	@er0+,er3
	mov.l	@er0+,er4
	mov.l	@er0+,er5
	mov.l	@er0+,er6
	mov.l	@er0+,sp
	mov.l	@er0,er2
	mov.l	er2,@sp
	mov.l	er1,er2
	mov.l	er0,er1
	mov.l	er2,er0
	sub.l	#28,er1
	mov.l	@(4,er1),er2
	mov.l	@er1,er1
	rts