Trailing-Edge
-
PDP-10 Archives
-
decuslib10-05
-
43,50337/10/sh.mac
There is 1 other file named sh.mac in the archive. Click here to see a list.
COMMENT;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
AUTHOR: CLAES WIHLBORG
VERSION: 8
PURPOSE: SYMBOL TABLE (ZSE) HANDLING
CONTENT: SH
SHNEW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SEARCH SIMMC1,SIMMAC
SALL
CTITLE SH (SYMBOL HASH)
INTERN SH
EXTERN YMAXID,ZHT,ZSE1,ZSE2,ZSE3
EXTERN YELIN1,YELIN2,YESEM
EXTERN T1AB
MACINIT
TWOSEG
RELOC 400000
DEFINE ERROR(MESSAGE)<
; IFG QDEBUG,<
; OUTSTR [ASCIZ/
;ERROR: MESSAGE/]
; >
IFN QERIMP,<
LF ,YLSCLIN
ST YELIN1
ST YELIN2
LF ,YLSCSEM
ST YESEM
ERR QT,Q1SH.T
>
>
SUBTTL SH
COMMENT;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
FUNCTION:
SH (SYMBOL HASH) TAKES AN IDENTIFIER AND TRANSFORMS
IT TO AN INTERNAL IDENTIFIER NUMBER.
ARGUMENTS:
X1ID1-X1ID2 CONTAINS IDENTIFIER IN SIXBIT
RETURN:
IF MORE THAN 3072 IDENTIFIERS BRANCH TO T1AB
ELSE RETURN.
RETURN ARGUMENT:
X1NXT:= IF INSERTION NOT ALLOWED AND IDENTIFIER NOT FOUND
THEN ZERO ELSE IDENTIFIER NUMBER.
THE IDENTIFIER NUMBER HAS THE VALUE:
(1024-QNRESW) TO 1023 IF RESERWED WORD
1024 TO 4095 IF IDENTIFIER
ACCUMULATOR CONVENTIONS:
X0 AND X1 ARE DESTROYED.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SH: PROC
;HASH IDENTIFIER
L X0,X1ID1
MUL X0,[QHASHM]
ANDI X0,177
L X1,X0
;HASH-TABLE LOOKUP
SKIPN X1NXT,ZHT(X1)
GOTO [;FIRST IDENTIFIER HASHED TO THIS ENTRY
IFONA YZSE
RETURN ;ZERO
EXEC SHNEW
ST X1NXT,ZHT(X1)
RETURN]
;TRAVERSE BINARY TREE
SHLOOP:
LI X1,0(X1NXT)
CAME X1ID1,YZSE1(X1)
GOTO SHL
CAME X1ID2,YZSE2(X1)
GOTO SHH
RETURN ;IDENTIFIER FOUND
SHL:
CAML X1ID1,YZSE1(X1)
GOTO SHH1
SHL1:
HRR X1NXT,YZSE3(X1)
JUMPG X1NXT,SHLOOP
IFONA YZSE
RETURN ;ZERO
EXEC SHNEW
HRRM X1NXT,YZSE3(X1)
RETURN
SHH:
CAMG X1ID2,YZSE2(X1)
GOTO SHL1
SHH1:
HLR X1NXT,YZSE3(X1)
JUMPG X1NXT,SHLOOP
IFONA YZSE
RETURN ;ZERO
EXEC SHNEW
HRLM X1NXT,YZSE3(X1)
RETURN
EPROC
SUBTTL SHNEW
COMMENT;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
FUNCTION: THIS SUBROUTINE IS CALLED FROM SH WHEN A NEW IDENTIFIER
SHOULD BE INSERTED IN ZSE
ENTRY AND EXIT CONDITIONS:
SAME AS FOR SH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SHNEW: PROC
L X1NXT,YMAXID
IF AOBJN X1NXT,FALSE
THEN
ERROR(MORE THAN 3072 IDENTIFIERS)
BRANCH T1AB
FI
ST X1NXT,YMAXID
TLZ X1NXT,-1 ;ZERO COUNTER
ST X1ID1,YZSE1(X1NXT)
ST X1ID2,YZSE2(X1NXT)
SETZM YZSE3(X1NXT)
RETURN
EPROC
LIT
END