;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED ; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ; ;COPYRIGHT (C) 1977,1978 BY DIGITAL EQUIPMENT CORPORATION TITLE LOONCE - BLISS-10 COMPILER INITIALIZATION ;FILENAME: LOONCE.MAC ;DATE: 21 DECEMBER 73 CMU/MGM/FLD/KR ; REVISION HISTORY ; 12-29-77 POC TABLE IS EXTENDED TO ADD KI10 INSTRUCTION SET TO ; KA10 INSTRUCTION SET. THE SIZE OF POC TABLE IS ALSO ; INCREASED. ; 5-10-77 CHARACTER TYPE TABLE IS LOADED INTO LOWSEG ; BECAUSE "_" IS AN ALPHACHARACTER IN BLS36C ; AND ASSIGNMENT IN BLISS-10.TYPE TABLE GETS MODIFIED ; UNDER BLS36C SWITCH."_" IS MADE AS ALPHACHARACTER IN ; ROUTINE SWITCHER AND USED IN SKAN ROUTINE. ;--------------------------------------------------------------------- ;********************************************************************* ; ; ; BLISS COMPILER "ONCE-ONLY" MODULE ; ------------------------------------- ; ; THIS FILE CONTAINS THE CODE TO INITIALIZE THE MAJOR BLISS COMPILER ; TABLES (EG., THE SYMBOL TABLE).IT IS INVOKED ONLY ONCE FOR EACH ; TIME THE COMPILER IS LOADED. ; MANY OF THE VARIABLES DECLARED "EXTERNAL" IN OTHER MODULES ARE ; DEFINED HERE. IN PARTICULAR THE MASTER TABLE, "TABLE", IS DECLARED ; HERE IN SUCH A WAY THAT IT OVERWRITES THE ONCEONLY CODE. ; ; ; ;********************************************************************* ;--------------------------------------------------------------------- ; REVISION HISTORY ; 1/26/77 GLOBAL DLCNT ADDED (NUMBER OF DELETE CHARACTERS FOUND ; IN THE INPUT LINE). ; ADD LOAD& AND LIBRARY& KEYWORDS TO THE SYMBOL TABLE. ; LOONV=: 16 ;MODULE VERSION NUMBER TWOSEG RELOC 0 ; LOWSEG ;************* V E R S I O N N U M B E R ******************* LASTED==:0 ;LAST EDITOR ;0 = DEC SOFTWARE DEV ;1 = OTHER DEC ;2-4 = CUSTOMER ;5-7 = CUSTOMER OF CUSTOMER MAJVER==:7 ;MAJOR VERSION NUMBER MINVER==:5 ;MINOR VERSION NUMBER EDNUM==:^D151 ;EDIT NUMBER LOC 137 ; .JBVER EXP B2+B11+B17+ RELOC SALL ; SUPPRESS MACRO EXPANSIONS ;EXTERNAL DECLARATIONS ;--------------------- EXTERNAL STINSERT, ERROR, INSTVECTOR, .JBREL ;%2.29% EXTERNAL SLEAVE,SDECLABEL,SREQUIRE ;V2H EXTERNAL SLOAD,SLIBRARY EXTERNAL SPAROPEN,SSELECT,SCREATE,SEXCHJ EXTERNAL SCOMPOUND,SCASE,SREP,SIF,SSET,SWU,SDO,SPLIT EXTERNAL SLOCAL,SREGISTER,SOWN,SGLOBAL,SEXTERNAL,SFUNCTION EXTERNAL SROUTINE,SSTRUCTURE,SMAP,SBIND,SMACRO,SMODHEAD,SFORWARD,SLINKAGE EXTERNAL SMACHOP,SSWITCHES, SESCAPE,SALLMACHOP,SUNDECLARE EXTERNAL GOR,GXOR,GEQV,GAND,GNOT,GLSS,GLEQ,GEQL,GNEQ EXTERNAL GGEQ,GGTR,GMOD,GDIV,GSLSH EXTERNAL GSTO,GADD,GSUB,GLSH,GDOT,GAT,SPTR,SSQOPEN,GMUL ; REGISTER USAGE ; -------------- $S=0 ; S-REG PTR TO TOP OF STACK $F=:2 ; F-REG PTR TO ACTUAL PARAMETERS AND LOCAL VARIABLES $V=:3 ; V-REG CONVEYOR OF ROUTINE VALUE R1==3 ; V-REG CONVEYER OF ROUTINE VALUE T1=R1+1 ; T1-T4 ARE HIGHLY TEMPORARY AND ARE NEVER SAVED T2=T1+1 T3=T2+1 T4=T3+1 R2=T4+1 ; R2-R10 ARE GENERAL REGISTERS WHICH MUST BE SAVED R3=R2+1 ; IN THE PROLOGS OF ROUTINES WHICH USE THEM R4=R3+1 R5=R4+1 R6=R5+1 R7=R6+1 R8=R7+1 ; MACROS FOR ROUTINES DEFINE DUMMY(X) DEFINE RCALL(R,A)< $A==0 IRP A,<$A==$A+1 PUSH $S,A>PUSHJ $S,R IFN $A,B17+$A]>> DEFINE ROUTINE(R,A)< ENTRY R R: PUSH $S,$F HRRZ $F,$S $N==1 $A==0 IRP A,<$A==$A+1>IRP A $N==$N+1>$N==1> DEFINE SAVREG(R)< IRP R,> DEFINE RETURN(NL,R)< IFN NL,B17+NL]> IRP R,POP $S,$F POPJ $S,> DEFINE BLKXIT(NL)< $N==$N-NL IFN NL,B17+NL]>> ; MACROS TO INIT TABLES DEFINE IST(STRING,LEX,ROUTINE)< RCALL(CONVT,[[ASCIZ/STRING/]]) RCALL(STINSERT,<[0],<[XWD LEX,ROUTINE]>>) > DEFINE IDT(CODE,LEX,ROUTINE)< XDUMMY==CODE IFGE XDUMMY-133, IFGE XDUMMY-72, MOVE T1,[XWD LEX,ROUTINE] MOVEM T1,DT+XDUMMY-40 > DEFINE IDT2(CODE,LEX,ROUTINE)< XDUMMY==CODE IFGE XDUMMY-133, IFGE XDUMMY-72, MOVE T1,[XWD LEX,ROUTINE] MOVEM T1,DT+XDUMMY > DEFINE IOCE(X)< IRP X,> DEFINE ISTG(STRING,TYP,ADINFO)< MOVEI R1,[ASCIZ/STRING/] RCALL(CONVT,R1) MOVEI R1,TYP LSH R1,1 ADDI R1,1 LSH R1,17 RCALL(STINSERT,)> ; DECLARATION OF THE VARIABLES DECLARED "EXTERNAL" IN OTHER MODULES ; ----------------------------------------------------------------------- DEPTH==:2000 ; MAX NUMBER OF WORDS FOR STACK DDEPTH==1000 ; MAX NUMBER OF WORDS FOR DUMP STACK HTSIZE==^D125 ; SIZE OF SYMBOL HASH TABLE EXPHTSIZE==^D31 ; SIZE OF EXTERNAL EXPRESSION HASH TABLE DTSIZE==100 ; SIZE OF DELIMITER TABLE PTMASK==777 LTMASK==777 AVLSZ==1000 FLAGS=:BXA+12 DEFINE DECLARE(X)> DEFINE VECDEC(X,N)< X:: BLOCK N> AVL:: BLOCK TSTACK:: BLOCK DDEPTH ; HERE'S THE CHARACTER TYPE TABLE ; ------------------------------- TYPEDOPE:: ; POINTERS TO THE TABLE POINT 4, TYPETAB, 3 POINT 4, TYPETAB, 7 POINT 4, TYPETAB, 11 POINT 4, TYPETAB, 15 POINT 4, TYPETAB, 19 POINT 4, TYPETAB, 23 POINT 4, TYPETAB, 27 POINT 4, TYPETAB, 31 TYPETAB: ; TYPE TABLE BYTE(4)17,17,17,16,17,17,17,11 ; 0- 7 BYTE(4)17,17,17,17,17,05,17,17 ; 10-17 BYTE(4)17,17,17,17,17,17,17,17 ; 20-27 BYTE(4)17,17,17,17,17,17,17,17 ; 30-37 BYTE(4)17,05,03,04,07,06,02,03 ; 40-47 BYTE(4)07,07,07,07,07,07,07,07 ; 50-57 BYTE(4)00,00,00,00,00,00,00,00 ; 60-67 BYTE(4)01,01,07,07,07,07,07,10 ; 70-77 BYTE(4)07,02,02,02,02,02,02,02 ; 100-107 BYTE(4)02,02,02,02,02,02,02,02 ; 110-117 BYTE(4)02,02,02,02,02,02,02,02 ; 120-127 BYTE(4)02,02,02,07,07,07,07,07 ; 130-137 BYTE(4)03,02,02,02,02,02,02,02 ; 140-147 BYTE(4)02,02,02,02,02,02,02,02 ; 150-157 BYTE(4)02,02,02,02,02,02,02,02 ; 160-167 BYTE(4)02,02,02,17,17,17,17,17 ; 170-177 ;THE ABOVE ARE NOT ZEROED IN ONCE AS PART OF THE "FIXED DATA BLOCK" DECLARE() ; NOTE: THIS MUST BE THE FIRST DECLARE FOR ALL STORAGE ; WHICH IS TO BE ZEROED AT ONCE-ONLY TIME ; THESE ARE FOR THE MACROS VECDEC(MCBUFF,3) DECLARE() ;V2H - STE INDEX OF LABEL CHAIN ENCOUNTERED BY ;V2H - EXPRESSION OR SOPERATOR. DECLARE() ;%2.34% INDEX OF FIRST ENTRY IN GLOBAL SYMBOL TABLE DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() ; DECLARE() ; DECLARE() ; DECLARE() ; DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() ; TOPOFTABLE FOR RE-INIT DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() DECLARE() ; TIMSTAT MUST FOLLOW STKSTAT VECDEC(FNSTAT,2) VECDEC(WDVECTOR,2) VECDEC(BXA,20) DECLARE() ; FLAG FOR DEBUG LINKAGE DECLARE() ; FLAG FOR BLISS-20C INTERFACE VECDEC(MMC,3) ; VECDEC(POC,130) ; VECDEC(OCE,40) ; VECDEC(MPOCDV,10) ; VECDEC(TYPETAB,21) ; VECDEC(TYPEDOPE,10) VECDEC(BUF1,24) VECDEC(BUF2,24) ; VECDEC(EBUF,2) ; VECDEC(IBUF,3) ; VECDEC(OBUF,3) ; VECDEC(Q.BUFF,3) ; VECDEC(PDBUF,20) VECDEC(SACCUM,2) ;V2G- TO SAVE THE CONTENTS OF ACCUM ON A HOLD VECDEC(ACCUM,^D28) VECDEC(GNAMES,9) VECDEC(MNAM,2) VECDEC(RREG,5) VECDEC(BUFF,^D30) ;ALLOW UP TO 145 CHARS PER LINE PLUS ONE WORD FOR TERMINATORS VECDEC(STRING,^D28) VECDEC(XHT,HTSIZE) VECDEC(EXPHT,EXPHTSIZE) VECDEC(HT,HTSIZE) VECDEC(DT,DTSIZE) VECDEC(LT,LTMASK+2) VECDEC(PT,2*) VECDEC(ART,^D20) VECDEC(RT,^D32) ; VECDEC(TTYSPEC,3) ; VECDEC(TTYOBH,3) ; VECDEC(LPTSPEC,3) ; VECDEC(LPTOBH,3) ; VECDEC(SPECS,20) VECDEC(GRAPHHEAD,40) ; VECDEC(REGS,20) VECDEC(STACK,DEPTH) VECDEC(IOBUFFERS,1100) ; SHOULD BE 300 + <<<# OF BUFFERS PER FILE> * 200> * 3> VECDEC(PTTRANST,PTMASK+1) ; VECDEC(LTTRANST,LTMASK+2) ; VECDEC(LTREFNO,1) ; VECDEC(SEGARG,1) ; VECDEC(SEGCALL,^D9) ; VECDEC(NOWSEG) LTNUM=10 ;%2.9% NUMBER OF LT AND LTTRANS MODULES VECDEC(LTBASE,LTNUM) ;%2.9% BASE POINTERS FOR LT MODULES VECDEC(LTTBASE,LTNUM) ;%2.9% BASE POINTER FOR LTTRANST MODULES DECLARE() ;%2.25% POINTER TO TEMP EXT LIST FROM EXPHT DECLARE() ;%2.25% COUNT OF EXTERN NAMES OUTPUT TO MACRO LIST DECLARE() ;%2.25% OFFSET OF CURRENT CONSTANT IN THIS CONSTANT AREA DECLARE() ;2.25 NUMBER OF NEXT LABEL TO BE ASSIGNED VECDEC(ONAME,2) ;2.25 THE FOLLOWING HOLDS ASCIZ MODULE SYMBOL NAMES VECDEC(GNAME,2) ;2.25 VECDEC(FNAME,2) ;2.25 VECDEC(CNAME,2) ;2.25 VECDEC(LNAME,2) ;2.25 VECDEC(TNAME,2) ;2.25 VECDEC(PNAME,2) ;2.25 VECDEC(PTREFNO,1) ; VECDEC(ACSTOR,4) VECDEC(RBREG,1) ; 3.36 VECDEC(RENTLEX,17) VECDEC(RXITLEX,17) DECLARE() ; 3.18 VECDEC(ERRFIL,4) ; 3.18 DECLARE() ; 3.22 & 3.18 DECLARE() ; 3.24 & 3.31 DECLARE() EFDB: 0 RELOC 400000 ; TO HISEG ; AREAS THAT ARE NOT WRITTEN OVER BY "TABLE" ROUTINE(CONVT,FROM) SAVREG MOVE R2,[-2] MOVEM R2,ACCUM MOVEM R2,ACCUM+1 MOVE R2,[POINT 7,0,34] OR R2,FROM SUBI R2,1 MOVE R3,[POINT 7,ACCUM-1,34] ILDB R4,R2 CAIN R4,0 JRST .+3 IDPB R4,R3 JRST .-4 RETURN 0, ; HERE'S THE MACHINE MNEMONIC TABLE ; --------------------------------- ; THE TABLE IS EXTENDED SO THAT KI10 INSTRUCTIONS ARE ADDED TO ; KA10 INSTRUCTION SET. 12-29-77 DEFINE MACMNE < IPOC(<, , ,,,,,, ,>) > J==0 DEFINE IPOC(X) > DEFINE COUNT(X) > MPOCDV:: MACMNE ; POINTERS TO DISP IN POC DEFINE IPOC(X) > DEFINE COUNT(X) > POC:: MACMNE ; ASCII FOR MACHINE MNEMONICS OCE:: IOCE(< . ., .I., .M., .S.>) IOCE(< . ., .I., .M., .B.>) IOCE(< . ., .Z., .O., .E.>) IOCE(< .N., .Z., .C., .O.>) IOCE(< . ., .E., .A., .N.>) IOCE(< . ., .L., .E., .LE., .A., .GE., .N., .G. >) RELOC ; TO LOWSEG ; THE ONCE-ONLY INITIALIZATION CODE FOLLOWS ; ------------------------------------------- ; THE INITIAL LOCATION OF TABLE IS PLACED HERE SO THAT THE TABLE ; WILL OVERWRITE THE ONCE-ONLY INITIALIZATION ROUTINE. CT::TABLE:: DECLARE() ROUTINE(ONCEONLY) EXTERNAL .JBSA, .JBFF, .JBREL SETZM SFDB HRLI 3, SFDB HRRI 3, SFDB+1 BLT 3, EFDB ; ZERO THE ENTIRE FIXED DATA BLOCK MOVEM 7, ERRPPN ; 3.18 SAVE HOME PPN MOVEM 11, ERRDEV ; 3.18 HOME DEVICE NAME MOVE 3, [SIXBIT /BLIS10/] ; 3.18, ALSO ON 3-30-77 MOVEM 3, ERRFIL ; 3.18 MOVSI 3, (SIXBIT /ERR/) ; 3.18 MOVEM 3, ERRFIL+1 ; 3.18 AND EXT HRRZ T1,.JBREL ;SAVE ORIGINAL LOW SEGMENT SIZE FOR MOVEM T1,SAVJBREL ;SHRINKBACK AFTER EACH COMPILATION MOVEI T1,IOBUFFERS MOVEM T1,.JBFF HRLM T1,.JBSA MOVEI T1,1 MOVEM T1,FREEHEAD ; FREEHEAD_1; MOVEI T1,4 MOVEM T1,TOPOFTABLE ; TOPOFTABLE_4; HRRZ T1, .JBREL SUBI T1, TABLE ; INITIAL LENGTH OF TABLE MOVEM T1,ENDOFSPACE ; ENDOFSPACE_ SIZE (OF BASIC TABLE) SETZM ENDLK ; ENDLK_0; ; INIT A FEW USEFUL MACHINE OPS INTI ST ISTG MOVE,40,200 ISTG MOVEI,40,201 ISTG MOVEM,40,202 ISTG PUSH,40,261 ISTG POP,40,262 ISTG PUSHJ,40,260 ISTG POPJ,40,263 ISTG BLT,40,251 ISTG EXCH,40,250 ISTG JSR,40,264 ISTG JSP,40,265 ISTG JRST,40,254 ISTG LDB,40,135 ISTG ILDB,40,134 ISTG DPB,40,137 ISTG IDPB,40,136 ISTG IBP,40,133 IST FADR,261720,GFADR IST FSBR,262700,GFSBR IST FMPR,244720,GFMLR IST FDVR,245700,GFDVR IST FNEG,263504,GFNEG ;3.34 IST FLOAT,223504,GFLOAT ;2.21 & 3.34 IST FIX,223504,GFIX ;2.21 & 3.34 EXTERNAL GFADR,GFSBR,GFMLR,GFDVR,GFNEG,GFLOAT,GFIX ; DEFN OF THE SPL-FCN NAMES ISTG SCANN,41,1 ISTG SCANI,41,2 ISTG REPLACEN,41,3 ISTG REPLACEI,41,4 ISTG COPYNN,41,5 ISTG COPYNI,41,6 ISTG COPYIN,41,7 ISTG COPYII,41,10 ISTG INCP,41,11 ISTG A.SHIFT,41,12 ; ASH SPECIAL FUNCTION %7-JUN-77% ISTG ASH.,41,12 ; ASH SPECIAL FUNCTION %7-JUN-77% ISTG ROT.,41,13 ; ROT SPECIAL FUNCTION %7-JUN-77% ISTG LSH.,41,14 ; LSH SPECIAL FUNCTION %7-JUN-77% ; DEFN OF THE SPL-UNOP NAMES ISTG FIRSTONE,43,0;GJFFO ISTG ABS,43,1;GMOVM ISTG SIGN,43,2;GSGN ISTG OFFSET,43,3;GOFFSET !%2.10% OFFSET FUNCTION ; DEFN OF THE RESERVED WORD DELIMITERS IST BEGIN,2560,SCOMPOUND IST CASE,1140,SCASE IST DECR,1100,SREP IST IF,2140,SIF IST IFSKIP,2141,SIF IST INCR,2100,SREP IST SET,7140,SSET IST UNTIL,4140,SWU IST WHILE,5140,SWU IST DO,3140,SDO IST LEAVE,3141,SLEAVE ;V2H - LEAVE ESCAPE EXPRESSSION IST WITH,405000,0 ;V2H IST LABEL,600001,SDECLABEL ;V2H - LABEL DECLARATION IST CREATE,1541,SCREATE IST EXCHJ,1542,SEXCHJ IST LENGTH,400101,0 IST AT,400102,0 IST END,400020,0 IST OF,401000,0 IST FROM,401040,0 IST THEN,400040,0 IST TO,402040,0 IST TES,400000,0 IST ELSE,406040 IST BY,402041 IST SELECT,1540,SSELECT IST NSET,400100 IST TESN,400200 IST ALWAYS,400260 IST OTHERWISE,400264 IST OR,340730,GOR IST XOR,361730,GXOR IST EQV,362730,GEQV IST AND,320730,GAND IST NOT,311514,GNOT IST LSS,301710,GLSS IST LEQ,303710,GLEQ IST EQL,302730,GEQL IST NEQ,306730,GNEQ IST GEQ,305710,GGEQ IST GTR,307710,GGTR IST MOD,246700,GMOD IST DIV,245700,GDIV IST NAMES,400010,0 IST INDEXES,400011,0 IST GLOBALLY,400012,0 IST LOCAL,600020,SLOCAL IST REGISTER,601020,SREGISTER IST OWN,600012,SOWN IST GLOBAL,601012,SGLOBAL IST PORTAL,601013,SGLOBAL IST EXTERNAL,600002,SEXTERNAL IST FUNCTION,601024,SFUNCTION IST REQUIRE,600003,SREQUIRE IST LOAD.,600003,SLOAD IST LIBRARY.,600003,SLIBRARY IST ROUTINE,602024,SROUTINE IST STRUCTURE,600014,SSTRUCTURE IST MAP,601002,SMAP IST BIND,602002,SBIND IST MACRO,600016,SMACRO IST TRAP,602020,ERROR IST FORWARD,600000,SFORWARD IST LINKAGE,600004,SLINKAGE IST ENTXIT,604000,ERROR ;6040XX FOR LINKAGE TYPES IST UNDECLARE,603002,SUNDECLARE IST BREAK,1140,SESCAPE IST RETURN,2140,SESCAPE IST EXITLOOP,1140,SESCAPE IST EXITCOMPOU,1141,SESCAPE IST EXITCOMP,1141,SESCAPE IST EXITBLOCK,1142,SESCAPE IST EXITCONDIT,1143,SESCAPE IST EXITCOND,1143,SESCAPE IST EXITSELECT,2141,SESCAPE IST EXITCASE,2142,SESCAPE IST EXITSET,2143,SESCAPE IST EXIT,3140,SESCAPE IST MACHOP,602034,SMACHOP IST ALLMACHOP,602034,SALLMACHOP IST SWITCHES,602034,SSWITCHES IST MODULE,2563,SMODHEAD IST ELUDOM,400023,0 IST PLIT,5560,SPLIT IST UPLIT,5561,SPLIT IST(SEMICOLON,400360,0) IDT "_",370740,GSTO IDT "+",261720,GADD MOVEM T1,LXPLUS IDT "-",262700,GSUB IDT "/",245700,GDIV IDT "^",221700,GLSH IDT ".",211504,GDOT ;2.21 IDT "@",212504,GAT ;2.21 IDT "\",213504,GSLSH ;2.21 IDT "(",3750,SPAROPEN MOVEM T1,LXOPEP IDT 74,2750,SPTR ;< MOVEM T1,LXOPEA IDT "[",4750,SSQOPEN IDT 73,400060,0 ;; IDT ")",401020,0 MOVEM T1,LXCLOP IDT 54,401060,0 ;, MOVEM T1,LXCOMMA IDT 76,402020,0 ;> MOVEM T1,LXCLOA IDT "=",370740,GSTO ; (5.200.14) IDT "=",407020,0 IDT "]",403020,0 IDT "*",244720,GMUL IDT ":",403060,0 IDT2 "+",261720,GFADR IDT2 "-",262700,GFSBR IDT2 "*",244720,GFMLR IDT2 "/",245700,GFDVR RCALL(INSTVECTOR) ; HERE WE SAVE THE TOP-OF-TABLE POINTER FOR RE-INITS MOVE T1,TOPOFTABLE HRRZM T1,RETOT ;SAVE TOP OF TABLE IN RH MOVE T1,ENDOFSPACE HRLM T1,RETOT ;SAVE BOTTOM OF TABLE IN LH RETURN 0 RELOC ; TO HISEG FOR LITERALS XLIST ; LITERALS LIT LIST END ; OF THE ONCE-ONLY INITIALIZATION ROUTINE