|
|
1.1 ! root 1: # Copyright (c) 1979 Regents of the University of California ! 2: # ! 3: # sccsid[] = "@(#)GOTO.s 1.3 6/10/81"; ! 4: # ! 5: .set EGOTO,13 #this is dependent upon errdata ! 6: .set PC,16 ! 7: ! 8: .data ! 9: jmplbl: ! 10: .long 0 ! 11: frame: ! 12: .long 0 ! 13: .text ! 14: ! 15: .globl _GOTO ! 16: .align 1 ! 17: _GOTO: ! 18: .word 0 ! 19: movl *4(ap),frame #save parameters ! 20: movl PC(fp),jmplbl ! 21: moval unwind,PC(fp) #begin unwinding ! 22: ret ! 23: unwind: ! 24: tstl (fp) #check for exception vector ! 25: bneq L1 ! 26: cmpl ap,__disply+8 #check for past global procedure ! 27: bgequ egoto ! 28: moval unwind,PC(fp) #blow away this stack frame ! 29: ret ! 30: L1: ! 31: cmpl ap,frame #check for requested frame ! 32: bgtru egoto #lost it somewhere ! 33: blssu L2 #not there yet ! 34: jmp *jmplbl #proceed in this section ! 35: L2: ! 36: pushl -4(fp) #level of this frame ! 37: calls $1,*(fp) #call the exception handler ! 38: movq -12(fp),*-4(fp) #restore the display ! 39: moval unwind,PC(fp) #blow away this stack frame ! 40: ret ! 41: egoto: ! 42: pushl $0 ! 43: pushal L3 ! 44: calls $2,_ERROR ! 45: ret ! 46: L3: ! 47: .asciz "Active frame not found in non-local goto\n"
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.