VMS Help  —  CC  Language topics, Builtin Functions, 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.
Close Help