Trailing-Edge
-
PDP-10 Archives
-
fortv11
-
p3r.bli
There are 12 other files named p3r.bli in the archive. Click here to see a list.
!COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1972, 1987
!ALL RIGHTS RESERVED.
!
!THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
!ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
!INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
!COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
!OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
!TRANSFERRED.
!
!THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
!AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
!CORPORATION.
!
!DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
!SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
!AUTHOR: S MURPHY/EGM/TFV/AHM
MODULE P3R(SREG=#17,VREG=#15,FREG=#16,DREGS=4,RESERVE(0,1,2,3),START) =
BEGIN
SWITCHES NOLIST;
REQUIRE FIRST.BLI;
REQUIRE TABLES.BLI;
SWITCHES LIST;
GLOBAL BIND P3RV = #11^24 + 0^18 + #2355; ! Version Date: 3-May-84
%(
***** Begin Revision History *****
49 ----- ----- CALL "DATPROC" EVEN IF NO REL FILE IS TO BE PRODUCED
FOR PURPOSES OF ERROR DETECTION
***** Begin version 6 *****
50 1047 EGM 22-Jan-81 Q10-05325
Add support for TOPS-10 execute only.
***** Begin Version 7 *****
51 1245 TFV 3-Aug-81 ------
Add code to MRP3R to generate HISEG character descriptors for
character constants, scalars, and arrays
52 1406 TFV 27-Oct-81 ------
Call HSDDESC to output .Dnnnn variable compile-time-constant
character descriptors to the HISEG.
53 1454 RVM 7-Jan-82
Format allocation changed to work with the optimizer. Change
it here too.
***** Begin Version 10 *****
2210 AHM 27-Jul-83
Rename DUMPFORMAT to DMPFORMAT to reserve DUMP?? for SIX12.
2334 AHM 5-Apr-84
Under /EXTEND, allocate the object program's entry vector in
the .DATA. psect before the call to HISEGBLK in MRP3R.
2355 AHM 3-May-84
Use the symbol ENTAUXSIZE to allocate additional words after
the /EXTEND entry vector. The only auxiliary word for now is
an EFIW for the reenter address.
***** End V10 Development *****
***** End Revision History *****
)%
%[1047]% PORTAL ROUTINE MRP3R =
BEGIN
%(***OVERLAY TO GO THRU THE WHOLE PROGRAM TWICE. ON THE FIRST PASS, PERFORM
COMPLEXITY ANALYSIS, ON THE 2ND PASS, PERFORM REGISTER ALLOCATION
****)%
EXTERNAL GBSYREGS,GBSYCT; !GLOBALS INDICATING WHICH REGS ARE
EXTERNAL RETNCT; !CT OF "RETURN" STMNTS IN PROGRAM - MADE
! IN COMPLEXITY
EXTERNAL ASVCT; !CT OF ASSIGNMENT STMNTS THAT DIRECTLY PRECEDE RETURN STMNTS
! AND ASSIGN THE VAL OF THE (MADE IN COMPLEXITY)
! AVAILABLE AFTER THE GLOBAL ALLOCATOR HAS
! TAKEN THOSE THAT IT WILL USE
EXTERNAL CSTMNT;
EXTERNAL DATPROC;
MAP BASE CSTMNT;
EXTERNAL DOWDP; !USED IN SUBSTITUTING REGCONTENTS NODES FOR REFS
! TO A DO INDEX
EXTERNAL ALLOCATE;
EXTERNAL SEGINCORE,PHAZCONTROL;
%1245% EXTERNAL ALCAVARS,ALCQVARS,ALCCON;
%1454% EXTERNAL RELINIT,HISEGBLK,FORMPTR;
%2210% EXTERNAL DMPFORMAT; ! Allocates and writes FORMATs
EXTERNAL FNTMP; !FOR STATEMENT FN ARG NAMES
EXTERNAL INITREGCANDIDATES; !ROUTINE TO INIT TABLE FOR 1ST PASS OF
! BASIC BLOCK REG ALLOCATOR
EXTERNAL CMPBLO; !ROUTINE TO PERFORM 1ST PASS OF BASIC BLOCK REG
! ALLOCATOR FOR A GIVEN BASIC BLOCK. CALLED WITH
! "CSTMNT" POINTING TO THE 1ST STMNT OF
! THE BLOCK, RETURNS WITH "CSTMNT" POINTING TO THE
! 1ST STMNT OF THE NEXT BLOCK
EXTERNAL INIRGSTATE; !ROUTINE TO INIT TABLE FOR 2ND PASS OF
! BASIC BLOCK ALLOCATOR
EXTERNAL ALCBLO; !ROUTINE TO PERFORM 2ND PASS OF BASIC BLOCK
! ALLOCATOR FOR A GIVEN BLOCK. CALLED WITH "CSTMNT"
! POINTING TO THE 1ST STMNT OF THE BLOCK. RETURNS
! WITH CSTMNT POINTING TO THE 1ST STMNT OF THE NEXT BLOCK
EXTERNAL NOBBREGSLOAD; !FLAG WHICH IS SET WHILE PROCESSING NODES FOR
! WHICH THE CODE WILL NOT ALWAYS BE EXECUTED WHEN
! THE BLOCK CONTAINING THE NODE IS EXECUTED
! (IE OF THE FN RETURN REG). THIS NODE WILL BE SUBSTITUTED
! ON THE LHS OF ALL STMNT FNS
%1245% EXTERNAL CHDECL; ! Flag for character declaration seen
%1245% EXTERNAL HILOC; ! Current high seg break
%1245% EXTERNAL LOWLOC; ! Current low seg break
%2334% EXTERNAL ENTADDR; ! Object address of entry vector
%1245% EXTERNAL HSLITD; ! Routine to generate high seg descriptors for
! character constants
%1245% EXTERNAL HSCHD; ! Routine to generate high seg descriptors for
! character scalars and arrays
%1406% EXTERNAL HSDDESC; ! Routine to generate high seg descriptors for
! .Dnnnn compile-time-constant character
! descriptors
%1245% EXTERNAL HDRFLG; ! Flag for heading has been output
%1245% EXTERNAL TCNT; ! Count of temporaries on a line
%(***INIT REL FILE (IF ONE IS TO BE GENERATED)***)%
IF .FLGREG<OBJECT> THEN RELINIT();
%(***PERFORM STORAGE ALLOCATION FOR ALL VARIABLES AND ARRAYS***)%
ALLOCATE();
GBSYREGS_#177760000000; !12 REGS (2-15) ARE AVAILABLE
GBSYCT_12;
CSTMNT_.SORCPTR<LEFT>; !PTR TO 1ST STMNT OF PROGRAM
%(***SKIP 1ST STMNT OF PROGRAM - WHICH IS A DUMMY CONTINUE***)%
IF .CSTMNT NEQ 0
THEN
CSTMNT_.CSTMNT[SRCLINK];
%(***INIT GLOBAL USED BY THE ROUTINE THAT SUBSTITUTES REGCONTENTS NODES
FOR REFS TO A DO INDEX THAT LIVES IN A REGISTER***)%
DOWDP_0;
%(***INIT FLAG FOR "THIS PROGRAM INCLUDES ARITH EXPRS
THAT MUST BE EVALUATED BYMEANS OF LIBRARY ROUTINES***)%
LIBARITHFLG_FALSE;
%(***INIT COUNTS THAT ARE KEPT OF THE NUMBER OF RETURN STMNTS IN THE PROGRAM AND OF
THE NUMBER OF PLACES THAT THE FN VAL IS ASSIGNED DIRECTLY BEFORE A "RETURN"**)%
RETNCT_0;
ASVCT_0;
%(***PERFORM 1ST PASS OF BASIC BLOCK REG ALLOCATOR (AND "COMPLEXITY" PASS OF
LOCAL REG ALLOCATOR) ***)%
INITREGCANDIDATES(); !INIT TABLE USED BY 1ST PASS OF BB ALLOCATOR
WHILE .CSTMNT NEQ 0 !UNTIL REACH END OF PROGRAM
DO
CMPBLO(); !WALK THRU EACH BASIC BLOCK
%(***PERFORM 2ND PASS OF BASIC BLOCK REG ALLOCATOR***)%
CSTMNT_.SORCPTR<LEFT>; !PTR TO 1ST STMNT OF PROGRAM
IF .CSTMNT NEQ 0 !SKIP THE DUMMY CONTINUE AT START OF PROGRAM
THEN CSTMNT_.CSTMNT[SRCLINK];
NOBBREGSLOAD_FALSE; !INITIALIZE FLAG THAT WILL BE SET TO TRUE WHILE
! PROCESSING NODES WHICH WILL NOT ALWAYS BE EVALUATED
! WHEN THE BLOCK CONTAINING THEM IS EVALUATED (EG NODES
! UNDER THE STMNT UNDER A LOGICAL IF, UNDER A CONTROL BOOLEAN,..)
INIRGSTATE(); !INIT THE TABLE THAT REPRESENTS THE CONTENTS OF THE REGISTERS
WHILE .CSTMNT NEQ 0 !WALK THRU ALL BLOCKS UNTIL REACH THE END OF PROGRAM
DO
ALCBLO(); !PERFORM 2ND BASIC-BLOCK ALLOCATOR PASS FOR THIS BLOCK
!ALLOCATE SYMBOL TABLE ENTRIES FOR THE TEMPS
!NECESSARY FOR SAVE-RESTORE. THIS DEPENDS ON
!CLOBBREGS SO CANNOT BE DONE TIL NOW
%1245% HDRFLG _ 0; ! Heading not output yet
%1245% TCNT = 0;
%1245% ALCAVARS();
%(***NOW PERFORM STORAGE ALLOCATION FOR ALL TEMPORARIES AND CONSTANTS***)%
%1245% ALCQVARS();
%(***OUTPUT LOADER BLOCKS FOR DATA STATEMENTS. MUST
DO THIS HERE BEFORE CONSTANTS ARE ROUNDED BACK TO SINGLE
PREC OR TO KA10 FORMAT***)%
DATPROC();
%1245% ALCCON();
! Dump the format statements into the .REL file if there are some
%1454% IF .FORMPTR NEQ 0
%2210% THEN DMPFORMAT();
%2334% IF EXTENDED AND .FLGREG<OBJECT> AND .FLGREG<PROGTYP> EQL MAPROG
%2334% THEN
%2334% BEGIN ! EXTENDED MAIN PROGRAM
%2334% ENTADDR = .LOWLOC; ! Save address of entry vector
%2355% LOWLOC = .LOWLOC+ENTVECSIZE+ENTAUXSIZE; ! Allocate space for it
%2334% END; ! EXTENDED MAIN PROGRAM
HISEGBLK(); ! Output the hiseg block in .REL file
! to tell loader size of lowseg
%1245% ! Output high seg descriptors for character constants
%1245% HDRFLG _ 0; ! Heading not output yet
%1245% HSLITD();
%1245% ! Output high seg descriptors for character scalars and arrays
%1245% ! If we had character declarations in FORTB
%1245% IF .CHDECL EQL -1 THEN HSCHD();
%1406% ! Output high seg descriptors for .Dnnnn compile-time-constant
%1406% ! character descriptors
%1406% HSDDESC();
END; ! of MRP3R
MACHOP POPJ=#263;
MRP3R();
POPJ(#17,0)
END ELUDOM