/[NO]ALIGNMENT
Controls whether the VSI Fortran compiler naturally aligns
fields in records or data items in common blocks, or whether the
compiler packs those fields and data items together on arbitrary
byte boundaries.
Although VSI Fortran always aligns local data items on natural
boundaries, certain data declaration statements and misaligned
arguments can force misaligned data.
Use the /ALIGNMENT qualifier to control the alignment of fields
associated with common blocks, derived-type structures, and record
structures.
The compiler issues messages when it detects misaligned data by
default (/WARNINGS=ALIGNMENT). For information about the causes of
misaligned data and detection at run time, see the HP Fortran for
OpenVMS User Manual.
NOTE
Misaligned data significantly increases the time it
takes to execute a program, depending on the number
of misaligned fields encountered. Specifying
/ALIGNMENT=ALL (same as /ALIGNMENT=NATURAL)
minimizes misaligned data.
To obtain compiler messages when misaligned data is encountered,
use the /WARNING=ALIGNMENT qualifier (or within the OpenVMS
Debugger, use the command SET BREAK/UNALIGNED).
Parameter "p" is a specifier with one of the following forms:
[class =] rule
(class = rule [,...])
SEQUENCE
ALL (or NATURAL)
MULTILANGUAGE
NONE (or PACKED)
PAD_ALIGN_SIZE
class
Is one of the following keywords:
COMMONS (for common blocks)
RECORDS (for derived-type and record structures)
STRUCTURES (for derived-type and record structures)
In VSI Fortran, STRUCTURES and RECORDS are the same.
rule
Is one of the following keywords:
NATURAL
Naturally aligns fields in derived-type and record structures and
data items in common blocks on up to 8-byte boundaries.
If you specify NATURAL, the compiler will naturally align all
data in a common block, including INTEGER(KIND=8), REAL(KIND=8),
and all COMPLEX data.
PACKED
Packs fields in derived-type and record structures or data items
in common blocks on arbitrary byte boundaries.
STANDARD
Naturally aligns data items in common blocks on up to 4-byte
boundaries (consistent with the Fortran 95/90 and FORTRAN 77
standards).
The compiler will not naturally align INTEGER(KIND=8),
REAL(KIND=8), and COMPLEX data declarations. Such data
declarations should be planned so they fall on natural
boundaries. Specifying /ALIGNMENT=COMMONS=STANDARD alone means
that the default for record structures is used.
Note that this keyword only applies to common blocks; therefore,
you can specify /ALIGNMENT=COMMONS=STANDARD, but you cannot
specify /ALIGNMENT=STANDARD.
[NO]MULTILANGUAGE
Controls whether the compiler pads the size of common blocks to
ensure compatibility when the common block program section is
shared by code created by other compilers running on OpenVMS.
When a program section generated by a Fortran common block is
overlaid with a program section consisting of a C structure,
linker error messages can result. This is because the sizes of
the program sections are inconsistent; the C structure is padded
and the Fortran common block is not.
Specifying /ALIGNMENT=COMMON=MULTILANGUAGE ensures that HP
Fortran follows a consistent program section size allocation
scheme that works with DEC C program sections that are shared
across multiple images. Program sections shared in a single
image do not have a problem. The corollary DEC C qualifier is
/PSECT_MODEL=[NO]MULTILANGUAGE.
The default is /ALIGNMENT=COMMON=NOMULTILANGUAGE, which is also
the default behavior of HP Fortran 77 (formerly Compaq
Fortran 77) and is sufficient for most applications.
This keyword only applies to common blocks; therefore, you can
specify /ALIGNMENT=COMMONS=[NO]MULTILANGUAGE, but you cannot
specify /ALIGNMENT=[NO]MULTILANGUAGE.
[NO]PAD_ALIGN_SIZE
Controls whether the compiler pads the size of common blocks
based on the alignment size.
Specifying /ALIGNMENT=COMMON=PAD_ALIGN_SIZE ensures that the
padding appended to the common blocks makes the program section
size allocation as large as the alignment size.
Using this keyword results in a program section allocation
incompatible with sharing across multiple images if those
images are not Fortran images which have also been compiled
with this keyword.
This keyword applies only to common blocks; therefore, you can
specify /ALIGNMENT=COMMON=[NO]PAD_ALIGN_SIZE, but you cannot
specify /ALIGNMENT=[NO]PAD_ALIGN_SIZE.
[NO]SEQUENCE
Specifies whether or not SEQUENCE types follow the alignment rule
currently in effect.
If SEQUENCE is in effect, then SEQUENCE types participate in
alignment the same as derived types without the SEQUENCE
property.
If NOSEQUENCE is in effect, SEQUENCE types are always packed,
regardless of the current alignment rules.
ALL
Is equivalent to /ALIGNMENT, /ALIGNMENT=(NATURAL, SEQUENCE) and
/ALIGNMENT=(COMMONS=(NATURAL, NOMULTILANGUAGE), RECORDS=NATURAL,
SEQUENCE).
NONE
Is equivalent to /NOALIGNMENT, /ALIGNMENT=(PACKED, NOSEQUENCE),
and /ALIGNMENT=(COMMONS=(PACKED, NOMULTILANGUAGE),
RECORDS=PACKED, NOSEQUENCE).
Defaults depend whether the /ALIGNMENT and /FAST qualifiers are
specified, as follows:
Command Line Default
------------ -------
Omit /ALIGNMENT and /ALIGNMENT=(NOSEQUENCE, COMMONS=(PACKED,
omit /FAST NOMULTILANGUAGE), RECORD=NATURAL)
Omit /ALIGNMENT and /ALIGNMENT=(SEQUENCE, COMMONS=(NATURAL,
specify /FAST NOMULTILANGUAGE), RECORD=NATURAL)
/ALIGNMENT=COMMONS=rule Use whatever the /ALIGNMENT qualifier
specifies for COMMONS, but use the
default of RECORDS=NATURAL
/ALIGNMENT=RECORD=rule Use whatever the /ALIGNMENT qualifier
specifies for RECORDS, but use the
default of COMMONS (depends whether
/FAST was specified or omitted)
If you specify /ALIGNMENT=class=rule, the rule only applies to that
class, the other class gets aligned according to the default; for
example:
1. /ALIGNMENT=COMMONS=STANDARD
In this case, RECORDS=NATURAL by default.
2. /ALIGNMENT=RECORDS=NATURAL
In this case, COMMONS=PACKED by default.
To request packed, unaligned data in a derived-type or record
structure, specify /ALIGNMENT=RECORDS=PACKED, or consider placing
source data declarations for the structure so that the data is
naturally aligned.
To request aligned data in common blocks, specify
/ALIGNMENT=COMMONS=STANDARD (for data items up to 4 bytes in
length) or /ALIGNMENT=COMMONS=NATURAL (for data items up to 8 bytes
length), or place source data declarations within the common block
carefully so that each data field is naturally aligned.
The /ALIGNMENT and /WARN=ALIGNMENT qualifiers can be used together
in the same command line.
You can override the alignment specified on the command line by
using a CDEC$ OPTIONS directive, as described in the HP Fortran for
OpenVMS Language Reference Manual.
You can also specify /ALIGNMENT=REC2BYTE or /ALIGNMENT=REC4BYTE.
These options specify that fields of records and components of
derived types are to be aligned on the smaller of:
o The 2- or 4-byte boundary specified
o The boundary that will naturally align them
These options do not affect whether common blocks are naturally
aligned or packed.