TAL Reference Manual

Compiler Directives
TAL Reference Manual526371-001
16-51
Example of INHIBITXX Directive
NOINHIBITXX turns the INHIBITXX setting off for subsequent declarations. Such
declarations retain the INHIBITXX or NOINHIBITXX attribute throughout the
compilation.
NOINHIBITXX enables compiler use of XX instructions (LWXX, SWXX, LBXX, and
SBXX), which generate efficient indexing for extended declarations located between
G[0] and G[63]. Binder, however, might relocate such extended declarations beyond
G[63] when you bind separately compiled modules or bind TAL code with code written
in other languages. The indexing code then becomes incorrect and Binder issues error
20 (data reference failed due to relocation).
INHIBITXX suppresses compiler use of XX instructions and generates inefficient but
correct indexing for extended declarations located between G[0] and G[63] even if
Binder relocates such declarations after G[63]. INHIBITXX does not generate correct
indexing if the offset of a structure data item from the zeroth occurrence is out of the
INT range (–32,768 through 32,767). For more information, see the INT32INDEX
directive in this section.
If you specify INHIBITXX before one or more data declarations, the INHIBITXX
attribute applies to those particular data items throughout the compilation.
INHIBITXX and NOINHIBITXX have no effect on:
Extended declarations above G[63] of the user data segment. The compiler never
uses XX instructions for such declarations.
Extended declarations within BLOCK declarations with the AT (0) or BELOW (64)
option. The compiler automatically generates efficient code for such declarations.
Binder does not relocate such declarations after G[63].
The INT32INDEX directive overrides INHIBITXX or NOINHIBITXX, whichever is in
effect.
For information on the XX instructions, see the
System Description Manual for your
system.
Example of INHIBITXX Directive
This example shows use of NOINHIBITXX, which generates efficient addressing, and
INHIBITXX, which suppresses efficient addressing: