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
|
.title setjump and longjump
; The VAX C runtime library uses the $unwind utility for implementing
; longjmp. That fails if your program do not follow normal
; stack decipline. This is a dirty implementation of setjmp
; and longjmp that does not have that problem.
; the names longjmp and setjmp are avoided so that the code can be linked
; with the vax c runtime library without name clashes.
; This code was contributed by an anonymous reviewer from
; comp.sources.reviewed.
.entry setjump,^M<IV>
movl 4(ap),r0
movq r2,(r0)+
movq r4,(r0)+
movq r6,(r0)+
movq r8,(r0)+
movq r10,(r0)+
movl fp,(r0)+
movo 4(fp),(r0)+
movq 20(fp),(r0)
clrl r0
ret
.entry longjump,^M<IV>
movl 4(ap),r0
movq (r0)+,r2
movq (r0)+,r4
movq (r0)+,r6
movq (r0)+,r8
movq (r0)+,r10
movl (r0)+,r1
movo (r0)+,4(r1)
movq (r0),20(r1)
movl 8(ap),r0
movl r1,fp
ret
.end
|