Copyright Digital Equipment Corp. All rights reserved.

Description

   The .PRESERVE and .NOPRESERVE directives cause the compiler to
   generate special Alpha assembly code for VAX MACRO instructions,
   within portions of the source module, that rely on VAX guarantees
   of operation atomicity or granularity.

   Use of .PRESERVE or .NOPRESERVE without specifying GRANULARITY
   or ATOMICITY will affect both options. When preservation of
   both granularity and atomicity is enabled, and the compiler
   encounters a VAX coding construct that requires both granularity
   and atomicity guarantees, it enforces atomicity over granularity.

   Alternatively, you can use the /PRESERVE and /NOPRESERVE compiler
   qualifiers to affect the atomicity and granularity in generated
   code throughout an entire MACRO source module, though this is not
   recommended, because the overhead of the extra code where it is
   not needed can slow the program down considerably.

   Atomicity is guaranteed for multiprocessing systems as well as
   uniprocessing systems when you specify .PRESERVE ATOMICITY.

   When the .PRESERVE directive is present, you can use the /RETRY_
   COUNT qualifier on the command line to control the number of
   times the compiler-generated code retries a granular or atomic
   update.

                                WARNING

      If .PRESERVE ATOMICITY is turned on, any unaligned data
      references will result in a fatal reserved operand fault.

      If .PRESERVE GRANULARITY is turned on, unaligned word
      references to addresses assumed aligned will also cause a
      fatal reserved operand fault.