BSD 3 development
[unix-history] / usr / src / libc / sys / setjmp.s
CommitLineData
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
40L1:
41 jmp *(r1)