Object code listing

The object code listing consists of the machine instructions and a translation of these instructions into a form that resembles assembler and includes comments, such as source program statement numbers.

The machine instructions are formatted into blocks of code, headed by the statement or line number in the PL/I for MVS™ & VM source program listing. Generally, only executable statements appear in the listing. DECLARE statements are not normally included. The names of PL/I for MVS & VM variables, rather than the addresses that appear in the machine code, are listed. Special mnemonics are used to refer to some items, including test hooks, descriptors, and address constants.

Statements in the object code listing are ordered by block, as they are sequentially encountered in the source program. Statements in the external procedure are given first, followed by the statements in each inner block. As a result, the order of statements frequently differs from that of the source program.

Every object code listing begins with the name of the external procedure. The actual entry point of the external procedure immediately follows the heading comment REAL ENTRY. The subsequent machine code is the prolog for the block, which performs block activation. The comment PROCEDURE BASE marks the end of the prolog. Following this is a translation of the first executable statement in the PL/I for MVS & VM source program. Table 1 summarizes the comment used in the listing.

Table 1. Comments in a PL/I for MVS & VM object code listing
Comment Function
BEGIN BLOCK xxx Indicates the start of the begin block with label xxx
BEGIN BLOCK NUMBER n Indicates the start of the begin block with number n
CALCULATION OF COMMONED EXPRESSION FOLLOWS Indicates that an expression used more than once in the routine is calculated at this point
CODE MOVED FROM STATEMENT NUMBER n Indicates object code moved by the optimization process to a different part of the routine and gives the number of the statement from which it originated
COMPILER GENERATED SUBROUTINE xxx Indicates the start of compiler-generated subroutine xxx
CONTINUATION OF PREVIOUS REGION Identifies the point at which addressing from the previous routine base recommences
END BLOCK Indicates the end of a begin block
END INTERLANGUAGE PROCEDURE xxx Identifies the end of an ILC procedure xxx
END OF COMMON CODE Identifies the end of code used in running more than one statement
END OF COMPILER GENERATED SUBROUTINE Indicates the end of the compiler-generated subroutine
END PROCEDURE Identifies the end of a procedure
END PROGRAM Indicates the end of the external procedure
INITIALIZATION CODE FOR xxx Indicates the start of initialization code for variable xxx
INITIALIZATION CODE FOR OPTIMIZED LOOP FOLLOWS Indicates that some of the code that follows was moved from within a loop by the optimization process
INTERLANGUAGE PROCEDURE xxx Identifies the start of an implicitly generated ILC procedure xxx
METHOD OR ORDER OF CALCULATING EXPRESSIONS CHANGED Indicates that the order of the code following was changed to optimize the object code
ON-UNIT BLOCK NUMBER n Indicates the start of an ON-unit block with number n
ON-UNIT BLOCK END Indicates the end of the ON-unit block
PROCEDURE xxx Identifies the start of the procedure labeled xxx
PROCEDURE BASE Identifies the address loaded into the base register for the procedure
PROGRAM ADDRESSABILITY REGION BASE Identifies the address where the routine base is updated if the routine size exceeds 4096 bytes and consequently cannot be addressed from one base
PROLOGUE BASE Identifies the start of the prolog code common to all entry points into that procedure
REAL ENTRY Precedes the actual executable entry point for a procedure
STATEMENT LABEL xxx Identifies the position of source program statement label xxx
STATEMENT NUMBER n Identifies the start of code generated for statement number n in the source listing

In certain cases, the compiler uses mnemonics (see Table 2) to identify the type of operand in an instruction and, where applicable, follows the mnemonic by the name of a PL/I for MVS & VM variable.

Table 2. PL/I for MVS & VM mnemonics
Mnemonic Explanation
A..xxx Address constant for xxx
ADD..xxx Aggregate descriptor for xxx
BASE..xxx Base address of variable xxx
BLOCK.n Identifier created for an otherwise unlabeled block
CL.n Compiler-generated label number n
D..xxx Descriptor for xxx
DED..xxx Data element descriptor for xxx
HOOK...ENTRY Debugging tool block entry hook
HOOK...BLOCK-EXIT Debugging tool block exit hook
HOOK...PGM-EXIT Debugging tool program exit hook
HOOK...PRE-CALL Debugging tool pre-call hook
HOOK...INFO Additional pre-call hook information
HOOK...POST-CALL Debugging tool post call hook
HOOK...STMT Debugging tool statement hook
HOOK...IF-TRUE Debugging tool IF true hook
HOOK...IF-FALSE Debugging tool ELSE hook
HOOK...WHEN Debugging tool WHEN true hook
HOOK...OTHERWISE Debugging tool OTHERWISE true hook
HOOK...LABEL Debugging tool label hook
HOOK...DO Debugging tool iterative DO hook
HOOK...ALLOC Debugging tool ALLOCATE controlled hook
WSP.n Workspace, followed by identifying number n
L..xxx Length of variable xxx
PR..xxx Pseudoregister vector slot for xxx
LOCATOR..xxx Locator for xxx
RKD..xxx Record or key descriptor for xxx
VO..xxx Virtual origin for xxx (the address where element 0 is held for a one-dimensional array, element 0,0 for a two-dimensional array, and so on)