Commit | Line | Data |
---|---|---|
72051fc8 BJ |
1 | # C library -- setjmp, longjmp |
2 | ||
3 | # longjmp(a,v) | |
4 | # will generate a "return(v)" from | |
5 | # the last call to | |
6 | # setjmp(a) | |
7 | # by restoring r6-pc from 'a' | |
8 | # and doing a return. | |
9 | # | |
10 | ||
11 | .globl _setjmp | |
12 | .globl _longjmp | |
13 | ||
14 | .align 1 | |
15 | _setjmp: | |
16 | .word 0x0000 | |
17 | movl 4(ap),r0 | |
18 | movq r6,(r0)+ | |
19 | movq r8,(r0)+ | |
20 | movq r10,(r0)+ | |
21 | movq 8(fp),(r0)+ # ap, fp | |
22 | movab 8(ap),(r0)+ # sp | |
23 | movl 16(fp),(r0) # pc | |
24 | clrl r0 | |
25 | ret | |
26 | ||
27 | .align 1 | |
28 | _longjmp: | |
29 | .word 0x0000 | |
30 | movl 8(ap),r0 # return(v) | |
31 | movl 4(ap),r1 | |
32 | movq (r1)+,r6 | |
33 | movq (r1)+,r8 | |
34 | movq (r1)+,r10 | |
35 | movq (r1)+,r12 | |
36 | movl (r1)+,sp | |
37 | tstl r0 | |
38 | bneq L1 | |
39 | movzbl $1,r0 | |
40 | L1: | |
41 | jmp *(r1) |