HELPLIB.HLB  —  MACRO  Qualifiers  /UNALIGNED
       /UNALIGNED
       /NOUNALIGNED (default)

    Forces the compiler to use unaligned loads and stores for all
    register-based memory references (except those that are FP-based
    or SP-based or are references to local aligned static data).

    By default, the compiler assumes that addresses in registers used
    as base pointers (except those that are FP-based or SP-based)
    are longword-aligned at routine entry, and generates code to load
    BYTE, WORD, and LONG data accordingly. This can result in run-
    time alignment faults, with significant performance impact, if
    the assumption is incorrect. Specifying /UNALIGNED causes the
    compiler to generate code assuming pointers are unaligned. This
    code is significantly larger, but is more efficient than handling
    an alignment fault.  On OpenVMS x86-64, unaligned accesses are not
    a performance penalty.

                                   NOTE

       The compiler does not track quadword register alignment.
       For quadword memory references (such as in VAX MOVQ
       instructions), the compiler assumes the base address is
       quadword aligned, unless it has determined the address
       may not be longword-aligned in its register tracking code.
       Quadword references in OpenVMS Alpha and OpenVMS I64 built-
       in uses are always assumed to be quadword aligned. Since
       these must be in new code, the data should be properly
       aligned.  On OpenVMS x86-64, unaligned accesses are not
       a performance penalty.

    The /UNALIGNED qualifier is generally appropriate only for
    modules where data is often unaligned, but which are not
    sufficiently performance sensitive to merit the correction of
    the data alignment in the source.
Close Help