1*13790Ssam/* 2*13790Ssam * @(#)reset.s 4.2 (Berkeley) 07/05/83 3*13790Ssam * C library -- reset, setexit 4*13790Ssam * 5*13790Ssam * reset(x) 6*13790Ssam * will generate a "return" from 7*13790Ssam * the last call to 8*13790Ssam * setexit() 9*13790Ssam * by restoring r6 - r12, ap, fp 10*13790Ssam * and doing a return. 11*13790Ssam * The returned value is x; on the original 12*13790Ssam * call the returned value is 0. 13*13790Ssam * 14*13790Ssam * useful for going back to the main loop 15*13790Ssam * after a horrible error in a lowlevel 16*13790Ssam * routine. 17*13790Ssam */ 18*13790Ssam#include "DEFS.h" 192039Swnj 20*13790SsamENTRY(setexit) 212039Swnj movab setsav,r0 222039Swnj movq r6,(r0)+ 232039Swnj movq r8,(r0)+ 242039Swnj movq r10,(r0)+ 252039Swnj movq 8(fp),(r0)+ # ap, fp 262039Swnj movab 4(ap),(r0)+ # sp 272039Swnj movl 16(fp),(r0) # pc 282039Swnj clrl r0 292039Swnj ret 302039Swnj 31*13790SsamENTRY(reset) 322039Swnj movl 4(ap),r0 # returned value 332039Swnj movab setsav,r1 342039Swnj movq (r1)+,r6 352039Swnj movq (r1)+,r8 362039Swnj movq (r1)+,r10 372039Swnj movq (r1)+,r12 382039Swnj movl (r1)+,sp 392039Swnj jmp *(r1) 402039Swnj 412039Swnj .data 422039Swnjsetsav: .space 10*4 43