TAL Programmer's Guide
Compiling With Relocatable Data Blocks
Compiling Programs
14–22 096254 Tandem Computers Incorporated
Specify INHIBITXX or NOINHIBITXX immediately before the global declarations to
which it applies. The specified directive then applies to those declarations throughout
the compilation. The following example shows how NOINHIBITXX generates
efficient addressing, while INHIBITXX suppresses efficient addressing:
!Default NOINHIBITXX in effect; assign NOINHIBITXX
! attribute to subsequent declaration.
STRUCT .EXT xstruct[0:9]; !XSTRUCT has NOINHIBITXX
BEGIN ! attribute.
STRING array[0:9];
END;
INT index;
STRING var;
?INHIBITXX !Assign INHIBITXX attribute to
! subsequent declaration.
STRING .EXT xstruct2 (xstruct);
!XSTRUCT2 has INHIBITXX attribute.
!Preceding declarations are
! allocated in #GLOBAL and
! $#GLOBAL.
PROC my_proc MAIN;
BEGIN
@xstruct2 := @xstruct;
var := xstruct[index].array[0];
!Generate efficient addressing
! because XSTRUCT has NOINHIBITXX
! attribute, but if Binder
! relocates #GLOBAL beyond G[63],
! the addressing is incorrect.
var := xstruct2[index].array[0];
!Generate less efficient addressing
! because XSTRUCT2 has INHIBITXX
! attribute; the addressing is
! correct even if Binder relocates
END; ! #GLOBAL.