Copyright Digital Equipment Corp. All rights reserved.

Alpha_Compatibility

 The VSI C built-in functions available on OpenVMS Alpha systems are
 also available on I64 systems, with some differences:

  o  There is no support for the asm, fasm, and dasm intrinsics
     (declared in the <c_asm.h> header file).

  o  The functionality provided by the special-case treatment of R26
     on an Alpha system asm, as in asm("MOV R26,R0"), is provided by
     a new built-in function for I64 systems:

     __int64 __RETURN_ADDRESS(void);

  o  The only PAL function calls implemented as built-in functions
     within the compiler are the 24 queue-manipulation builtins.
     The queue manipulation builtins generate calls to new OpenVMS
     system services SYS$<name>, where <name> is the name of the
     builtin with the leading underscores removed.

     Any other OpenVMS PAL calls are supported through macros
     defined in the <pal_builtins.h> header file included in the
     <builtins.h> header file.  Typically, the macros in
     <pal_builtins.h> transform an invocation of an Alpha system
     builtin into a call to a system service that performs the
     equivalent function on an I64 system.  Two notable exceptions
     are __PAL_GENTRAP and __PAL_BUGCHK, which instead invoke the
     I64 specific compiler builtin __break2.

  o  There is no support for the various floating-point built-in
     functions used by the OPenVMS math library (for example,
     operations with chopped rounding and conversions).

  o  For most built-in functions that take a retry count, the
     compiler issues a warning message, evaluates the count for
     possible side effects, ignores it, and then invokes the same
     function without a retry count.  This is necessary because the
     retry behavior allowed by Alpha load-locked/store-conditional
     sequences does not exist on I64 systems.  There are two
     exceptions to this:  __LOCK_LONG_RETRY and
     __ACQUIRE_SEM_LONG_RETRY; in these cases, the retry behavior
     involves comparisons of data values, not just
     load-locked/store-conditional.

  o  The __CMP_STORE_LONG and __CMP_STORE_QUAD built-in functions
     produce either a warning or an error, depending on whether or
     not the compiler can determine if the source and destination
     addresses are identical.  If the addresses are identical, the
     compiler treats the builtin as the new __CMP_SWAP_ form and
     issues a warning.  Otherwise it is an error.