BSD 4 release
[unix-history] / usr / src / cmd / lisp / reset.s
index 32d2659..1ea6cd3 100644 (file)
@@ -1,5 +1,5 @@
+       .asciz  "@(#)reset.s    34.1    10/3/80"
 # C library -- reset, setexit
 # C library -- reset, setexit
-
 #      reset(x)
 # will generate a "return" from
 # the last call to
 #      reset(x)
 # will generate a "return" from
 # the last call to
 # useful for going back to the main loop
 # after a horrible error in a lowlevel
 # routine.
 # useful for going back to the main loop
 # after a horrible error in a lowlevel
 # routine.
-
+# Changed by M. Marcus (4/4/80) to chain saved frames.  Should be rewritten
+# to only use the stack, avoiding need for resexit and getexit.
+# Setexit works as before, but getexit adds pointer
+# to the saved block when it pushes saved state onto stack. 
+# resexit restores this link by moving back extra word.
+# getexit and setexit are to be thought of as an (almost) unitary action.
 .globl _setexit
 .globl _getexit
 .globl _reset
 .globl _resexit
 .globl _setsav
 .globl _setexit
 .globl _getexit
 .globl _reset
 .globl _resexit
 .globl _setsav
+.globl _exitlnk
 .globl _svkludg
 
 _setexit:
 .globl _svkludg
 
 _setexit:
@@ -45,15 +51,15 @@ _reset:
 
 _resexit:
        .word   0x0000
 
 _resexit:
        .word   0x0000
-       movc3   $40,*4(ap),_setsav
+       movc3   $44,*4(ap),_setsav
        ret
 _svkludg:
        movl    (sp)+,out
        movq    r0,myregs
        movq    r2,myregs+8
        movq    r4,myregs+16
        ret
 _svkludg:
        movl    (sp)+,out
        movq    r0,myregs
        movq    r2,myregs+8
        movq    r4,myregs+16
-       subl2   $40,sp
-       movc3   $40,_setsav,(sp)
+       subl2   $44,sp
+       movc3   $44,_setsav,(sp)
        movq    myregs,r0
        movq    myregs+8,r2
        movq    myregs+16,r4
        movq    myregs,r0
        movq    myregs+8,r2
        movq    myregs+16,r4
@@ -61,12 +67,14 @@ _svkludg:
 
 _getexit:
        .word   0x0000
 
 _getexit:
        .word   0x0000
-       movc3   $40,_setsav,*4(ap)
+       movc3   $44,_setsav,*4(ap)
+       movl    4(ap), _exitlnk
        ret
 
        ret
 
-
+#exitlnk is to be thought of as the last word of the setsav area (11 longs long)
        .data
 _setsav:.space 10*4
        .data
 _setsav:.space 10*4
+_exitlnk:.space 4
 out:   .space  4
 myregs:        .space  6*4
 
 out:   .space  4
 myregs:        .space  6*4