; File: SIGENB.MAC ; ; This work was supported by the Advanced Research ; Projects Agency of the Office of the Secretary of ; Defense (F44620-73-C-0074) and is monitored by the ; Air Force Office of Scientific Research. .TITLE SIGENB .CSECT SIGE.C ; The BLISS-11 out of line routines to handle SIGNAL's and ; ENABLE frame creation. ; ; 11-Nov-73 P. Knueven ; ; The dynamically nested occurrences of ENABLE declarations ; are recorded in the LIFO ENABLE stack. This is implemented ; as a linked list of 3-word stack frames. The current top of ; the stack is pointed to by .SIGREG. An ENABLE frame is ; created each time an ENABLE declaration is "executed". ; It looks like the following: ; ; Offset Contents ; 0 Pointer to most recent previous frame ; 2 Value of SP for the ENABLE body ; 4 Pointer to the ENABLE body ; .GLOBL $SIGNL,$SIGN1 .GLOBL $ENABL .GLOBL SIGVAL,SIGREG R0=%0 SP=%6 PC=%7 ; Calling Sequence ; MOV E,R0 ; JMP $SIGNL ; $SIGNL: MOV R0,SIGVAL $SIGN1: MOV SIGREG,R0 MOV (R0)+,SIGREG MOV (R0)+,SP MOV (R0)+,PC ; Calling Sequence ; MOV #n+6,R0 ; JSR PC,$ENABL ; .WORD L2-L1 ; L1: ; ... ENABLE body ... ; L2: ; ; where n is 2 plus the offset into the stack of the ; space reserved for the frame ; $ENABL: ADD SP,R0 MOV (SP),(R0) ADD #2,(R0) ; REPLACE THESE THREE INSTRUCTIONS WITH MOV @(SP),(SP) ; ADD #4,R0 ADD (R0),(SP) ; WHEN USING THE /G SWITCH (SEGMENTATION SUPPORT FOR CASE & SIG/ENB) MOV SP,-(R0) ADD #2,(R0) MOV SIGREG,-(R0) MOV R0,SIGREG RTS PC $EXIT: HALT $LEV0: .WORD 0,0,$EXIT SIGREG: .WORD $LEV0 SIGVAL: .WORD 0 .END