From 784ddf7a6378e2bde5729c37993af65cb58deef2 Mon Sep 17 00:00:00 2001 From: Matthias Benkard Date: Sat, 20 Sep 2008 12:11:00 +0200 Subject: Add continuation support files from SCM 5e5. --- SCM/setjump.mar | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 SCM/setjump.mar (limited to 'SCM/setjump.mar') diff --git a/SCM/setjump.mar b/SCM/setjump.mar new file mode 100644 index 0000000..3fc223c --- /dev/null +++ b/SCM/setjump.mar @@ -0,0 +1,39 @@ + .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 -- cgit v1.2.3