.title setjump and longjump ; The VAX C runtime library uses the $unwind utility for ; implementing longjmp. That fails if your program does 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 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 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