as: Sparc-Constants
9.43.3.3 Constants
..................
Several Sparc instructions take an immediate operand field for which
mnemonic names exist. Two such examples are 'membar' and 'prefetch'.
Another example are the set of V9 memory access instruction that allow
specification of an address space identifier.
The 'membar' instruction specifies a memory barrier that is the
defined by the operand which is a bitmask. The supported mask mnemonics
are:
* '#Sync' requests that all operations (including nonmemory reference
operations) appearing prior to the 'membar' must have been
performed and the effects of any exceptions become visible before
any instructions after the 'membar' may be initiated. This
corresponds to 'membar' cmask field bit 2.
* '#MemIssue' requests that all memory reference operations appearing
prior to the 'membar' must have been performed before any memory
operation after the 'membar' may be initiated. This corresponds to
'membar' cmask field bit 1.
* '#Lookaside' requests that a store appearing prior to the 'membar'
must complete before any load following the 'membar' referencing
the same address can be initiated. This corresponds to 'membar'
cmask field bit 0.
* '#StoreStore' defines that the effects of all stores appearing
prior to the 'membar' instruction must be visible to all processors
before the effect of any stores following the 'membar'. Equivalent
to the deprecated 'stbar' instruction. This corresponds to
'membar' mmask field bit 3.
* '#LoadStore' defines all loads appearing prior to the 'membar'
instruction must have been performed before the effect of any
stores following the 'membar' is visible to any other processor.
This corresponds to 'membar' mmask field bit 2.
* '#StoreLoad' defines that the effects of all stores appearing prior
to the 'membar' instruction must be visible to all processors
before loads following the 'membar' may be performed. This
corresponds to 'membar' mmask field bit 1.
* '#LoadLoad' defines that all loads appearing prior to the 'membar'
instruction must have been performed before any loads following the
'membar' may be performed. This corresponds to 'membar' mmask
field bit 0.
These values can be ored together, for example:
membar #Sync
membar #StoreLoad | #LoadLoad
membar #StoreLoad | #StoreStore
The 'prefetch' and 'prefetcha' instructions take a prefetch function
code. The following prefetch function code constant mnemonics are
available:
* '#n_reads' requests a prefetch for several reads, and corresponds
to a prefetch function code of 0.
'#one_read' requests a prefetch for one read, and corresponds to a
prefetch function code of 1.
'#n_writes' requests a prefetch for several writes (and possibly
reads), and corresponds to a prefetch function code of 2.
'#one_write' requests a prefetch for one write, and corresponds to
a prefetch function code of 3.
'#page' requests a prefetch page, and corresponds to a prefetch
function code of 4.
'#invalidate' requests a prefetch invalidate, and corresponds to a
prefetch function code of 16.
'#unified' requests a prefetch to the nearest unified cache, and
corresponds to a prefetch function code of 17.
'#n_reads_strong' requests a strong prefetch for several reads, and
corresponds to a prefetch function code of 20.
'#one_read_strong' requests a strong prefetch for one read, and
corresponds to a prefetch function code of 21.
'#n_writes_strong' requests a strong prefetch for several writes,
and corresponds to a prefetch function code of 22.
'#one_write_strong' requests a strong prefetch for one write, and
corresponds to a prefetch function code of 23.
Onle one prefetch code may be specified. Here are some examples:
prefetch [%l0 + %l2], #one_read
prefetch [%g2 + 8], #n_writes
prefetcha [%g1] 0x8, #unified
prefetcha [%o0 + 0x10] %asi, #n_reads
The actual behavior of a given prefetch function code is processor
specific. If a processor does not implement a given prefetch
function code, it will treat the prefetch instruction as a nop.
For instructions that accept an immediate address space identifier,
'as' provides many mnemonics corresponding to V9 defined as well as
UltraSPARC and Niagara extended values. For example, '#ASI_P' and
'#ASI_BLK_INIT_QUAD_LDD_AIUS'. See the V9 and processor specific
manuals for details.