Trailing-Edge
-
PDP-10 Archives
-
BB-4157F-BM_1983
-
fortran/compiler/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) DIGITAL EQUIPMENT CORPORATION 1973, 1983
! Author: */TFV/CDM/SRM/AHM
MODULE GLOBA(RESERVE(0,1,2,3),SREG=#17,FREG=#16,VREG=#15,DREGS=4,STACK=GLOBAL(STACK,2200),GLOROUTINES)=
BEGIN
GLOBAL BIND GLOBAV = 7^24 + 0^18 + #1654; ! Version Date: 19-Oct-82
%(
***** Begin 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, (DCE)
75 362 18245 INSERT OCTAL AND DOUBLE OCTAL IN EVALU TABLE, (DCE)
***** Begin Version 5 *****
76 410 ----- MAKE NEW GLOBAL DTABPTR FOR FORTB, (SJW)
77 464 QA754 MAKE NEW GLOBALS LMLINO, LMRONO, LMCONO FOR
780 LINEMAP IN FORTG, (SJW)
100 607 22685 MAKE NEW GLOBAL NEDZER TO INDICATE IF
ZERO-ARG-BLOCK IS NEEDED
***** Begin Version 5B *****
101 674 11803 INCREASE THE SIZE OF DOSTAK, AND MOVE FOR
BETTER SPACE UTILIZATION., (DCE)
***** Begin Version 6 *****
102 761 TFV 1-Mar-80 -----
Add new library routines to tables.
Expand EVALU to have /GFLOATING entries.
Add GFMCOK for /GFLOATING microcode is present
103 767 DCE 20-May-80 -----
Add F2 (secondary flag register); remove GFMCOK (now defined in FIRST)
113 1121 EGM 9-Sep-81 --------
Add GETSPATH to hold GETSEG path information.
115 1133 TFV 28-Sep-81 ------
Add MAXFF, CHDSTART, RTIME, and CTIME for /STATISTICS performance
analysis.
***** Begin Version 7 *****
104 1203 DCE 21-Nov-80 -----
For expressions in I/O lists, may have items of type control.
Allow this in argument blocks.
105 1212 TFV 29-Apr-81 ------
Replace literal with HOLLERITH
106 1213 TFV 20-May-81 ------
Add global symbol CHLEN for character count for character data.
Move ACTLDATYPE and CHDLEN out of STA2. Make TYPTABle entries two
words long.
107 1214 CKS 1-Jun-81
Add DOIFSTK for block IFs and all DOs
110 1241 CDM 29-JUL-81
Add intrinsic functions (ANINT, DDIM, DINT, DNINT, DPROD, IDNINT,
NINT) and made several more functions (ACOS, AINT, ANINT, ASIN,
COSH, DIM, LOG, LOG10, MAX, MIN, NINT, SINH, TAN, TANH) generic.
111 1245 TFV 3-Aug-81 ------
Declare global CHDECL flag which is set if a character declaration is
seen. Used in MRP3R and MRP3G to test if we have to scan the symbol
table to generate high seg character descriptors. Add CHDSTART for
the HISEG address of the start of character data descriptors.
Add entries in EVALU for character data. Also make HDRFLG global.
It is a flag for whether the header has been put out to the listing.
112 1252 CDM 10-Aug-81
Add new dotted names (unique names which users can't call) for
inline generic functions in the 77-standard which are not
specificly named.
114 1264 CDM 25-Sept-81
Add 4 inline type conversion NOP functions for NOP type conversions.
(To be removed in P2SKFN in P2S1.)
Add MAX, MIN, and LOG10 to tables for generic entries.
Add CMPL.C for complex to complex conversion.
Add character functions CHAR, ICHAR, INDEX, LEN, LGE, LGT, LLE, LLT
to tables.
116 1270 CDM 6-Oct-81
Added 1 bit to 2nd word of ATT macro to give LIBATTRIBUTES a bit
to signify that a generic function does not have a "specific" name.
(For error checking - octal arguments are illegal for non-specific).
117 1274 TFV 16-Oct-81 ------
Rename COMSIZ to be COMTSIZ when talking about the total size of
COMMON. COMSIZ is the size of an encode source entry for a COMMON
statement. Also add declarations for .Qnnnn variable handling.
They are QANCHOR, LASTQ, QLOC, QMAX, QCNT, LASTSFNQ, and QSFNMAX.
118 1406 TFV 27-Oct-81 ------
Add new globals for handling .Dnnnn compile-time-constant character
descriptors. They are DANCHOR, DCNT, ans LASTD.
119 1431 CKS 15-Dec-81
Add MINUSONE, analagous to ONEPLIT. It points to a const table entry
for -1.
120 1436 SRM 16-Dec-81
Add CHARUSED, a flag for character data used in the program.
In version 7, the global optimizer will not attempt
optimization if this flag is set.
121 1437 CDM 16-Dec-81
Added new global variable HIORIGIN to keep the value of the
hi-seg.
122 1445 SRM 20-Dec-81
Changed stack size in module head from 500 to 2100, so that
we can compile FM045.FOR in the validation tests. This program
has 57 nested parens. ( Approximately 100 words of
stack are needed for each 3 additional levels of nesting. )
123 1460 SRM 23-Jan-82
Added TURNOFFOPT to indicate that /OPT was turned off because
character data was used.
124 1466 CDM 1-Feb-82
Added variable ENTPREVIOUS for the address of the previous entry
statement.
Made entries to EVALU table be macros instead of hard wired
constants so that they can be used elsewhere.
Moved LIBFUNTAB, LIBATTRIBUTES, CLRWDS, EVALU, MTOPFUN so that they
would not be in the region of global variables that are zeroed out.
125 1467 CDM 5-Feb-82
Added variables NUMSAVCOMMON (count of how many have been
specified), PTRSAVCOMMON (linked list for the common statements
specified in SAVE).
1504 AHM 26-Feb-82
Added variable BIGARY. Any array with at least BIGARY words
in it goes into the .LARG. psect instead of .DATA. with the
/EXTEND switch.
1511 CDM 17-Mar-82
Added SAVLOC, SAVBLC, SAVALL, SAVNED for SAVE statement processing.
1526 AHM 6-Apr-82
Define LARGELOC for the relocation counter for the large data
psect (.LARG.) and ABSLOC, which will always contain 0 for use
in absolute addressing. Define a vector called PSECTS which
holds LOWLOC, HILOC, LARGELOC and ABSLOC. Use a GLOBAL BIND
to keep the names for the variables. Finally, define
CURADDRESS and CURPSECT communication between ZCODE and
ZOUTBLOCK of the current address and psect that code is being
stored into.
1530 TFV 4-May-82
Add global TOPIO which points to the top level I/O statement
during skeleton optimizations. It is used to set the
IOLSTATEMENT field of IOLSCLS nodes. Also parametize the size
of FREELIST which is used by CORMAN and SAVSPACE.
1531 CDM 4-May-82
Changes for save statement from code review.
1551 AHM 3-Jun-82
Increase the size of PSECTS vector because the psect PSOOPS
was added (it now has the index of zero).
1567 CDM 24-Jun-82
Add extra bit in the IDATTRIBUTES table for IDFNFOLD, whether
the function may be folded into a costant.
1633 TFV 1-Sep-82
Add new globals for /STATISTICS. They are LINCNT (number of
source lines), STCNT (number of executable statements),
PHTIME[6] (run times for each compiler phase), and PBTIME (run
time at the start of this phase).
1651 CKS 19-Oct-82
Add global name for LEN.'s library attributes so EXPRES can make
a function call node to LEN.
1654 SRM 22-Oct-82
Changed stack size in module head from 2100 to 2200, so that
we can compile FM045.FOR in the validation tests. This program
has 57 nested parens. The -20 command scanner uses 11 more stack
words than the old command scanner (and the -10 command scanner).
( Approximately 100 words of
stack are needed for each 3 additional levels of nesting. )
***** End Revision History *****
)%
SWITCHES NOLIST;
REQUIRE FIRST.BLI;
REQUIRE TABLES.BLI;
REQUIRE REQREL.BLI;
SWITCHES LIST;
BEGIN
MACRO TBLMAX = 4$, ! Number of channels used
TBLSIZ = 10$; ! Information per channel
STRUCTURE MATRIX[I,J] = (.MATRIX+(.I-1)*TBLSIZ+.J);
GLOBAL
POOL[POOLSIZ], ! MAJOR CHARACTER QUEUE
STK[STKSIZ], ! STACK FOR SYNTAX PROCESSING
MATRIX CHNLTBL[TBLMAX,TBLSIZ], ! OPEN, LOOKUP/ENTER, & BUFFER 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
%1121% GETSPATH[9], ! PATH 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
%674% ! DELETE OLD VECTOR WHICH HAS NO REFERENCES!
%674% ESIZ = 1$, ! 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],
BASEPTR, ! This contains the pointer to the most current
! entry made by the table handlers
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
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
%1530% FMTEND, ! Pointer to word after block for FORMAT being built
%1530% FMTPTR, ! Last character used in current FORMAT being built
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
%1530% FREELIST[FLSIZ], ! VECTOR OF POINTERS TO LINKED LISTS OF
! FREE STORAGE BLOCKS OF SIZE 0 TO FLSIZ - 1 WORDS
SPACEFREE, ! AMOUNT OF FREE LOWSEG SPACE
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
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
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
REGSAV[16], ! SAV AREA FOR REGISTERS FOR GETSEG
SEGINCORE, ! INDICATES WHICH SEGMENT IS CURRENTLY ACTIVE
%1551% PSECTS[5], ! Holds current available address for psects
%1526% CURADDRESS, ! Current loading address for ZOUTBLOCK
%1526% CURPSECT; ! Current psect being loaded into
GLOBAL BIND
!%1551% OOPSLOC = PSECTS[PSOOPS]<0,0>, ! Shouldn't be referenced, but space
! for it must be allocated in PSECTS
LOWLOC = PSECTS[PSDATA]<0,0>, ! Current LOWSEG (.DATA.) address
HILOC = PSECTS[PSCODE]<0,0>, ! HISEG (.CODE.) address
%1526% LARGELOC = PSECTS[PSLARGE]<0,0>,! .LARG. address
%1526% ABSLOC = PSECTS[PSABS]<0,0>; ! Absolute (.ABS.) address (always 0)
GLOBAL
%1437% HIORIGIN, ! Origin of Hi-seg
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
%1274% COMTSIZ, ! TOTAL SIZE OF COMMON
ONEPLIT, ! POINTER TO CONSTANT INTEGER 1
! SET IN GLOBINIT
%1431% MINUSONE, ! POINTER TO CONST TABLE ENTRY FOR -1
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
!***************************************************************
! GLOBALS USED BY PHASE 2 SKELETON AND PHASE 3
!***************************************************************
TREEPTR, ! PTR TO THE NODE IN THE TREE CURRENTLY BEING PROCESSED
CSTMNT, ! PTR TO THE STATEMENT NODE CURRENTLY BEING PROCESSED
NEDZER, ! FLAG TO INDICATE IF ZERO-ARG-BLOCK NEEDED
ZERBLK, ! PTR TO LABEL TABLE ENTRY FOR LABEL ON A
! ZERO-ARG-BLOCK FOR FOROTS
A1NODE, ! PTR TO 1ST ARGNODE UNDER TREEPTR;
A2NODE, ! PTR TO 2ND ARGNODE UNDER TREEPTR
A1LABEL, ! PTRS TO LABEL-TABLE ENTRIES - USED IN THE
A2LABEL, ! TABLE-DRIVEN PART OF THE CODE-GENERATOR
A3LABEL,
OPDSPIX, ! INDEX INTO DISPATCH TABLE FOR OPGENTABLE
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
PC, ! RELATIVE LOC OF NEXT INSTR TO BE GENERATED
PBOPWD, ! INDICATES INSTRUCTION WD TO BE OUTPUT
! TO PEEPHOLE BUFFER
PSYMPTR, ! INDICATES THE PBFSYMPTR FIELD TO BE OUTPUT
! TO THE PEEPHOLE BUFFER
IOLSPTR, ! PTR TO THE FIRST AND LAST IO STMNT IN THE PROGRAM
DATASPTR, ! PTR TO FIRST AND LAST DATA STATEMENT NODES
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.
!***************************************************************
NEGFLG,
NOTFLG,
TRUECENTRY, ! Pointer to constant table entry for "TRUE"
FALSECENTRY, ! For false
CIOCALL, ! Pointer to current IOLSTCALL node being built
CIOCLAST, ! Pointer to last element on the IOLSTCALL node
! being built
INPFLAG, ! Flag for current statement is an input statement
USERFNFLG, ! Flag for this statement includes a call to a user
! function
%1530% TOPIO, ! Pointer to the top level I/O statement above this
%1530% ! IOLSCLS node
!***************************************************************
! GLOBALS USED ONLY BY THE REGISTER ALLOCATOR
!***************************************************************
CLOBBREGS, ! REGISTERS CLOBBERED IN THE COURSE OF
! EVALUATION OF THIS EXPRESSION
DBLMODE, ! IF THIS GLOBAL IS TRUE, THEN THE GLOBALS
! STBSYR AND STRGCT HAVE BEEN SET TO DO
! REG ALLOC IN DOUBLE-PREC MODE
!***************************************************************
%1274% ! Globals used in temporary allocation
!***************************************************************
%1274% QANCHOR, ! Pointer to start of linked list of .Qnnnn variables
! they are linked in order of location inside .Q space
%1274% LASTQ, ! Pointer to the last .Q used by the current statement
%1274% QLOC, ! Last location in .Q space that was used by the
! current statement
%1274% QMAX, ! Maximum size of .Q space for all statements
%1274% QCNT, ! Counter to use when generating the next .Qnnnn
%1274% LASTSFNQ, ! Pointer to the last .Q used by statement functions
! The .Q variables between QANCHOR and LASTSFNQ can not
! be reused by other statements
%1274% QSFNMAX, ! Maximum size of .Q space used by statement functions
%1406% DANCHOR, ! Pointer to start of linked list of .Dnnnn variables.
! They are used for compile-time-constant character
! descriptors. They are not reused.
%1406% LASTD, ! Pointer to the last .Dnnnn variable created
%1406% DCNT, ! Counter to use when generating the next .Dnnnn
VERYFRST, ! USED BY GLOBAL TEMPORARY ALLOCATOR IN THE GLOBALLY
! OPTIMIZING CASE VERYFRST POINT TO AUXILLARY LIST
PBFPTR, ! PTR TO NEXT AVAILABLE WORD IN BUFFER
VECTOR PBUFF[PBFSIZE],
PEEPPTR, ! PTR TO WD IN PEEPHOLE BUFFER OFF OF WHICH
! ARE KEYING IN PEEPHOLE OPTIMIZING
ILABIX, ! CT OF INTERNALLY GENERATED LABELS
!***************************************************************
! GLOBALS THAT ARE SET UP BEFORE CALLING THE STATEMENT REGISTER
! ALLOCATOR
!***************************************************************
GBSYREGS, ! BITS IN THIS WD ARE 0 FOR ANY REGISTERS USED FOR
! GLOBALLY ALLOCATED VARIABLES
GBSYCT, ! NUMBER OF REGS AVAILABLE FOR USE BY LOCAL
! REGISTER ALLOCATOR
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
STRGCT, ! NUMBER OF REGS AVAILABLE FOR USE
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.
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
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
![674] MAKE DOSTAK BIGGER AND COMBINE IT WITH EHASH
%674% DOSTAK[DOSTSIZ], ! DOSTAK MUST PRECEDE EHASH FOR FORTG
EHASH[EHSIZ], ! EXPRESSION HASH TABLE FOR CMN SUB ELIM.
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
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 TRANSLATION TABLE FROM SRCID TO THE FUNCTION CODE IN CALLING
! THE MTOP. FUNCTION OF FOROTS
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
DWP, ! POINTER FOR WALK OF DO DEPTH ANALYSIS TREE
!***************************************************************
! GLOBALS USED TO PASS ARGS TO ASSEMBLY-LANG CONSTANT FOLDING
! ROUTINE
!***************************************************************
C1H,
C1L,
C2H,
C2L,
COPRIX,
SAVACS[7], ! AREA WHERE THE CONSTANT-FOLDING ROUTINE SAVES THE ACS
SAVE17, ! FOR SPECIAL RETURNS TO PHAZECONTROL
!***************************************************************
! MORE FORTB GLOBALS
!***************************************************************
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
LMLINO, ! CURRENT SOURCE LINE NUMBER
LMRONO, ! CURRENT MAP ROW NUMBER
LMCONO; ! CURRENT MAP COLUMN NUMBER
GLOBAL BIND
ENDOFILE = 0; ! END OF FILE INDICATOR RETURNED BY LEXICAL()
GLOBAL
%1133% MAXFF, ! Maximum size of compiler lowseg
%1213% CHLEN, ! Add CHLEN for character count for character data
! Move ACTLDATYPE and CHDLEN out of STA2.
%1213% ACTLDATYPE, ! Set to the identifier's actual datatype
! in order to differentiate between REAL*8 and
! DOUBLEPRECISION when doing variable*n and
! variable(subscripts)*n declarations
! used in ASTER and set in TYPDECLARE
%1213% CHDLEN, ! The default length for a CHARACTER variable
%1245% CHDECL, ! Flag that is set when a character declaration
! or an implicit character declaration is seen.
! It is used in MRP3R and MRP3G to test whether
! we have to scan the symbol table to generate
! hi seg character descriptors.
%1436% CHARUSED, ! Flag for character data used. Set if character
! operator, character intrinsic function, or ref
! to a character var is seen. In V7, causes
! global optimization to be discontinued.
! CHARUSED differs from CHDECL because CHDECL
! not set for: 'ABC' // 'DEF'
%1460% TURNOFFOPT, ! Flag for /OPT turned off for this subroutine
! because it has character data. (Should be
! removed when /OPT of char is supported. )
%1245% CHDSTART, ! HISEG location for the start of character data
! descriptors
%1245% HDRFLG, ! Flag for header has been output
%1245% TCNT, ! Count of number of temporaries listed on line
%1214% DOIFSTK, ! Nested DO and block IF stmts enclosing
! current stmt. (FORTB only)
%1466% ENTPREVIOUS, ! Address of previous entry statement
%1511% SAVLOC, ! Flag, Local variables need to be SAVE-d
%1511% SAVBLC, ! Flag, Must SAVE blank common
%1511% SAVALL, ! Flag, A SAVE without args was given
%1511% SAVNED, ! Flag, A SAVE rel block is needed.
%1467% NUMSAVCOMMON, ! NUMber of SAVe-d commons found in
%1467% ! SAVE statements in this module.
%1531% PTRSAVCOMMON, ! Pointer to the end of a linked
%1531% ! list of the commons in SAVE-s.
%1531% !
%1531% ! Links have the form:
%1531% ! [ptr to symbol tab,, ptr to previous link]
%1633% LINCNT, ! Number of source lines in program
%1633% STCNT, ! Number of executable statements in program
GLOBEND; ! Last global to be zeroed in GLOBAL.BLI
!***************************************************************
! NOTE: ALL GLOBALS FROM SYMTBL TO GLOBEND INCLUSIVE WILL BE
! INITIALIZED TO ZERO IN MODULE CLASSIFIER BEFORE EACH
! COMPILATION.
!***************************************************************
![1466] *** The below are tables which we DO NOT want zeroed out. They have
![1466] *** been moved to here to avoid any confusion about this!!
![761] Add entries for /GFLOATING - it has its own arg type
! Used as conversion table from internal valu types to external value
! types. Values for the macros can be found in REQREL.BLI. These must be
! changed to change these values. This table exists in the normal and /GFL
! half, so to change a value, both halves of the table must be changed.
BIND EVALDUM=PLIT(EVALU GLOBALLY NAMES
%1466% TYPOCTAL, !0,INTERNAL OCTAL
%1466% TYPLOGICAL, !1,INTERNAL LOGICAL
0, !2,INTERNALLY UNUSED
0, !3,INTERNALLY UNUSED
%1466% TYPLOGICAL, !4,INTERNALLY CONTROL (SAME AS LOGICAL)
0, !5,INTERNALLY UNUSED
0, !6,INTERNALLY UNUSED
0, !7,INTERNALLY UNUSED
%1466% TYPDBLOCTAL, !8,INTERNALLY DOUBLE OCTAL
0, !9,INTERNALLY UNUSED
0, !10,INTERNALLY UNUSED
0, !11,INTERNALLY UNUSED
%1466% TYPHOLLERITH, !12,INTERNALLY HOLLERITH
%1466% TYPCHARACTER, !13,INTERNALLY CHARACTER
0, !14,INTERNALLY UNUSED
0, !15,INTERNALLY UNUSED
%1466% TYPINTEGER, !16,INTERNALLY INTEGER
0, !17,INTERNALLY BYTE (NOT IN RELEASE 1)
%1466% TYPINTEGER, !18,INTERNALLY INDEX(SAME AS INTEGER)
0, !19,INTERNALLY UNUSED
%1466% TYPREAL, !20,INTERNALLY REAL
0, !21,INTERNALLY UNUSED
0, !22,INTERNALLY UNUSED
0, !23,INTERNALLY UNUSED
%1466% TYPDOUBLPREC, !24,INTERNALLY DOUBLE PRECISION
0, !25,INTERNALLY UNUSED
0, !26,INTERNALLY UNUSED
0, !27,INTERNALLY UNUSED
%1466% TYPCOMPLEX, !28, INTERNALLY COMPLEX
%[761]% 0, !29, UNUSED
%[761]% 0, !30, UNUSED
%[761]% 0, !31, UNUSED
! G-floating portion of table.
%1466% TYPOCTAL, !32,INTERNAL OCTAL
%1466% TYPLOGICAL, !33,INTERNAL LOGICAL
%[761]% 0, !34,INTERNALLY UNUSED
%[761]% 0, !35,INTERNALLY UNUSED
%1466% TYPLOGICAL, !36,INTERNALLY CONTROL (SAME AS LOGICAL)
%[761]% 0, !37,INTERNALLY UNUSED
%[761]% 0, !38,INTERNALLY UNUSED
%[761]% 0, !39,INTERNALLY UNUSED
%1466% TYPDBLOCTAL, !40,INTERNALLY DOUBLE OCTAL
%[761]% 0, !41,INTERNALLY UNUSED
%[761]% 0, !42,INTERNALLY UNUSED
%[761]% 0, !43,INTERNALLY UNUSED
%1466% TYPHOLLERITH, !44,INTERNALLY HOLLERITH
%1466% TYPCHARACTER, !45,INTERNALLY CHARACTER
%[761]% 0, !46,INTERNALLY UNUSED
%[761]% 0, !47,INTERNALLY UNUSED
%1466% TYPINTEGER, !48,INTERNALLY INTEGER
%[761]% 0, !49,INTERNALLY BYTE (NOT IN RELEASE 1)
%1466% TYPINTEGER, !50,INTERNALLY INDEX(SAME AS INTEGER)
%[761]% 0, !51,INTERNALLY UNUSED
%1466% TYPREAL, !52,INTERNALLY REAL
%[761]% 0, !53,INTERNALLY UNUSED
%[761]% 0, !54,INTERNALLY UNUSED
%[761]% 0, !55,INTERNALLY UNUSED
%1466% TYPGFLDBLPREC, !56,INTERNALLY DOUBLE PRECISION
%[761]% 0, !57,INTERNALLY UNUSED
%[761]% 0, !58,INTERNALLY UNUSED
%[761]% 0, !59,INTERNALLY UNUSED
%1466% TYPCOMPLEX, !60, INTERNALLY COMPLEX
%[761]% 0, !61, UNUSED
%[761]% 0, !62, UNUSED
%[761]% 0); !63, UNUSED
!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
!
!THE FOLLOWING TABLE CONTAINS THE DEFAULT TYPES FOR IDENTIFIERS
MACRO IN=16$,RL=20$,DB=24$,CX=28$,LG=0$,
%1264% CH=13$;
! Each TYPTABle entry is two words long. The first word has a -1 in the
! left half if the letter already appeared in an IMPLICIT declaration.
! The right half is the IDTYPE. The second word is the character count
! for character data.
%1213% GLOBAL TYPTAB[52];
!
! The following defines the library function ID Table.
! Each entry is composed 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 table is two tables, one 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,GENSPGEN,FOLDTOCONST)=
((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
%1270% ((GENSPGEN^35) !Bit 0 is flag for generic function
%1270% ! which has no specific name.
%1567% OR (FOLDTOCONST^34) !Bit 1 signifies that this function
%1567% ! may be able to be folded into a const
%1270% OR (GENTBPTR)<0,0>)$; !For generic fns - The 2nd Wd points to
! a 4 Wd sub-table that indicates which
! actual Fn to use for each arg type
! ATT(B,C,D,E,F,G,H,I)
! 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
! I - Bit if generic but non-specific name
!***********************************************************************
! This table MUST be kept in alphabetical order, since it is
! binary searched to find out if a function in question is a
! Fortran or user function.
!***********************************************************************
! In addition, there are 3 parallel tables which must be kept
! in order; LIBATTRIBUTES, DOTTEDNAMES, GDOTTEDNAMES.
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),
%1241% ANINTENT NAMES FN(ANINT),
ASINENT NAMES FN(ASIN),
ATANENT NAMES FN(ATAN),
ATAN2ENT NAMES FN(ATAN2),
CABSENT NAMES FN(CABS),
CCOSENT NAMES FN(CCOS),
%[761]% CDABSENT NAMES FN(CDABS),
CEXPENT NAMES FN(CEXP),
%1264% CHARENT NAMES FN(CHAR),
CLOGENT NAMES FN(CLOG),
%1252% ?CMP1.DENT NAMES FN(CMP1.D),
%1252% ?CMP1.IENT NAMES FN(CMP1.I),
%1252% ?CMP1.RENT GLOBALLY NAMES FN(CMP1.R),
%1264% ?CMPL.CENT NAMES FN(CMPL.C),
%1252% ?CMPL.DENT NAMES FN(CMPL.D),
%1252% ?CMPL.IENT NAMES FN(CMPL.I),
%1252% CMPLXENT GLOBALLY NAMES FN(CMPLX),
CONJGENT NAMES FN(CONJG),
COSENT NAMES FN(COS),
COSDENT NAMES FN(COSD),
COSHENT NAMES FN(COSH),
%[761]% COTANENT NAMES FN(COTAN),
CSINENT NAMES FN(CSIN),
CSQRTENT NAMES FN(CSQRT),
DABSENT NAMES FN(DABS),
%[761]% DACOSENT NAMES FN(DACOS),
%[761]% DASINENT NAMES FN(DASIN),
DATANENT NAMES FN(DATAN),
DATAN2ENT NAMES FN(DATAN2),
DBLEENT NAMES FN(DBLE),
%1252% ?DBLE.CENT NAMES FN(DBLE.C),
%1252% ?DBLE.IENT NAMES FN(DBLE.I),
DCOSENT NAMES FN(DCOS),
%[761]% DCOSHENT NAMES FN(DCOSH),
%[761]% DCOTANENT NAMES FN(DCOTAN),
%1241% DDIMENT NAMES FN(DDIM),
DEXPENT NAMES FN(DEXP),
DFLOATENT NAMES FN(DFLOAT),
DIMENT NAMES FN(DIM),
%1241% DINTENT NAMES FN(DINT),
DLOGENT NAMES FN(DLOG),
DLOG10ENT NAMES FN(DLOG10),
DMAX1ENT NAMES FN(DMAX1),
DMIN1ENT NAMES FN(DMIN1),
DMODENT NAMES FN(DMOD),
%1241% DNINTENT NAMES FN(DNINT),
%1241% DPRODENT NAMES FN(DPROD),
DSIGNENT NAMES FN(DSIGN),
DSINENT NAMES FN(DSIN),
%[761]% DSINHENT NAMES FN(DSINH),
DSQRTENT NAMES FN(DSQRT),
%[761]% DTANENT NAMES FN(DTAN),
%[761]% DTANHENT NAMES FN(DTANH),
EXPENT NAMES FN(EXP),
FLOATENT NAMES FN(FLOAT),
IABSENT NAMES FN(IABS),
%1264% ICHARENT NAMES FN(ICHAR),
IDIMENT NAMES FN(IDIM),
IDINTENT NAMES FN(IDINT),
%1241% IDNINTENT NAMES FN(IDNINT),
IFIXENT NAMES FN(IFIX),
%1264% INDEXENT NAMES FN(INDEX),
INTENT NAMES FN(INT),
%1252% ?INT.CENT NAMES FN(INT.C),
ISIGNENT NAMES FN(ISIGN),
%1264% LENENT NAMES FN(LEN),
%1264% LGEENT NAMES FN(LGE),
%1264% LGTENT NAMES FN(LGT),
%1264% LLEENT NAMES FN(LLE),
%1264% LLTENT NAMES FN(LLT),
%1241% LOGENT NAMES FN(LOG),
%1264% LOG10ENT NAMES FN(LOG10),
%1264% MAXENT NAMES FN(MAX),
MAX0ENT NAMES FN(MAX0),
MAX1ENT NAMES FN(MAX1),
%1264% MINENT NAMES FN(MIN),
MIN0ENT NAMES FN(MIN0),
MIN1ENT NAMES FN(MIN1),
MODENT NAMES FN(MOD),
%1241% NINTENT NAMES FN(NINT),
%1264% ?NOP.CENT NAMES FN(NOP.C),
%1264% ?NOP.DENT NAMES FN(NOP.D),
%1264% ?NOP.IENT NAMES FN(NOP.I),
%1264% ?NOP.RENT NAMES FN(NOP.R),
REALENT NAMES FN(REAL),
%1252% ?REAL.CENT NAMES FN(REAL.C),
SIGNENT NAMES FN(SIGN),
SINENT NAMES FN(SIN),
SINDENT NAMES FN(SIND),
SINHENT NAMES FN(SINH),
SNGLENT NAMES FN(SNGL),
SQRTENT NAMES FN(SQRT),
%[761]% TANENT NAMES FN(TAN),
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 word 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 or ILGARGTYPE saying this arg type is
illegal.
***********)%
BIND ABSGENTB =
PLIT (IABSENT,ABSENT,DABSENT,CABSENT); !ABS
%1241% BIND ACOSGENTB =
%1241% PLIT (ILGARGTYPE,ACOSENT,DACOSENT,ILGARGTYPE); !ACOS
%1241% BIND AINTGENTB =
%1241% PLIT (ILGARGTYPE,AINTENT,DINTENT,ILGARGTYPE); !AINT
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
%1241% BIND ANINTGENTB =
%1241% PLIT (ILGARGTYPE,ANINTENT,DNINTENT,ILGARGTYPE); !ANINT
%1241% BIND ASINGENTB =
%1241% PLIT (ILGARGTYPE,ASINENT,DASINENT,ILGARGTYPE); !ASIN
BIND ATANGENTB =
PLIT (ILGARGTYPE,ATANENT,DATANENT,ILGARGTYPE); !ATAN
BIND ATAN2GENTB =
PLIT (ILGARGTYPE,ATAN2ENT,DATAN2ENT,ILGARGTYPE); !ATAN2
%1252% BIND ?CMP1.RGENTB =
%1264% PLIT (?CMP1.IENT,?CMP1.RENT,?CMP1.DENT,?NOP.CENT); !CMP1.R
%1252% BIND CMPLXGENTB =
%1264% PLIT (?CMPL.IENT,CMPLXENT,?CMPL.DENT,?CMPL.CENT); !CMPLX
BIND COSGENTB =
PLIT (ILGARGTYPE,COSENT,DCOSENT,CCOSENT); !COS
%1241% BIND COSHGENTB =
%1241% PLIT (ILGARGTYPE,COSHENT,DCOSHENT,ILGARGTYPE); !COSH
%1252% BIND DBLEGENTB =
%1264% PLIT(?DBLE.IENT,DBLEENT,?NOP.DENT,?DBLE.CENT); !DBLE
%1241% BIND DIMGENTB =
%1241% PLIT (IDIMENT,DIMENT,DDIMENT,ILGARGTYPE); !DIM
BIND EXPGENTB =
PLIT (ILGARGTYPE,EXPENT,DEXPENT,CEXPENT); !EXP
BIND INTGENTB =
%1264% PLIT (?NOP.IENT,INTENT,IDINTENT,?INT.CENT); !INT
%1241% BIND LOGGENTB =
%1241% PLIT (ILGARGTYPE,ALOGENT,DLOGENT,CLOGENT); !LOG
%1241% BIND LOG10GENTB =
%1241% PLIT (ILGARGTYPE,ALOG10ENT,DLOG10ENT,ILGARGTYPE); !LOG10
%1241% BIND MAXGENTB =
%1241% PLIT (MAX0ENT,AMAX1ENT,DMAX1ENT,ILGARGTYPE); !MAX
%1241% BIND MINGENTB =
%1241% PLIT (MIN0ENT,AMIN1ENT,DMIN1ENT,ILGARGTYPE); !MIN
BIND MODGENTB =
PLIT (MODENT,AMODENT,DMODENT,ILGARGTYPE); !MOD
%1241% BIND NINTGENTB =
%1241% PLIT (ILGARGTYPE,NINTENT,IDNINTENT,ILGARGTYPE); !NINT
%1252% BIND REALGENTB =
%1264% PLIT (REALENT,?NOP.RENT,SNGLENT,?REAL.CENT); !REAL
BIND SIGNGENTB =
PLIT (ISIGNENT,SIGNENT,DSIGNENT,ILGARGTYPE); !SIGN
BIND SINGENTB =
PLIT (ILGARGTYPE,SINENT,DSINENT,CSINENT); !SIN
%1241% BIND SINHGENTB =
%1241% PLIT (ILGARGTYPE,SINHENT,DSINHENT,ILGARGTYPE); !SINH
BIND SQRTGENTB =
PLIT (ILGARGTYPE,SQRTENT,DSQRTENT,CSQRTENT); !SQRT
%1241% BIND TANGENTB =
%1241% PLIT (ILGARGTYPE,TANENT,DTANENT,ILGARGTYPE); !TAN
%1241% BIND TANHGENTB =
%1241% PLIT (ILGARGTYPE,TANHENT,DTANHENT,ILGARGTYPE); !TANH
!
! "Imaginary" type conversion to make NOP functions inline
! (functions are later removed and these keeps the names in the
! symbol table from being put out to program listings). Not put
! in TABLES.BLI, since these are not executed functions.
BIND
%1264% CTOCOP = OPERC(COMPLEX,TYPECNV,FROMCMPLX),
%1264% DTODOP = OPERC(DOUBLPREC,TYPECNV,FROMDBLPRC),
%1264% ITOIOP = OPERC(INTEGER,TYPECNV,FROMINT),
%1264% RTOROP = OPERC(REAL,TYPECNV,FROMREAL);
%1567% BIND CF=1; ! Constant folding is possible
! The Function Attribute Table
!
! ATT(Type of function, Type of result, #of args, Inline bit,
! Generic bit, Inline function label, Pointer for Generic fn,
! Generic but not specific bit, Fn may be folded to constant)
!
BIND ZATTRIBUTES = PLIT(LIBATTRIBUTES GLOBALLY NAMES
ATT(RL,RL,1,1,1,ABSFNOP,ABSGENTB,0,0), !ABS
%1241% ATT(RL,RL,1,0,1,0,ACOSGENTB,0,0), !ACOS
ATT(CX,RL,1,0,0,0,-1,0,0), !AIMAG
%1241% ATT(RL,RL,1,0,1,0,AINTGENTB,0,0), !AINT
ATT(RL,RL,1,0,1,0,ALOGGENTB,0,0), !ALOG
ATT(RL,RL,1,0,1,0,ALOG10GENTB,0,0), !ALOG10
ATT(IN,RL,VARGCTFLG,0,0,0,-1,0,0), !AMAX0
ATT(RL,RL,VARGCTFLG,1,1,AMAXFNOP,AMAX1GENTB,0,0), !AMAX1
ATT(IN,RL,VARGCTFLG,0,0,0,-1,0,0), !AMIN0
ATT(RL,RL,VARGCTFLG,1,1,AMINFNOP,AMIN1GENTB,0,0), !AMIN1
ATT(RL,RL,2,0,0,0,-1,0,0), !AMOD
%1241% ATT(RL,RL,1,0,1,0,ANINTGENTB,0,0), !ANINT
%1241% ATT(RL,RL,1,0,1,0,ASINGENTB,0,0), !ASIN
ATT(RL,RL,1,0,1,0,ATANGENTB,0,0), !ATAN
ATT(RL,RL,2,0,1,0,ATAN2GENTB,0,0), !ATAN2
ATT(CX,RL,1,0,0,0,-1,0,0), !CABS
ATT(CX,CX,1,0,0,0,-1,0,0), !CCOS
%[761]% ATT(DB,DB,1,0,0,0,-1,0,0), !CDABS
ATT(CX,CX,1,0,0,0,-1,0,0), !CEXP
%1567% ATT(IN,CH,1,1,0,CHARFNOP,-1,0,CF), !CHAR
ATT(CX,CX,1,0,0,0,-1,0,0), !CLOG
%1252% ATT(DB,CX,1,1,0,CMPDOP,-1,0,0), !CMP1.D
%1252% ATT(IN,CX,1,1,0,CMPIOP,-1,0,0), !CMP1.I
%1270% ATT(RL,CX,1,1,1,CMPLXOP,?CMP1.RGENTB,1,0),!CMP1.R
%1264% ATT(CX,CX,2,0,0,0,-1,0,0), !CMPL.C
%1252% ATT(DB,CX,2,0,0,0,-1,0,0), !CMPL.D
%1252% ATT(IN,CX,2,0,0,0,-1,0,0), !CMPL.I
%1270% ATT(RL,CX,2,1,1,CMPLXFNOP,CMPLXGENTB,1,0),!CMPLX
ATT(CX,CX,1,0,0,0,-1,0,0), !CONJG
ATT(RL,RL,1,0,1,0,COSGENTB,0,0), !COS
ATT(RL,RL,1,0,0,0,-1,0,0), !COSD
%1241% ATT(RL,RL,1,0,1,0,COSHGENTB,0,0), !COSH
%[761]% ATT(RL,RL,1,0,0,0,-1,0,0), !COTAN
ATT(CX,CX,1,0,0,0,-1,0,0), !CSIN
ATT(CX,CX,1,0,0,0,-1,0,0), !CSQRT
ATT(DB,DB,1,1,0,DABSFNOP,-1,0,0), !DABS
%[761]% ATT(DB,DB,1,0,0,0,-1,0,0), !DACOS
%[761]% ATT(DB,DB,1,0,0,0,-1,0,0), !DASIN
ATT(DB,DB,1,0,0,0,-1,0,0), !DATAN
ATT(DB,DB,2,0,0,0,-1,0,0), !DATAN2
%1270% ATT(RL,DB,1,1,1,DBLEOP,DBLEGENTB,1,0), !DBLE
%1252% ATT(CX,DB,1,1,0,DBLCOP,-1,0,0), !DBLE.C
%1252% ATT(IN,DB,1,1,0,DBLIOP,-1,0,0), !DBLE.I
ATT(DB,DB,1,0,0,0,-1,0,0), !DCOS
%[761]% ATT(DB,DB,1,0,0,0,-1,0,0), !DCOSH
%[761]% ATT(DB,DB,1,0,0,0,-1,0,0), !DCOTAN
%1241% ATT(DB,DB,2,0,0,0,-1,0,0), !DDIM
ATT(DB,DB,1,0,0,0,-1,0,0), !DEXP
ATT(IN,DB,1,1,0,DFLOATOP,-1,0,0), !DFLOAT
%1241% ATT(RL,RL,2,1,1,DIMFNOP,DIMGENTB,0,0), !DIM
%1241% ATT(DB,DB,1,0,0,0,-1,0,0), !DINT
ATT(DB,DB,1,0,0,0,-1,0,0), !DLOG
ATT(DB,DB,1,0,0,0,-1,0,0), !DLOG10
ATT(DB,DB,VARGCTFLG,0,0,0,-1,0,0), !DMAX1
ATT(DB,DB,VARGCTFLG,0,0,0,-1,0,0), !DMIN1
ATT(DB,DB,2,0,0,0,-1,0,0), !DMOD
%1241% ATT(DB,DB,1,0,0,0,-1,0,0), !DNINT
%1241% ATT(RL,DB,2,0,0,0,-1,0,0), !DPROD
ATT(DB,DB,2,0,0,0,-1,0,0), !DSIGN
ATT(DB,DB,1,0,0,0,-1,0,0), !DSIN
%[761]% ATT(DB,DB,1,0,0,0,-1,0,0), !DSINH
ATT(DB,DB,1,0,0,0,-1,0,0), !DSQRT
%[761]% ATT(DB,DB,1,0,0,0,-1,0,0), !DTAN
%[761]% ATT(DB,DB,1,0,0,0,-1,0,0), !DTANH
ATT(RL,RL,1,0,1,0,EXPGENTB,0,0), !EXP
ATT(IN,RL,1,1,0,FLOATOP,-1,0,0), !FLOAT
ATT(IN,IN,1,1,0,IABSFNOP,-1,0,0), !IABS
%1567% ATT(CH,IN,1,1,0,ICHARFNOP,-1,0,CF), !ICHAR
ATT(IN,IN,2,0,0,0,-1,0,0), !IDIM
ATT(DB,IN,1,1,0,IDINTOP,-1,0,0), !IDINT
%1241% ATT(DB,IN,1,0,0,0,-1,0,0), !IDNINT
ATT(RL,IN,1,1,0,IFIXOP,-1,0,0), !IFIX
%1264% ATT(CH,IN,2,0,0,0,-1,0,0), !INDEX
ATT(RL,IN,1,1,1,INTOP,INTGENTB,0,0), !INT
%1252% ATT(CX,IN,1,1,0,INTCOP,-1,0,0), !INT.C
ATT(IN,IN,2,1,0,ISIGNFNOP,-1,0,0), !ISIGN
%1651% LENATTRIB GLOBALLY NAMES
%1567% ATT(CH,IN,1,1,0,LENFNOP,-1,0,CF), !LEN
%1264% ATT(CH,LG,2,0,0,0,-1,0,0), !LGE
%1264% ATT(CH,LG,2,0,0,0,-1,0,0), !LGT
%1264% ATT(CH,LG,2,0,0,0,-1,0,0), !LLE
%1264% ATT(CH,LG,2,0,0,0,-1,0,0), !LLT
%1270% ATT(RL,RL,1,0,1,0,LOGGENTB,1,0), !LOG
%1270% ATT(RL,RL,1,0,1,0,LOG10GENTB,1,0), !LOG10
%1270% ATT(RL,RL,VARGCTFLG,0,1,0,MAXGENTB,1,0), !MAX
ATT(IN,IN,VARGCTFLG,1,0,MAXFNOP,-1,0,0), !MAX0
ATT(RL,IN,VARGCTFLG,0,0,0,-1,0,0), !MAX1
%1270% ATT(RL,RL,VARGCTFLG,0,1,0,MINGENTB,1,0), !MIN
ATT(IN,IN,VARGCTFLG,1,0,MINFNOP,-1,0,0), !MIN0
ATT(RL,IN,VARGCTFLG,0,0,0,-1,0,0), !MIN1
ATT(IN,IN,2,1,1,MODFNOP,MODGENTB,0,0), !MOD
%1241% ATT(RL,IN,1,0,1,0,NINTGENTB,0,0), !NINT
%1264% ATT(CX,CX,1,1,0,CTOCOP,-1,0,0), !Complex NOP.
%1264% ATT(DB,DB,1,1,0,DTODOP,-1,0,0), !Double prec NOP.
%1264% ATT(IN,IN,1,1,0,ITOIOP,-1,0,0), !Integer NOP.
%1264% ATT(RL,RL,1,1,0,RTOROP,-1,0,0), !Real NOP.
%1252% ATT(IN,RL,1,1,1,REALIOP,REALGENTB,0,0), !REAL
%1252% ATT(CX,RL,1,1,0,REALOP,-1,0,0), !REAL.C
ATT(RL,RL,2,1,1,SIGNFNOP,SIGNGENTB,0,0), !SIGN
ATT(RL,RL,1,0,1,0,SINGENTB,0,0), !SIN
ATT(RL,RL,1,0,0,0,-1,0,0), !SIND
%1241% ATT(RL,RL,1,0,1,0,SINHGENTB,0,0), !SINH
ATT(DB,RL,1,1,0,SNGLOP,-1,0,0), !SNGL
ATT(RL,RL,1,0,1,0,SQRTGENTB,0,0), !SQRT
%1241% ATT(RL,RL,1,0,1,0,TANGENTB,0,0), !TAN
%1241% ATT(RL,RL,1,0,1,0,TANHGENTB,0,0) !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) );
% THESE GLOBALS ARE NOT TO BE SET TO ZERO AT THE BEGINNING OF EACH
PROGRAM UNIT. PHASE I NEEDS THEM %
GLOBAL
%1133% RTIME, ! Run time for this program unit
%1133% CTIME, ! Time of day for connect time
%1633% PHTIME[6], ! Runtime per phaze
%1633% PBTIME, ! Runtime at the beginning of the current phase
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
ARINGLEFT, ! USED FOR BUFFERING OF INPUT
BUGOUT, ! INTERNAL OUTPUT SWITCH VALUE
FLAGS2, !SECONDARY FLAG REGISTER - SEE IOFLG.BLI
![767] ADD F2; REMOVE GFMCOK (NOW IN FIRST)
F2, ![767] SECONDARY SWITCH 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 PAGE #
%1504% BIGARY; ! Holds size of smallest array that will go
! into .LARG. for extended addressing
END
END
ELUDOM