summaryrefslogtreecommitdiffstats
path: root/setjump.mar
blob: 2b49243327fe1af5eb3f28de426677b7cbd9b6ae (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
        .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