1*2039Swnj# @(#)reset.s 4.1 (Berkeley) 12/21/80 2*2039Swnj# C library -- reset, setexit 3*2039Swnj 4*2039Swnj# reset(x) 5*2039Swnj# will generate a "return" from 6*2039Swnj# the last call to 7*2039Swnj# setexit() 8*2039Swnj# by restoring r6 - r12, ap, fp 9*2039Swnj# and doing a return. 10*2039Swnj# The returned value is x; on the original 11*2039Swnj# call the returned value is 0. 12*2039Swnj# 13*2039Swnj# useful for going back to the main loop 14*2039Swnj# after a horrible error in a lowlevel 15*2039Swnj# routine. 16*2039Swnj 17*2039Swnj.globl _setexit 18*2039Swnj.globl _reset 19*2039Swnj 20*2039Swnj .align 1 21*2039Swnj_setexit: 22*2039Swnj .word 0x0000 23*2039Swnj movab setsav,r0 24*2039Swnj movq r6,(r0)+ 25*2039Swnj movq r8,(r0)+ 26*2039Swnj movq r10,(r0)+ 27*2039Swnj movq 8(fp),(r0)+ # ap, fp 28*2039Swnj movab 4(ap),(r0)+ # sp 29*2039Swnj movl 16(fp),(r0) # pc 30*2039Swnj clrl r0 31*2039Swnj ret 32*2039Swnj 33*2039Swnj .align 1 34*2039Swnj_reset: 35*2039Swnj .word 0x0000 36*2039Swnj movl 4(ap),r0 # returned value 37*2039Swnj movab setsav,r1 38*2039Swnj movq (r1)+,r6 39*2039Swnj movq (r1)+,r8 40*2039Swnj movq (r1)+,r10 41*2039Swnj movq (r1)+,r12 42*2039Swnj movl (r1)+,sp 43*2039Swnj jmp *(r1) 44*2039Swnj 45*2039Swnj .data 46*2039Swnjsetsav: .space 10*4 47