Trailing-Edge
-
PDP-10 Archives
-
AP-D480B-SB_1978
-
global.bli
There are 12 other files named global.bli in the archive. Click here to see a list.
!THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
! OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
!COPYRIGHT (C) 1973,1977 BY DIGITAL EQUIPMENT CORPORATION
MODULE GLOB(RESERVE(0,1,2,3),SREG=#17,FREG=#16,VREG=#15,DREGS=4,STACK=GLOBAL(STACK,500),GLOROUTINES)=
BEGIN
GLOBAL BIND GLOBV = 5^24 + 1^18 + 100; !VERSION DATE: 14-AUG-77
%(
REVISION HISTORY
53 ----- ----- ADD IMPLDO FOR I/O LIST OPTIMIZATIONS
54 ----- ----- CORRECT SIZE OF "RELBLOCK" TO 20 RATHER THAN 18
55 ----- ----- ADD LPRDCCT
56 ----- ----- ADD RDCLNK
57 ----- ----- DELETE M1 AND M3
ADD LOWLIM AND CELMNT
58 ----- ----- CHANGE IMPLDO TO IOPTFLG
59 ----- ----- ADD UNIQVAL FOR OPTIMIZER
60 ----- ----- GUESS
61 ----- ----- REMOVE FGP,ETC FOR NEW GRAPH SRUCTURE
62 ----- ----- CLEANUP P2 GLOBALS AND CHANGE POOLSIZ
63 ----- ----- PERFORM DABS IN LINE
64 ----- ----- DEFINE THE REL FILE BUFFERS:
MAINRLBF,SYMRLBF,LOCRLBF
DELETE THE DEFINTIONS OF:
RELBLOCK,RELDATA,RELOCPTR
65 ----- ----- DELETE A SERIES OF ENTRIES NO LONGER USED IN FORTB
66 ----- ----- GENERATE CMPLX IN LINE
67 ----- ----- REMOVE PROEPITYP
68 ----- ----- INCREASE THE CHANNEL TABLE SIZE TO INCLUDE "INCLUDE"
ADD THE GLOBAL NXXFIL WHICH HOLDS THE
ADDRESS OF NXTFIL IN COMMAN SO THAT IT
CAN BE CALLED BY PHAZ1 TO ALLOW THE
COMPILE "+" FILE CONCATINATION COMMAND TO
WORK
69 ----- ----- ADD GLOBAL DEBGSW TO HOLD DEBUG SWITCH SETTING
REMOVE NXXFIL
MOVE SAVREG FROM STA2 TO HERE SO THAT ITS DEFINED
FOR PHASE1
70 ----- ----- ADD GLOBAL BGSTBF - TO HOLD CORE REQUIREMENTS FOR
THE LARGEST INPUT FILE. CALCULATED IN COMMAN
71 ----- ----- ADD THE GLOBAL "ENDSCAA" - FOR ADDR OF
END OF SCALARS/ARRAYS
72 ----- ----- CHANGE THE NAME OF DOINDEX TO CURDOINDEX SO
THAT ALL REFERENCES GET CAUGHT
73 ----- ----- FIX PROBLEM OF DEFINITION OF VARIBLE DIMENSION
ARRAYS BEFORE THEIR DEFINITION IN AN ENTRY
BY DELAYING THE CHECK FOR THOSE DIMENSION
VARIABLES THAT FAIL THE TEST
SAVED IN STACK POINTED TO BY DIMSTK
74 351 MAKE NEW GLOBAL ARINGLEFT FOR FORTB
75 362 18245 INSERT OCTAL AND DOUBLE OCTAL IN EVALU TABLE
*** BEGIN VERSION 5
76 410 ----- MAKE NEW GLOBAL DTABPTR FOR FORTB
77 464 QA754 MAKE NEW GLOBALS LMLINO, LMRONO, LMCONO FOR
780 LINEMAP IN FORTG
100 607 22685 MAKE NEW GLOBAL NEDZER TO INDICATE IF
ZERO-ARG-BLOCK IS NEEDED
)%
SWITCHES NOLIST;
REQUIRE FIRST.BLI;
REQUIRE TABLES.BLI;
SWITCHES LIST;
BEGIN
MACRO TBLMAX=4$, !NUMBER OF CHANNELS USED
TBLSIZ=10$; !IMFORMATION PER CHANNEL
STRUCTURE MATRIX[I,J]=
(.MATRIX+(.I-1)*TBLSIZ+.J);
MACRO POOLSIZE=600$, !SIZE OF THE MAJOR CHARACTER QUEUE
STKSIZE=250$; !SIZE OF SYNTAX STACK
GLOBAL
POOL[POOLSIZE], !MAJOR CHARACTER QUEUE
STK[STKSIZE], !STACK FOR SYNTAX PROCESSING
MATRIX CHNLTBL[TBLMAX,TBLSIZ], !OPEN, LOOKUP/ENTER, & BUFER HEADER INFO
!FOR TBLMAX CHANNELS
IBLOCK[3], !PARAMETERS FOR ISCAN
TBLOCK[8], !PARAMETERS FOR TSCAN
LBLOCK[4], !PARAMETERS FOR LKWLD
GETSBLOK[6], !ARG BLOCK FOR GETSEG
FLGWRD, !TEMPORARY STORAGE FOR FLGREG WHILE IN COMMAND SCANNER
ISPEC, !POINTER TO INITIAL FILE SPEC
FSPEC, !POINTER TO FINAL FILE SPEC
CCLSW, !VALUE OF CCL ENTRY, 1=YES, 0=NO
INDEX, !CURRENT FILE SPEC
PAGE, !COUNT OF NUMBER OF PAGES OUTPUT
JOBFFSAVE; !STATE OF JOBFF PRIOR TO OPENING SRC
MACRO SSIZ = 79$, %SYMBOL HASH SIZE%
CSIZ = 37$, %CONSTANT HASH SIZE%
ESIZ = 79$, %EXPRESSION HASH SIZE%
LASIZ = 37$, %STATMENT NUMBER HASH SIZE%
COSIZ = 37$, %COMMON EQUIVALENCE HASH SIZE%
NSIZ = 17$, %NAMELIST HASH SIZE%
SOSIZ = 1$, %NO HASH TABLE FOR ENCODED SOURCE%
DISIZ = 1$, %NO HASH TABLE FOR DIMENSIONS%
DASIZ = 1$, %NO HASH TABLE FOR DATA STATEMENT%
LISIZ = 1$, %LITERAL TABLE IS NOT HASHED%
EHSIZ = 29$; %EXPRESSION HASH FOR CMN SUB ELIM%
!***************************************************************
!NOTE: ALL GLOBALS FROM SYMTBL TO GLOBEND INCLUSIVE WILL BE INITIALIZED
!TO ZERO IN MODULE CLASSIFIER BEFORE EACH COMPILATION.
GLOBAL SYMTBL[SSIZ],CONTBL[CSIZ],EXPTBL[ESIZ],LABTBL[LASIZ],
LITTBL[LISIZ],NAMTBL[NSIZ],SRCTBL[SOSIZ],
DIMTBL[DISIZ],DATTBL[DASIZ];
GLOBAL BASEPTR; !THIS CONTAINS THE POINTER TO THE MOST CURRENT ENTRY
!MADE BY THE TABLE HANDLERS
GLOBAL COMBLKPTR, !POINTERS FOR LAST AND FIRST COMMMON BLOCKS
LITPOINTER, !LAST AND FIRST LITERALS
SYMPTR, !LAST AND FIRST SYMBOLS
SORCPTR, !LAST AND FIRST SOURCE ENTRIES
LASTEXP, !LAST EXPRESSION ENTRY
LASTDIM, !LAST DIMENSION ENTRY
!**[410] @3266 SJW 1-JUL-76
%[410]% DTABPTR, ! HEAD OF DIM ENTRY LIST FOR BLDDIM
CONSPTR, !LAST AND FIRST CONSTANTS
LABLPTR, !FIRSTAND LAST STATEMENT LABELS
EQVPTR, !PTR TO FIRST AND LAST EQUIVALENCE CLASSES
FORMPTR, !PTR TO LINKED LIST OF FORMAT STRINGS
!0 IF NONE IN SUBPROGRAM
NAMLPTR, !PTR TO LINKED LIST OF NAMELIST LISTS STATEMENT NODES
!RIGHT HALF POINTS TO LAST, LEFT HALF POINTS TO FIRST
ASIPTR, !PTR TO FIRST AND LAST ASSIGN STATEMENTS
TTOTAL, !TOTAL UNUSED FREESPACE FOR DEBUGGING
FREELIST[10], !VECTOR OF POINTERS TO LINKED LISTS OF
!FREE STORAGE BLOCKS OF SIZE 0 TO 9 WORDS
SPACEFREE; !AMOUNT OF FREE LOWSEG SPACE
GLOBAL SRCHONLY, !FLAG FOR TBLSEARCH FOR SEARCH ONLY MODE
ISN, !INTERNAL SOURCE SEQUENCE NUMBER
IDOFSTATEMENT, !IDENTIFICATION OF EXECUTABLE STEMENT IN TREE
LABLOFSTATEMENT;!SOURCE STATEMENT NUMBER POINTER
!IF CURRENT STATEMENT HAS ONE - OR 0
GLOBAL DLOOPTREE, !PTR TO DO LOOP NEST TREE
DONESTLEVEL, !CURRENT LEVEL OF DO NESTING
CURDOINDEX, !PTR TO CURRENT DO INDEX VARIABLE
LASDOLABEL, !LAST LABEL PTR FOR LABEL IN A DO STATEMENT
LASLVL0, !PTR TO LAST LEVEL 0 NEST SEEN
DELETPTR; !PTR TO DELETED TABLE ENTRY FOR DELETE ROUTINE
GLOBAL SYMTYPE, !TYPE OF CURRENT SYMBOL
NAME, !NAME OF THE TABLE FOR TBLSEARCH
!AND SIZ OF ENTRY IN LEFT HALF
TYPE, !THE TYPE OF THE CURRENT SYMBOL
!HAS VARIOUS MEANINGS DEPENDING UPON CONTEXT
INCREM, !INCREMENT USED FOR BUILDING FLOATING CONSTANT
DECEXP, !EXPONENT VALUE USED BY GETCONST FOR
!FLOATING POINT NUMBER GENERATION
ENTRY[5]; !THE GLOBAL PARAMETER PASSSING VECTOR
!
GLOBAL REGSAV[16], !SAV AREA FOR REGISTERS FOR GETSEG
SEGINCORE; !INDICATES WHICH SEGMENT IS CURRENTLY ACTIVE
GLOBAL LOWLOC, !CURRENT LOWSEG AVAILABLE ADDRESS
HILOC, !CURRENT HISEG AVAILABLE ADDRESS
RELOCWD, !RELOCATION BITS FOR DATA IN REL BLOCK
MAINRLBF[20], !MAIN REL FILE BUFFER - 20 WDS
LOCRLBF[20], !BUFFER FOR LOCAL REQUESTS
SYMRLBF[20], !BUFFER FOR GLOBAL REQUESTS AND SYMBOL DEFS
RDATWD, !PARAMETER WORD FOR PASSING DATA TO REL
!
BLANKCOM, !BLANK COMMON BLOCK PTR
ENDSCAA, !ADDRESS OF LOC AFTER THE END OF THE
! SCALARS AND ARRAYS (BEFORE THE FORMAT STRINGS)
MULENTRY, !PTR TO LINKED LIST OF ENTRY STATEMENTS
FORMAREA, !TOTAL NUMBER OF WORDS OCCUPIEDBY FORMAT STRINGS
COMSIZ; !TOTAL SIZE OF COMMON
!
GLOBAL
ONEPLIT, !POINTER TO CONSTANT INTEGER 1
!SET IN GLOBINIT
SP, !CURRENT TOP OF SYNTAX STACK
LEXL, !RESULT OF LAST CALL TO LEXEMEGEN
LSAVE, !FLAG INDICATING LEXEME ALREADY SCANNED
FARRY, !FIRST ARRAY NAME IN A ONE ARRAY
CODELINES, !THE NUMBER OF HISEG CODE LOCATION GENERATED
STALABL, !CURRENT LABLOFSTATEMENT
PROGNAME, !SIXBIT 'MAIN' OR FROM PROGRAM STATEMENT
IDTYPE, !VARIABLE TYPE DEFINED BY TYPE STATEMENT
ASTATFUN, !PTR TO CURRENT STATEMENT FUNCTION NAME IF CURRENTLY BEING PARSED
ERRLINK, !POINTER TO A LINKED LIST OF ERROR MESSAGES
TMPCNT[4], !COUNT OF VARIOUS TYPES OF TEMP USED.
![0]=TEMPORARY,[1]=MULTIPLYCATION FACTOR
![2]=OFFSET,[3]=SIZE
BSAVE, !BREG SAVE AREA
FSAVE, !FREG SAVE WORD
VSAVE; !VREG SAVE WORD
!
!THE FOLLOWING TABLE CONTAINS THE DEFAULT TYPES FOR IDENTIFIERS
MACRO IN=16$,RL=20$,DB=24$,CX=28$,LG=0$;
GLOBAL TYPTAB[26];
!
! THE FOLLOWING DEFINES THE LIBRARY FUNCTION ID TABLE
! EACH ENTRY IS CONPOSED OF TWO PARTS THE FIRST WORD IS THE
! SIXBIT IDENTIFICATION OF THE LIBRARY FUNCTION AND WORD 2
! IS THE ATTRIBUTES OF THE FUNCTION
! THE ACTUAL FUNCTION TABLEIS TWO TABLES, ON CONTAINING THE
! NAME AND THE OTHER CONTAINING THE CORRESPONDING ATTRIBUTES
! THE FIRST TABLE IS CALLED LIBFUNTAB AND THE SECOND IS CALLED
! LIBATTRIBUTES
!
MACRO FN(A)= SIXBIT 'A'$;
!
! MACRO FOR ATTRIBUTES
MACRO ATT(ARGTYP,RESTYP,ARGCT,INLINFLG,GENERFLG,NEWOPR,GENTBPTR)=
((INLINFLG^35) !BIT 0 IS FLAG FOR INLINE FN
OR (1^34) !BIT 1 IS ALWAYS SET (IN SYMTAB IS FLAG FOR LIB FN)
OR (GENERFLG^33) !BIT 2 IS GENERIC FN FLAG
OR (ARGTYP^28) !BITS 3-7 GIVE VALTYPE FOR ARG
OR (RESTYP^23) !BITS 8-12 GIVE VALTYPE FOR RESULT
OR (ARGCT^18) !BITS 13-17 GIVE NUMBER OF ARGS
OR NEWOPR), !RIGHT-HALF-WD GIVES THE OPERATOR TO
! BE SUBSTITUTED IF INLINFLG IS SET
GENTBPTR$; !FOR GENERIC FNS - THE 2ND WD POINTS TO
! A 4 WD SUB-TABLE THAT INDICATES WHICH
! ACTUAL FN TO USE FOR EACH ARG TYPE
!
! B - THE TYPE OF THE ARGUMENT OF THE FUNCTION
! C - THE TYPE OF THE RESULT OF THE FUNCTION
! D - THE NUMBER OF ARGUMENTS
! E - BIT IF FUNCTION IS IN LINE ELIGIBLE
! F - BIT IF GENERIC FUNCTION NAME
BIND FUNTAB = PLIT(LIBFUNTAB GLOBALLY NAMES
ABSENT NAMES FN(ABS),
ACOSENT NAMES FN(ACOS),
AIMAGENT NAMES FN(AIMAG),
AINTENT NAMES FN(AINT),
ALOGENT NAMES FN(ALOG),
ALOG10ENT NAMES FN(ALOG10),
AMAX0ENT NAMES FN(AMAX0),
AMAX1ENT NAMES FN(AMAX1),
AMIN0ENT NAMES FN(AMIN0),
AMIN1ENT NAMES FN(AMIN1),
AMODENT NAMES FN(AMOD),
ASINENT NAMES FN(ASIN),
ATANENT NAMES FN(ATAN),
ATAN2ENT NAMES FN(ATAN2),
CABSENT NAMES FN(CABS),
CCOSENT NAMES FN(CCOS),
CEXPENT NAMES FN(CEXP),
CLOGENT NAMES FN(CLOG),
CMPLXENT NAMES FN(CMPLX),
CONJGENT NAMES FN(CONJG),
COSENT NAMES FN(COS),
COSDENT NAMES FN(COSD),
COSHENT NAMES FN(COSH),
CSINENT NAMES FN(CSIN),
CSQRTENT NAMES FN(CSQRT),
DABSENT NAMES FN(DABS),
DATANENT NAMES FN(DATAN),
DATAN2ENT NAMES FN(DATAN2),
DBLEENT NAMES FN(DBLE),
DCOSENT NAMES FN(DCOS),
DEXPENT NAMES FN(DEXP),
DFLOATENT NAMES FN(DFLOAT),
DIMENT NAMES FN(DIM),
DLOGENT NAMES FN(DLOG),
DLOG10ENT NAMES FN(DLOG10),
DMAX1ENT NAMES FN(DMAX1),
DMIN1ENT NAMES FN(DMIN1),
DMODENT NAMES FN(DMOD),
DSIGNENT NAMES FN(DSIGN),
DSINENT NAMES FN(DSIN),
DSQRTENT NAMES FN(DSQRT),
EXPENT NAMES FN(EXP),
FLOATENT NAMES FN(FLOAT),
IABSENT NAMES FN(IABS),
IDIMENT NAMES FN(IDIM),
IDINTENT NAMES FN(IDINT),
IFIXENT NAMES FN(IFIX),
INTENT NAMES FN(INT),
ISIGNENT NAMES FN(ISIGN),
MAX0ENT NAMES FN(MAX0),
MAX1ENT NAMES FN(MAX1),
MIN0ENT NAMES FN(MIN0),
MIN1ENT NAMES FN(MIN1),
MODENT NAMES FN(MOD),
REALENT NAMES FN(REAL),
SIGNENT NAMES FN(SIGN),
SINENT NAMES FN(SIN),
SINDENT NAMES FN(SIND),
SINHENT NAMES FN(SINH),
SNGLENT NAMES FN(SNGL),
SQRTENT NAMES FN(SQRT),
TANHENT NAMES FN(TANH) );
!
! END OF LIBRARY FUNCTION NAME TABLE
BIND AFTERLIB = PLIT(ONEAFTERLIB GLOBALLY NAMES 0);
!
%(*****TABLES USED FOR GENERIC FNS - FOR EACH GENERIC FN HAVE
A FOUR WD ENTRY INDICATING THE ACTUAL FN TO BE USED FOR EACH OF
THE FOUR ARG TYPES INTEGER,REAL,DOUBLE PRECISION, AND COMPLEX (IN
THAT ORDER). FOR EACH ARG-TYPE, HAVE A PTR TO THE ENTRY IN THE FUNCTION TABLE
FOR THE ACTUAL FN TO BE USED.
***********)%
BIND ABSGENTB = PLIT (IABSENT,ABSENT,DABSENT,CABSENT); !ABS
BIND ALOGGENTB = PLIT (ILGARGTYPE,ALOGENT,DLOGENT,CLOGENT); !ALOG
BIND ALOG10GENTB= PLIT (ILGARGTYPE,ALOG10ENT,DLOG10ENT,ILGARGTYPE); !ALOG10
BIND AMAX1GENTB = PLIT (ILGARGTYPE,AMAX1ENT,DMAX1ENT,ILGARGTYPE); !AMAX1
BIND AMIN1GENTB = PLIT (ILGARGTYPE,AMIN1ENT,DMIN1ENT,ILGARGTYPE); !AMIN1
BIND ATANGENTB = PLIT (ILGARGTYPE,ATANENT,DATANENT,ILGARGTYPE); !ATAN
BIND ATAN2GENTB = PLIT (ILGARGTYPE,ATAN2ENT,DATAN2ENT,ILGARGTYPE); !ATAN2
BIND COSGENTB = PLIT (ILGARGTYPE,COSENT,DCOSENT,CCOSENT); !COS
BIND EXPGENTB = PLIT (ILGARGTYPE,EXPENT,DEXPENT,CEXPENT); !EXP
BIND INTGENTB = PLIT (ILGARGTYPE,INTENT,IDINTENT,ILGARGTYPE); !INT
BIND MODGENTB = PLIT (MODENT,AMODENT,DMODENT,ILGARGTYPE); !MOD
BIND SIGNGENTB = PLIT(ISIGNENT,SIGNENT,DSIGNENT,ILGARGTYPE); !SIGN
BIND SINGENTB = PLIT (ILGARGTYPE,SINENT,DSINENT,CSINENT); !SIN
BIND SQRTGENTB = PLIT (ILGARGTYPE,SQRTENT,DSQRTENT,CSQRTENT); !SQRT
!
! THE FUNCTION ATTRIBUTE TABLE
!
!
! (TYPE OF FUNCTION,TYPE OF RESULT,#OF ARGS,INLINE BIT,GENERIC BIT)
!
BIND ZATTRIBUTES = PLIT(LIBATTRIBUTES GLOBALLY NAMES
ATT(RL,RL,1,1,1,ABSFNOP,ABSGENTB), !ABS
ATT(RL,RL,1,0,0,0,-1), !ACOS
ATT(CX,RL,1,0,0,0,-1), !AIMAG
ATT(RL,RL,1,0,0,0,-1), !AINT
ATT(RL,RL,1,0,1,0,ALOGGENTB), !ALOG
ATT(RL,RL,1,0,1,0,ALOG10GENTB), !ALOG10
ATT(IN,RL,VARGCTFLG,0,0,0,-1), !AMAX0
ATT(RL,RL,VARGCTFLG,1,1,AMAXFNOP,AMAX1GENTB), !AMAX1
ATT(IN,RL,VARGCTFLG,0,0,0,-1), !AMIN0
ATT(RL,RL,VARGCTFLG,1,1,AMINFNOP,AMIN1GENTB), !AMIN1
ATT(RL,RL,2,0,0,0,-1), !AMOD
ATT(RL,RL,1,0,0,0,-1), !ASIN
ATT(RL,RL,1,0,1,0,ATANGENTB), !ATAN
ATT(RL,RL,2,0,1,0,ATAN2GENTB), !ATAN2
ATT(CX,RL,1,0,0,0,-1), !CABS
ATT(CX,CX,1,0,0,0,-1), !CCOS
ATT(CX,CX,1,0,0,0,-1), !CEXP
ATT(CX,CX,1,0,0,0,-1), !CLOG
ATT(RL,CX,2,1,0,CMPLXFNOP,-1), !CMPLX
ATT(CX,CX,1,0,0,0,-1), !CONJG
ATT(RL,RL,1,0,1,0,COSGENTB), !COS
ATT(RL,RL,1,0,0,0,-1), !COSD
ATT(RL,RL,1,0,0,0,-1), !COSH
ATT(CX,CX,1,0,0,0,-1), !CSIN
ATT(CX,CX,1,0,0,0,-1), !CSQRT
ATT(DB,DB,1,1,0,DABSFNOP,-1), !DABS
ATT(DB,DB,1,0,0,0,-1), !DATAN
ATT(DB,DB,2,0,0,0,-1), !DATAN2
ATT(RL,DB,1,1,0,DBLEOP,-1), !DBLE
ATT(DB,DB,1,0,0,0,-1), !DCOS
ATT(DB,DB,1,0,0,0,-1), !DEXP
ATT(IN,DB,1,1,0,DFLOATOP,-1), !DFLOAT
ATT(RL,RL,2,1,0,DIMFNOP,-1), !DIM
ATT(DB,DB,1,0,0,0,-1), !DLOG
ATT(DB,DB,1,0,0,0,-1), !DLOG10
ATT(DB,DB,VARGCTFLG,0,0,0,-1), !DMAX1
ATT(DB,DB,VARGCTFLG,0,0,0,-1), !DMIN1
ATT(DB,DB,2,0,0,0,-1), !DMOD
ATT(DB,DB,2,0,0,0,-1), !DSIGN
ATT(DB,DB,1,0,0,0,-1), !DSIN
ATT(DB,DB,1,0,0,0,-1), !DSQRT
ATT(RL,RL,1,0,1,0,EXPGENTB), !EXP
ATT(IN,RL,1,1,0,FLOATOP,-1), !FLOAT
ATT(IN,IN,1,1,0,IABSFNOP,-1), !IABS
ATT(IN,IN,2,0,0,0,-1), !IDIM
ATT(DB,IN,1,1,0,IDINTOP,-1), !IDINT
ATT(RL,IN,1,1,0,IFIXOP,-1), !IFIX
ATT(RL,IN,1,1,1,INTOP,INTGENTB), !INT
ATT(IN,IN,2,1,0,ISIGNFNOP,-1), !ISIGN
ATT(IN,IN,VARGCTFLG,1,0,MAXFNOP,-1), !MAX0
ATT(RL,IN,VARGCTFLG,0,0,0,-1), !MAX1
ATT(IN,IN,VARGCTFLG,1,0,MINFNOP,-1), !MIN0
ATT(RL,IN,VARGCTFLG,0,0,0,-1), !MIN1
ATT(IN,IN,2,1,1,MODFNOP,MODGENTB), !MOD
ATT(CX,RL,1,1,0,REALOP,-1), !REAL
ATT(RL,RL,2,1,1,SIGNFNOP,SIGNGENTB), !SIGN
ATT(RL,RL,1,0,1,0,SINGENTB), !SIN
ATT(RL,RL,1,0,0,0,-1), !SIND
ATT(RL,RL,1,0,0,0,-1), !SINH
ATT(DB,RL,1,1,0,SNGLOP,-1), !SNGL
ATT(RL,RL,1,0,1,0,SQRTGENTB), !SQRT
ATT(RL,RL,1,0,0,0,-1) !TANH
);
!END OF LIBRARY ATTRIBUTES
!
!
%(***TABLE OF WDS IN WHICH IN SUCCESSIVE WDS HAVE 1 0-BIT, INDEX INTO THIS
TABLE IN ORDER TO CLEAR A GIVEN BIT***)%
BIND DMY= PLIT (
NOT(1^36), !IN CLRWDS-1, HAVE A WORD IN WHICH ALL BITS
! ARE SET SO THAT WHEN "CLEAR" THE BIT FOR -1
! WILL DO NOTHING
CLRWDS GLOBALLY NAMES NOT(1^35),
NOT(1^34),
NOT(1^33),
NOT(1^32),
NOT(1^31),
NOT(1^30),
NOT(1^29),
NOT(1^28),
NOT(1^27),
NOT(1^26),
NOT(1^25),
NOT(1^24),
NOT(1^23),
NOT(1^22),
NOT(1^21),
NOT(1^20),
NOT(1^19),
NOT(1^18),
NOT(1^17),
NOT(1^16),
NOT(1^15),
NOT(1^14),
NOT(1^13),
NOT(1^12),
NOT(1^11),
NOT(1^10),
NOT(1^9),
NOT(1^8),
NOT(1^7),
NOT(1^6),
NOT(1^5),
NOT(1^4),
NOT(1^3),
NOT(1^2),
NOT(1^1),
NOT(1^0) );
%(********************
GLOBALS USED BY PHASE 2 SKELETON AND PHASE 3
*************************)%
GLOBAL TREEPTR; !PTR TO THE NODE IN THE TREE
! CURRENTLY BEING PROCESSED
GLOBAL CSTMNT; !PTR TO THE STATEMENT NODE CURRENTLY
! BEING PROCESSED
GLOBAL NEDZER; ![607] FLAG TO INDICATE IF ZERO-ARG-BLOCK NEEDED
GLOBAL ZERBLK; !PTR TO LABEL TABLE ENTRY FOR LABEL ON A
! ZERO-ARG-BLOCK FOR FOROTS
GLOBAL A1NODE; !PTR TO 1ST ARGNODE UNDER TREEPTR;
GLOBAL A2NODE; !PTR TO 2ND ARGNODE UNDER TREEPTR
GLOBAL A1LABEL,A2LABEL,A3LABEL; !PTRS TO LABEL-TABLE ENTRIES - USED IN THE
! TABLE-DRIVEN PART OF THE CODE-GENERATOR
GLOBAL OPDSPIX; !INDEX INTO DISPATCH TABLE FOR OPGENTABLE
GLOBAL REGFORCOMP; !REGISTER TO BE USED IN COMPUTING
! THE VAL OF A NODE - THIS GLOBAL IS SET UP
! WHEN CALLING "CGOPGEN"
! BITS 9-12 INDICATE THE REG TO BE USED
GLOBAL PC; !RELATIVE LOC OF NEXT INSTR TO
! BE GENERATED
GLOBAL PBOPWD; !INDICATES INSTRUCTION WD TO BE OUTPUT
! TO PEEPHOLE BUFFER
GLOBAL PSYMPTR; !INDICATES THE PBFSYMPTR FIELD TO BE OUTPUT
! TO THE PEEPHOLE BUFFER
GLOBAL IOLSPTR; !PTR TO THE FIRST AND LAST IO STMNT IN THE PROGRAM
GLOBAL DATASPTR; !PTR TO FIRST AND LAST DATA STATEMENT NODES
GLOBAL RESNAME; !PTR TO EITHER SYMBOL TABLE ENTRY OR
! EXPRESSION NODE SPECIFYING WHERE THE
! FINAL RESULT OF THE EXPRESSION BEING PROCESSED
! BY THE REGISTER ALLOCATOR WILL BE STORED
%(*****GLOBALS USED ONLY BY PHASE 2 SKELETON*****)%
!GLOBALS USED IN PHASE 2 SKELETON FOR FORCING NEG AND NOT
!DOWN TO BOTTOMMOST NODES.
!IF NOTFLG(NEGFLG) IS TRUE WHEN ENTER ROUTINE FOR A GIVEN NODE
!THEN A NOT (NEG) MUST BE FORCED DOWN OVER THIS NODE. IF IT
!IS TRUE WHEN LEAVE ROUTINE FOR A GIVEN NODE, THEN NOT(NEG)
!MUST BE FORCED BACK UP TO THE PARENT OF THIS NODE.
GLOBAL NEGFLG;
GLOBAL NOTFLG;
GLOBAL TRUECENTRY; !PTR TO CONSTANT TABLE ENTRY FOR "TRUE"
GLOBAL FALSECENTRY; ! FOR FALSE
GLOBAL CIOCALL; !POINTER TO CURRENT IOLSTCALL NODE BEING BUILT
GLOBAL CIOCLAST; !POINTER TO LAST ELEMENT ON THE
!IOLSTCALL NODE BEING BUILT
GLOBAL INPFLAG; !FLAG FOR *CURRENT STMNT IS AN INPUT STMNT*
GLOBAL USERFNFLG; !FLAG INDICATING THAT THIS STMNT INCLUDES A CALL TO
! A USER FUNCTION
%(****GLOBALS USED ONLY BY THE REGISTER ALLOCATOR****)%
GLOBAL CLOBBREGS; !REGISTERS CLOBBERED IN THE COURSE OF
! EVALUATION OF THIS EXPRESSION
GLOBAL DBLMODE; !IF THIS GLOBAL IS TRUE, THEN THE GLOBALS
! STBSYR AND STRGCT HAVE BEEN SET TO DO
! REG ALLOC IN DOUBLE-PREC MODE
%(***GLOBALS USED IN TEMPORARY ALLOCATION - IN NODES.BLI***)%
GLOBAL LSTLNK; !USED TO LINK ENTRIES TOGETHER
GLOBAL FTEMP; !FIRST TEMP AVAILABLE FOR USE BY
!SKELETON REGISTER ALLOCATOR
!ZERO IF NONE EXISTS.
GLOBAL FRSTLNK; !FIRST ENTRY IN THE TEMPORARY TABLLE
GLOBAL ANCHOR; !POINTER TO START OF TEMPORARY TABLE
! THAT CAN BE USED BY SKEL REG ALLOCATOR
GLOBAL VERYFRST; !USED BY GLOBAL TEMPORARY ALLOCATOR
!IN THE NON-GLOBALLY OPTIMIZING CASE VERYFRST=FRSTLNK=FTEMP
!IN THE GLOBALLY OPTIMIZING CASE VERYFRST POINT TO AUXILLARY LIST
! FRSTLNK IS SET TO POINT TO THE FIRST TEMP AVAILABLE FOR
! LOCAL ALLOCAION USE AND FTEMP IS SET TO FRSTLNK.
GLOBAL PBFPTR; !PTR TO NEXT AVAILABLE WORD IN BUFFER
GLOBAL VECTOR PBUFF[PBFSIZE];
GLOBAL PEEPPTR; !PTR TO WD IN PEEPHOLE BUFFER OFF OF WHICH
! ARE KEYING IN PEEPHOLE OPTIMIZING
GLOBAL ILABIX; !CT OF INTERNALLY GENERATED LABELS
%(*** GLOBALS THAT ARE SET UP BEFORE CALLING THE STATEMENT REGISTER
ALLOCATOR
***)%
GLOBAL GBSYREGS; !BITS IN THIS WD ARE 0 FOR ANY REGISTERS USED FOR
! GLOBALLY ALLOCATED VARIABLES
GLOBAL GBSYCT; !NUMBER OF REGS AVAILABLE FOR USE BY LOCAL
! REGISTER ALLOCATOR
GLOBAL STBSYR; !INDICATES WHICH REGISTERS ARE AVAILABLE FOR USE.
!EACH BIT IN THIS WORD CORRESPONDS TO A REG AND IS 0 IF
!THAT REG IS UNAVAILABLE, 1 IF FREE
GLOBAL STRGCT; !NUMBER OF REGS AVAILABLE FOR USE
GLOBAL BLOCKBSYREGS; !THIS WD IS USED BY THE BASIC BLOCK REGISTER ALLOCATOR.
! EACH BIT IN THIS WD CORRESPONDS TO A REG. IF THE
!REG WAS ALLOCATED BY THE BLOCK ALLOCATOR, THE BIT IS ZERO,
! IF NOT, THE BIT IS ONE
GLOBAL NOBBREGSLOAD; !THIS FLAG IS USED BY THE BASIC BLOCK REG ALLOCATOR
! IT IS SET TO TRUE WHEN PROCESSING NODES FOR WHICH ONE
! CANNOT ASSUME THAT THE CODE IS ALWAYS EXECUTED WHENEVER
! THE BLOCK CONTAINING THE NODES IS EXECUTED (E.G. FOR THE
! STMNT UNDER A LOG IF, FOR THE 2ND RELATIONAL UNDER A CONTROL-BOOLEAN,...)
! CANNOT ASSUME THE VALS OF REGS LOADED WHILE THIS FLAG IS SET
GLOBAL PAIRMODE; !THIS GLOBAL FLAG IS SET DURING COMPLEXITY WALK IF ANY
! EXPRESSION IS FOUND UNDER THE CURRENT STMNT THAT REQUIRES A REG PAIR
!THIS FLAG IS ALSO USED DURING LOCAL REG ALLOC WHEN
! IT IS SET WHENEVER A STMNT IS BEING PROCESSED THAT REQUIRES ANY REG PAIRS
GLOBAL EHASH[EHSIZ]; !EXPRESSION HASH TABLE FOR CMN SUB ELIM.
GLOBAL
BACKST, !USED IN LOCAL COMMON SUB-EXPRESSION
!ELIMINATION. MUST BE ZERO IN GLOBAL CASE
IOPTFLG, !DIFFERENTIATES NORMAL GLOBAL OPTIMIZATION
!CASE FROM GLOBAL IMPLIED DO
!OPTIMIZATION CASE
DOSP, !DO STACK POINTER
DOSTAK[32], !DO STACK
EXITNO, !NUMBER OF LOOP EXITS; 0 IN NORMAL CASE
RDCCT, !USED TO CREATE NAMES FOR REDUCTION IN
!STRENGTH TEMPORARIES
LPRDCCT, !USED TO HOLD COUNT OF REDUCTIONS AT LOOP
!START SO WE CAN TEELL IF THERE WAS A
!UNIQUE REDUCTION
RDCLNK, !POINTER TO THE FIRST INCREMENT OF
!A REDUCTION VARIABLE IN ANY LOOP
LOCLNK, !USED TO LINK LOCAL COMMON SUBS TOGETHER
ARGLINKPT, !TOLINK ARG BLOCKS TOGETHER
SPECCASE, !USED TO UNIT LEAF SUBS. ROUTINES
QQ, !TEMPORARY USED THROUGH PHASE2
UNIQVAL, !POINTER TO LIST OF VARIABLES UNIQUELY
!ASSIGNED IN THE LOOP
ASSOCPT, !POINTER TO LINKED LIST OF ASSOCIATE VARIABLES
FNTMP, !NUMBER TO MAKE STATEMENT FUNCTION
!ARGUMENTS WITH
DOCNT, !COUNT OF DO LOOPS IN PROGRAM
OPTLAB, !USED TO GENERATE LABELS BY THE OPTIMIZER
GLOBREG[16], !LIST OF REGISTERS GLOBALLY ALLOCATED
RGRAPH, !REVERSE GRAPH (USING POOL FOR SPACE)
FGRAPH, !FORWARD GRAPH (USING POOL FOR SPACE)
SSIZTC, !COUNTER FOR STEP SIZE TEMPS GENERATED FOR DO LOOPS
INTLTC, !COUNTER FOR INITIAL VALUE TEMPS FOR DO LOOPS
LOOP, !USED BY OPTIMIZER
INDVAR, !INDUCTION VARUABLE FOR CURRENT LOOP
LEND, !TERMINAL STATEMENT OF CURRENT LOOP
LENTRY, !ENTRY POINT OF CURRENT LOOP
LOOPNO, !NUMBER OF CURRENT LOOP
CHOSEN[32], !USED IN DEFINITION POINT COMPUTATION
!AND GLOBAL REGISTER ALLOCATION
TOP, !TOP OF CURRENT LOOP
BOTTOM, !BOTTOM OF CURRRENT LOOP
TPREV, !TEMP USED BY OPTIMIZER IN CMN SUB ELIM
PREV, !DITTO
PHI, !POINTER TO HASH ENTRY FOR COMMON SUBS
NAN, !FLAG SET TO INDICATE THAT FIRST
!EXPRESSION OF HASH PAIR NEEDS A NEGATE
!NODE OR FLAG OVER IT
EHASHP, !POINTER TO HASH INDEX ENTRY. USED FOR
!DELETION OF HASH ENTRIES IN COMMON SUBS
LOWLIM, !LOWER LIMIT FOR SUBSTITUTION
CELMNT; !CURRENT ELEM ON I/O LIST
!USED AS CONVERSION TABLE FROM INTERNAL VALU TYPES TO EXTERNAL VALUE TYPES
BIND EVALDUM=PLIT(EVALU GLOBALLY NAMES
!**;[362], GLOBAL @3757, DCE, 26-MAR-76
!**;[362] CHANGE OCTAL TO 6 FOR ARG BLOCK
%[362]% 6, !0,INTERNAL OCTAL
1, !1,INTERNAL LOGICAL
0, !2,INTERNALLY UNUSED
0, !3,INTERNALLY UNUSED
0, !4,INTERNALLY CONTROL
0, !5,INTERNALLY UNUSED
0, !6,INTERNALLY UNUSED
0, !7,INTERNALLY UNUSED
%[362]% #12, !8,INTERNALLY DOUBLE OCTAL
0, !9,INTERNALLY UNUSED
0, !10,INTERNALLY UNUSED
0, !11,INTERNALLY UNUSED
#17, !12,INTERNALLY LITERAL
0, !13,INTERNALLY UNUSED
0, !14,INTERNALLY UNUSED
0, !15,INTERNALLY UNUSED
2, !16,INTERNALLY INTEGER
0, !17,INTERNALLY BYTE (NOT IN RELEASE 1)
2, !18,INTERNALLY INDEX(SAME AS INTEGER)
0, !19,INTERNALLY UNUSED
4, !20,INTERNALLY REAL
0, !21,INTERNALLY UNUSED
0, !22,INTERNALLY UNUSED
0, !23,INTERNALLY UNUSED
#10, !24,INTERNALLY DOUBLE PRECISION
0, !25,INTERNALLY UNUSED
0, !26,INTERNALLY UNUSED
0, !27,INTERNALLY UNUSED
#14); !28, INTERNALLY COMPLEX
!USED AS TRANSLATION TABLE FROM SRCID TO THE FUNCTION CODE IN CALLING
!THE MTOP. FUNCTION OF FOROTS
GLOBAL
INNERLOOP, !THIS VAR IS "TRUE" IN P2SKEL WHEN ARE LOOKING AT
! STMNTS IN AN INNER LOOP
DOWDP, !USED BY PHASE TO SKELETON TO OPTIMIZE DO LOOPS
CDONODE, !SAME
ITMCT; !USED IN LEAF SUBSTITUTION UNIFICATION
!TABLE TO CONVERT SRCID-BACKID TO MTOP FUNCTION CODES
!FOR FOROTS
BIND MTPDUM=PLIT(MTOPFUN GLOBALLY NAMES
2, !BACKSPACE
3, !BACKFILE
0, !REWIND
7, !SKIPFILE
5, !SKIP RECORD
1, !UNLOAD
0, !RELEASE NOT HANDLED THIS WAY
4); !ENDFILE
GLOBAL DWP; !POINTER FOR WALK OF DO DEPTH ANALYSIS TREE
%(****GLOBALS USED TO PASS ARGS TO ASSEMBLY-LANG CONSTANT FOLDING ROUTINE***)%
GLOBAL C1H,C1L,C2H,C2L,COPRIX;
%(***AREA WHERE THE CONSTANT-FOLDING ROUTINE SAVES THE ACS***)%
GLOBAL SAVACS[7];
GLOBAL SAVE17; !FOR SPECIAL RETURNS TO PHAZECONTROL
% MORE FORTB GLOBALS %
GLOBAL
EOPSAVE , % ADDRESS AND COUNT OF THE PORTION OF
THE PORTION OF POOL THAT HAD TO
BE SAVED AT THE END OF THE CURRENT
PROGRAM UNIT, INORDER THAT THE LATER
PASSES CAN USE POOL.
<LEFT> - NUMBER OF WORDS
<RIGHT> - BEGINNING ADDRESS %
NOCR, ! IF SET TO 1 IT INDICATES TO THE OUTPUT ROUTINES
! THAT A CR SHOULD BE INSERTED
STPTR, ! POINTER TO BEGINNING CHARACTER-1
! OF CURRENT STATEMENT
STLPTR, ! POINTER TO BEGINNING CHARACTER-1 OF THE
! LINE CONTAINING THE CURRENT STATEMENT
STPOS, ! CHARACTER POSITION ON LINE OF BEGINNING OF STATEMENT
LASTLINE, ! LAST LINE NUMBER, ALSO USED TO SAVE LINELINE BETWEEN PROGRAM UNITS
ERRFLAG, ! IF 1 INDICATES THAT THERE HAVE BEEN
! OTHER ERRORS IN THIS STATEMENT
MSGNOTYPD, ! IF 1 INDICATES THAT THERE ARE MESSAGES IN
! THE QUEUE WHICH HAVE NOT BEEN TYPED ON THE USER TTY
CLASPTR, ! CLASSIFICATION BACKUP POINTER
CLASLPT, ! CLASSIFICATION BACKUP LINE BEGINNING POINTER
CONTPTR, ! CONTINUATION BACKUP POINTER
LEXLINE, ! LINE NUMBER ASSOCIATIED WITH CURRENT LEXEME
% ERROR MESSAGE COUNTERS %
NUMWARN, ! NUMBER OF WARNING MESSAGES
NUMFATL, ! NUMBER OF FATL MESSAGES
WARNOPT, ! FLAG WHICH IF 1 INDICATES THAT WARNINGS
! WERE ISSUED WHICH COULD ADVERSELY AFFECT THE OPTIMIZER
STMNDESC, ! ADDRESS OF THE CURRENT STATEMENT DESCRIPTION BLOCK
PSTATE, ! CURRENT STATE CODE OF THE STATEMENT
! ORDER CHECKING TABLE - STMNSTATE
BACKLINE, ! USED TO SAVE LINE ATTRIBUTES OF ANY LINES
! PASSED OVER DURING LOOKAHEAD
LOOK4LABEL, ! IF SET TO 1 INDICATES TO LEXICAL THAT
! IT IS LOOKING FOR A LABEL
FNDFF, ! SET T0 1 IF FORM FEED ENCOUNTERED
DIMSTK, !POINTER TO LIST OF VARIABLES USED AS
!ARRAY DIMENSIONS WHICH HAVE NOT YET
!BEEN DEFINED IN COMMON OR AS DUMMYS
LOOK4CHAR; ! SET TO THE CHARACTER OR STRING THAT
! LEXICAL CHARACTER OR STRING SCAN IS
! SUPOSED TO TRY AND MATCH
!**[464] GLOBAL @3885 SJW 29-SEP-76
![464] ADD GLOBALS FOR LINEMAP IN LISTOU IN FORTG
%[464]% GLOBAL LMLINO, ! CURRENT SOURCE LINE NUMBER
%[464]% LMRONO, ! CURRENT MAP ROW NUMBER
%[464]% LMCONO; ! CURRENT MAP COLUMN NUMBER
GLOBAL BIND ENDOFILE = 0; ! END OF FILE INDICATOR RETURNED
! BY LEXICAL()
GLOBAL GLOBEND; !LAST GLOBAL IN GLOBL.BLI
!NOTE: ALL GLOBALS FROM SYMTBL TO GLOBEND INCLUSIVE WILL BE INITIALIZED
!TO ZERO IN MODULE CLASSIFIER BEFORE EACH COMPILATION.
!***************************************************************
% THESE GLOBALS ARE NOT TO BE SET TO ZERO AT THE BEGINNING OF EACH
PROGRAM UNIT. PHASE I NEEDS THEM %
GLOBAL
BGSTBF, !HOLDS THE AMOUNT OF CORE NEEDED BY THE
!LARGEST INPUT FILE. CALCULATED IN
!COMMAN AND USED WHEN THE FIRST INPUT
!FILE IS OPENED
SAVFLG, !FLGREG SAVE AREA FOR INCLUDED FILES
DEBGSW, ! VALUE OF THE DEBUG SWITCH SET BY SCAN
!**;[351], GLOBAL @3891, DCE, 13-FEB-76
!**;[351], INSERT NEW VARIABLE FOR FORTB
ARINGLEFT, !**;[351] USED FOR BUFFERING OF INPUT
BUGOUT, ! INTERNAL OUTPUT SWITCH VALUE
FLAGS2, !SECONDARY FLAG REGISTER - SEE IOFLG.BLI
CURPOOLEND, ! CURRENT END OF INPUT IN POOL
CURPTR, ! CURRENT POOL POSITION POINTER
CHARPOS, ! CHARACTER POSITION OF CURRENT
! CHARACTER ON PRINT LINE
LINEPTR, ! POINTER TO THE CHARACTER-1 OF THE BEGINNING
! OF THE CURRENT LINE
SEQLAST, ! IF SET TO 1 IT INDICATES THAT THE LINE BEGINNING THIS PROGRAM UNIT
! HAS A LINE SEQUENCE NUMBER IN LINELINE
LINENO[2], ! AREA IN WHICH TO BUILD THE LINE NO
PAGELINE, ! CURRENT LINE ON THE PAGE 59 TO 0
LINELINE, ! CURRENT LINE NUMBER
HEADSTR[20], ! AREA TO BUILD HEADING
BASENO, ! ARITHMETIC BASE FOR DIGITS()
HEADPTR, ! BYTE POINTER FOR HEADING
PAGEPTR; ! BYTE POINTER TO POSITION TO INSERT THE PAGE NO.
END
END
ELUDOM