@c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2002, 2008,
@c 2011
@c Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@ifset GENERIC
@page
@node Sparc-Dependent
@chapter SPARC Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter SPARC Dependent Features
@end ifclear

@cindex SPARC support
@menu
* Sparc-Opts::                  Options
* Sparc-Aligned-Data::		Option to enforce aligned data
* Sparc-Syntax::		Syntax
* Sparc-Float::                 Floating Point
* Sparc-Directives::            Sparc Machine Directives
@end menu

@node Sparc-Opts
@section Options

@cindex options for SPARC
@cindex SPARC options
@cindex architectures, SPARC
@cindex SPARC architectures
The SPARC chip family includes several successive versions, using the same
core instruction set, but including a few additional instructions at
each version.  There are exceptions to this however.  For details on what
instructions each variant supports, please see the chip's architecture
reference manual.

By default, @code{@value{AS}} assumes the core instruction set (SPARC
v6), but ``bumps'' the architecture level as needed: it switches to
successively higher architectures as it encounters instructions that
only exist in the higher levels.

If not configured for SPARC v9 (@code{sparc64-*-*}) GAS will not bump
past sparclite by default, an option must be passed to enable the
v9 instructions.

GAS treats sparclite as being compatible with v8, unless an architecture
is explicitly requested.  SPARC v9 is always incompatible with sparclite.

@c The order here is the same as the order of enum sparc_opcode_arch_val
@c to give the user a sense of the order of the "bumping".

@table @code
@kindex -Av6
@kindex -Av7
@kindex -Av8
@kindex -Asparclet
@kindex -Asparclite
@kindex -Av9
@kindex -Av9a
@kindex -Av9b
@kindex -Av9c
@kindex -Av9d
@kindex -Av9v
@kindex -Asparc
@kindex -Asparcvis
@kindex -Asparcvis2
@kindex -Asparcfmaf
@kindex -Asparcima
@kindex -Asparcvis3
@kindex -Asparcvis3r
@item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite
@itemx -Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd | -Av8plusv
@itemx -Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9v
@itemx -Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima
@itemx -Asparcvis3 | -Asparcvis3r
Use one of the @samp{-A} options to select one of the SPARC
architectures explicitly.  If you select an architecture explicitly,
@code{@value{AS}} reports a fatal error if it encounters an instruction
or feature requiring an incompatible or higher level.

@samp{-Av8plus}, @samp{-Av8plusa}, @samp{-Av8plusb}, @samp{-Av8plusc},
@samp{-Av8plusd}, and @samp{-Av8plusv} select a 32 bit environment.

@samp{-Av9}, @samp{-Av9a}, @samp{-Av9b}, @samp{-Av9c}, @samp{-Av9d}, and
@samp{-Av9v} select a 64 bit environment and are not available unless GAS
is explicitly configured with 64 bit environment support.

@samp{-Av8plusa} and @samp{-Av9a} enable the SPARC V9 instruction set with
UltraSPARC VIS 1.0 extensions.

@samp{-Av8plusb} and @samp{-Av9b} enable the UltraSPARC VIS 2.0 instructions,
as well as the instructions enabled by @samp{-Av8plusa} and @samp{-Av9a}.

@samp{-Av8plusc} and @samp{-Av9c} enable the UltraSPARC Niagara instructions,
as well as the instructions enabled by @samp{-Av8plusb} and @samp{-Av9b}.

@samp{-Av8plusd} and @samp{-Av9d} enable the floating point fused
multiply-add, VIS 3.0, and HPC extension instructions, as well as the
instructions enabled by @samp{-Av8plusc} and @samp{-Av9c}.

@samp{-Av8plusv} and @samp{-Av9v} enable the 'random', transactional
memory, floating point unfused multiply-add, integer multiply-add, and
cache sparing store instructions, as well as the instructions enabled
by @samp{-Av8plusd} and @samp{-Av9d}.

@samp{-Asparc} specifies a v9 environment.  It is equivalent to
@samp{-Av9} if the word size is 64-bit, and @samp{-Av8plus} otherwise.

@samp{-Asparcvis} specifies a v9a environment.  It is equivalent to
@samp{-Av9a} if the word size is 64-bit, and @samp{-Av8plusa} otherwise.

@samp{-Asparcvis2} specifies a v9b environment.  It is equivalent to
@samp{-Av9b} if the word size is 64-bit, and @samp{-Av8plusb} otherwise.

@samp{-Asparcfmaf} specifies a v9b environment with the floating point
fused multiply-add instructions enabled.

@samp{-Asparcima} specifies a v9b environment with the integer
multiply-add instructions enabled.

@samp{-Asparcvis3} specifies a v9b environment with the VIS 3.0,
HPC , and floating point fused multiply-add instructions enabled.

@samp{-Asparcvis3r} specifies a v9b environment with the VIS 3.0,
HPC, transactional memory, random, and floating point unfused multiply-add
instructions enabled.

@item -xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc
@itemx -xarch=v8plusd | -xarch=v8plusv | -xarch=v9 | -xarch=v9a
@itemx -xarch=v9b | -xarch=v9c | -xarch=v9d | -xarch=v9v
@itemx -xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2
@itemx -xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3
@itemx -xarch=sparcvis3r
For compatibility with the SunOS v9 assembler.  These options are
equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd,
-Av8plusv, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, -Av9v, -Asparc, -Asparcvis,
-Asparcvis2, -Asparcfmaf, -Asparcima, -Asparcvis3, and -Asparcvis3r,
respectively.

@item -bump
Warn whenever it is necessary to switch to another level.
If an architecture level is explicitly requested, GAS will not issue
warnings until that level is reached, and will then bump the level
as required (except between incompatible levels).

@item -32 | -64
Select the word size, either 32 bits or 64 bits.
These options are only available with the ELF object file format,
and require that the necessary BFD support has been included.
@end table

@node Sparc-Aligned-Data
@section Enforcing aligned data

@cindex data alignment on SPARC
@cindex SPARC data alignment
SPARC GAS normally permits data to be misaligned.  For example, it
permits the @code{.long} pseudo-op to be used on a byte boundary.
However, the native SunOS assemblers issue an error when they see
misaligned data.

@kindex --enforce-aligned-data
You can use the @code{--enforce-aligned-data} option to make SPARC GAS
also issue an error about misaligned data, just as the SunOS
assemblers do.

The @code{--enforce-aligned-data} option is not the default because gcc
issues misaligned data pseudo-ops when it initializes certain packed
data structures (structures defined using the @code{packed} attribute).
You may have to assemble with GAS in order to initialize packed data
structures in your own code.

@cindex SPARC syntax
@cindex syntax, SPARC
@node Sparc-Syntax
@section Sparc Syntax
The assembler syntax closely follows The Sparc Architecture Manual,
versions 8 and 9, as well as most extensions defined by Sun
for their UltraSPARC and Niagara line of processors.

@menu
* Sparc-Chars::                Special Characters
* Sparc-Regs::                 Register Names
* Sparc-Constants::            Constant Names
* Sparc-Relocs::               Relocations
* Sparc-Size-Translations::    Size Translations
@end menu

@node Sparc-Chars
@subsection Special Characters

@cindex line comment character, Sparc
@cindex Sparc line comment character
A @samp{!} character appearing anywhere on a line indicates the start
of a comment that extends to the end of that line.

If a @samp{#} appears as the first character of a line then the whole
line is treated as a comment, but in this case the line could also be
a logical line number directive (@pxref{Comments}) or a preprocessor
control command (@pxref{Preprocessing}).

@cindex line separator, Sparc
@cindex statement separator, Sparc
@cindex Sparc line separator
@samp{;} can be used instead of a newline to separate statements.

@node Sparc-Regs
@subsection Register Names
@cindex Sparc registers
@cindex register names, Sparc

The Sparc integer register file is broken down into global,
outgoing, local, and incoming.

@itemize @bullet
@item
The 8 global registers are referred to as @samp{%g@var{n}}.

@item
The 8 outgoing registers are referred to as @samp{%o@var{n}}.

@item
The 8 local registers are referred to as @samp{%l@var{n}}.

@item
The 8 incoming registers are referred to as @samp{%i@var{n}}.

@item
The frame pointer register @samp{%i6} can be referenced using
the alias @samp{%fp}.

@item
The stack pointer register @samp{%o6} can be referenced using
the alias @samp{%sp}.
@end itemize

Floating point registers are simply referred to as @samp{%f@var{n}}.
When assembling for pre-V9, only 32 floating point registers
are available.  For V9 and later there are 64, but there are
restrictions when referencing the upper 32 registers.  They
can only be accessed as double or quad, and thus only even
or quad numbered accesses are allowed.  For example, @samp{%f34}
is a legal floating point register, but @samp{%f35} is not.

Certain V9 instructions allow access to ancillary state registers.
Most simply they can be referred to as @samp{%asr@var{n}} where
@var{n} can be from 16 to 31.  However, there are some aliases
defined to reference ASR registers defined for various UltraSPARC
processors:

@itemize @bullet
@item
The tick compare register is referred to as @samp{%tick_cmpr}.

@item
The system tick register is referred to as @samp{%stick}.  An alias,
@samp{%sys_tick}, exists but is deprecated and should not be used
by new software.

@item
The system tick compare register is referred to as @samp{%stick_cmpr}.
An alias, @samp{%sys_tick_cmpr}, exists but is deprecated and should
not be used by new software.

@item
The software interrupt register is referred to as @samp{%softint}.

@item
The set software interrupt register is referred to as @samp{%set_softint}.
The mnemonic @samp{%softint_set} is provided as an alias.

@item
The clear software interrupt register is referred to as
@samp{%clear_softint}.  The mnemonic @samp{%softint_clear} is provided
as an alias.

@item
The performance instrumentation counters register is referred to as
@samp{%pic}.

@item
The performance control register is referred to as @samp{%pcr}.

@item
The graphics status register is referred to as @samp{%gsr}.

@item
The V9 dispatch control register is referred to as @samp{%dcr}.
@end itemize

Various V9 branch and conditional move instructions allow
specification of which set of integer condition codes to
test.  These are referred to as @samp{%xcc} and @samp{%icc}.

In V9, there are 4 sets of floating point condition codes
which are referred to as @samp{%fcc@var{n}}.

Several special privileged and non-privileged registers
exist:

@itemize @bullet
@item
The V9 address space identifier register is referred to as @samp{%asi}.

@item
The V9 restorable windows register is referred to as @samp{%canrestore}.

@item
The V9 savable windows register is referred to as @samp{%cansave}.

@item
The V9 clean windows register is referred to as @samp{%cleanwin}.

@item
The V9 current window pointer register is referred to as @samp{%cwp}.

@item
The floating-point queue register is referred to as @samp{%fq}.

@item
The V8 co-processor queue register is referred to as @samp{%cq}.

@item
The floating point status register is referred to as @samp{%fsr}.

@item
The other windows register is referred to as @samp{%otherwin}.

@item
The V9 program counter register is referred to as @samp{%pc}.

@item
The V9 next program counter register is referred to as @samp{%npc}.

@item
The V9 processor interrupt level register is referred to as @samp{%pil}.

@item
The V9 processor state register is referred to as @samp{%pstate}.

@item
The trap base address register is referred to as @samp{%tba}.

@item
The V9 tick register is referred to as @samp{%tick}.

@item
The V9 trap level is referred to as @samp{%tl}.

@item
The V9 trap program counter is referred to as @samp{%tpc}.

@item
The V9 trap next program counter is referred to as @samp{%tnpc}.

@item
The V9 trap state is referred to as @samp{%tstate}.

@item
The V9 trap type is referred to as @samp{%tt}.

@item
The V9 condition codes is referred to as @samp{%ccr}.

@item
The V9 floating-point registers state is referred to as @samp{%fprs}.

@item
The V9 version register is referred to as @samp{%ver}.

@item
The V9 window state register is referred to as @samp{%wstate}.

@item
The Y register is referred to as @samp{%y}.

@item
The V8 window invalid mask register is referred to as @samp{%wim}.

@item
The V8 processor state register is referred to as @samp{%psr}.

@item
The V9 global register level register is referred to as @samp{%gl}.
@end itemize

Several special register names exist for hypervisor mode code:

@itemize @bullet
@item
The hyperprivileged processor state register is referred to as
@samp{%hpstate}.

@item
The hyperprivileged trap state register is referred to as @samp{%htstate}.

@item
The hyperprivileged interrupt pending register is referred to as
@samp{%hintp}.

@item
The hyperprivileged trap base address register is referred to as
@samp{%htba}.

@item
The hyperprivileged implementation version register is referred
to as @samp{%hver}.

@item
The hyperprivileged system tick compare register is referred
to as @samp{%hstick_cmpr}.  Note that there is no @samp{%hstick}
register, the normal @samp{%stick} is used.
@end itemize

@node Sparc-Constants
@subsection Constants
@cindex Sparc constants
@cindex constants, Sparc

Several Sparc instructions take an immediate operand field for
which mnemonic names exist.  Two such examples are @samp{membar}
and @samp{prefetch}.  Another example are the set of V9
memory access instruction that allow specification of an
address space identifier.

The @samp{membar} instruction specifies a memory barrier that is
the defined by the operand which is a bitmask.  The supported
mask mnemonics are:

@itemize @bullet
@item
@samp{#Sync} requests that all operations (including nonmemory
reference operations) appearing prior to the @code{membar} must have
been performed and the effects of any exceptions become visible before
any instructions after the @code{membar} may be initiated.  This
corresponds to @code{membar} cmask field bit 2.

@item
@samp{#MemIssue} requests that all memory reference operations
appearing prior to the @code{membar} must have been performed before
any memory operation after the @code{membar} may be initiated.  This
corresponds to @code{membar} cmask field bit 1.

@item
@samp{#Lookaside} requests that a store appearing prior to the
@code{membar} must complete before any load following the
@code{membar} referencing the same address can be initiated.  This
corresponds to @code{membar} cmask field bit 0.

@item
@samp{#StoreStore} defines that the effects of all stores appearing
prior to the @code{membar} instruction must be visible to all
processors before the effect of any stores following the
@code{membar}.  Equivalent to the deprecated @code{stbar} instruction.
This corresponds to @code{membar} mmask field bit 3.

@item
@samp{#LoadStore} defines all loads appearing prior to the
@code{membar} instruction must have been performed before the effect
of any stores following the @code{membar} is visible to any other
processor.  This corresponds to @code{membar} mmask field bit 2.

@item
@samp{#StoreLoad} defines that the effects of all stores appearing
prior to the @code{membar} instruction must be visible to all
processors before loads following the @code{membar} may be performed.
This corresponds to @code{membar} mmask field bit 1.

@item
@samp{#LoadLoad} defines that all loads appearing prior to the
@code{membar} instruction must have been performed before any loads
following the @code{membar} may be performed.  This corresponds to
@code{membar} mmask field bit 0.

@end itemize

These values can be ored together, for example:

@example
membar #Sync
membar #StoreLoad | #LoadLoad
membar #StoreLoad | #StoreStore
@end example

The @code{prefetch} and @code{prefetcha} instructions take a prefetch
function code.  The following prefetch function code constant
mnemonics are available:

@itemize @bullet
@item
@samp{#n_reads} requests a prefetch for several reads, and corresponds
to a prefetch function code of 0.

@samp{#one_read} requests a prefetch for one read, and corresponds
to a prefetch function code of 1.

@samp{#n_writes} requests a prefetch for several writes (and possibly
reads), and corresponds to a prefetch function code of 2.

@samp{#one_write} requests a prefetch for one write, and corresponds
to a prefetch function code of 3.

@samp{#page} requests a prefetch page, and corresponds to a prefetch
function code of 4.

@samp{#invalidate} requests a prefetch invalidate, and corresponds to
a prefetch function code of 16.

@samp{#unified} requests a prefetch to the nearest unified cache, and
corresponds to a prefetch function code of 17.

@samp{#n_reads_strong} requests a strong prefetch for several reads,
and corresponds to a prefetch function code of 20.

@samp{#one_read_strong} requests a strong prefetch for one read,
and corresponds to a prefetch function code of 21.

@samp{#n_writes_strong} requests a strong prefetch for several writes,
and corresponds to a prefetch function code of 22.

@samp{#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:

@example
prefetch  [%l0 + %l2], #one_read
prefetch  [%g2 + 8], #n_writes
prefetcha [%g1] 0x8, #unified
prefetcha [%o0 + 0x10] %asi, #n_reads
@end example

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,
@code{@value{AS}} provides many mnemonics corresponding to
V9 defined as well as UltraSPARC and Niagara extended values.
For example, @samp{#ASI_P} and @samp{#ASI_BLK_INIT_QUAD_LDD_AIUS}.
See the V9 and processor specific manuals for details.

@end itemize

@node Sparc-Relocs
@subsection Relocations
@cindex Sparc relocations
@cindex relocations, Sparc

ELF relocations are available as defined in the 32-bit and 64-bit
Sparc ELF specifications.

@code{R_SPARC_HI22} is obtained using @samp{%hi} and @code{R_SPARC_LO10}
is obtained using @samp{%lo}.  Likewise @code{R_SPARC_HIX22} is
obtained from @samp{%hix} and @code{R_SPARC_LOX10} is obtained
using @samp{%lox}.  For example:

@example
sethi %hi(symbol), %g1
or    %g1, %lo(symbol), %g1

sethi %hix(symbol), %g1
xor   %g1, %lox(symbol), %g1
@end example

These ``high'' mnemonics extract bits 31:10 of their operand,
and the ``low'' mnemonics extract bits 9:0 of their operand.

V9 code model relocations can be requested as follows:

@itemize @bullet
@item
@code{R_SPARC_HH22} is requested using @samp{%hh}.  It can
also be generated using @samp{%uhi}.
@item
@code{R_SPARC_HM10} is requested using @samp{%hm}.  It can
also be generated using @samp{%ulo}.
@item
@code{R_SPARC_LM22} is requested using @samp{%lm}.

@item
@code{R_SPARC_H44} is requested using @samp{%h44}.
@item
@code{R_SPARC_M44} is requested using @samp{%m44}.
@item
@code{R_SPARC_L44} is requested using @samp{%l44} or @samp{%l34}.
@item
@code{R_SPARC_H34} is requested using @samp{%h34}.
@end itemize

The @samp{%l34} generates a @code{R_SPARC_L44} relocation because it
calculates the necessary value, and therefore no explicit
@code{R_SPARC_L34} relocation needed to be created for this purpose.

The @samp{%h34} and @samp{%l34} relocations are used for the abs34 code
model.  Here is an example abs34 address generation sequence:

@example
sethi %h34(symbol), %g1
sllx  %g1, 2, %g1
or    %g1, %l34(symbol), %g1
@end example

The PC relative relocation @code{R_SPARC_PC22} can be obtained by
enclosing an operand inside of @samp{%pc22}.  Likewise, the
@code{R_SPARC_PC10} relocation can be obtained using @samp{%pc10}.
These are mostly used when assembling PIC code.  For example, the
standard PIC sequence on Sparc to get the base of the global offset
table, PC relative, into a register, can be performed as:

@example
sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7
add   %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7
@end example

Several relocations exist to allow the link editor to potentially
optimize GOT data references.  The @code{R_SPARC_GOTDATA_OP_HIX22}
relocation can obtained by enclosing an operand inside of
@samp{%gdop_hix22}.  The @code{R_SPARC_GOTDATA_OP_LOX10}
relocation can obtained by enclosing an operand inside of
@samp{%gdop_lox10}.  Likewise, @code{R_SPARC_GOTDATA_OP} can be
obtained by enclosing an operand inside of @samp{%gdop}.
For example, assuming the GOT base is in register @code{%l7}:

@example
sethi %gdop_hix22(symbol), %l1
xor   %l1, %gdop_lox10(symbol), %l1
ld    [%l7 + %l1], %l2, %gdop(symbol)
@end example

There are many relocations that can be requested for access to
thread local storage variables.  All of the Sparc TLS mnemonics
are supported:

@itemize @bullet
@item
@code{R_SPARC_TLS_GD_HI22} is requested using @samp{%tgd_hi22}.
@item
@code{R_SPARC_TLS_GD_LO10} is requested using @samp{%tgd_lo10}.
@item
@code{R_SPARC_TLS_GD_ADD} is requested using @samp{%tgd_add}.
@item
@code{R_SPARC_TLS_GD_CALL} is requested using @samp{%tgd_call}.

@item
@code{R_SPARC_TLS_LDM_HI22} is requested using @samp{%tldm_hi22}.
@item
@code{R_SPARC_TLS_LDM_LO10} is requested using @samp{%tldm_lo10}.
@item
@code{R_SPARC_TLS_LDM_ADD} is requested using @samp{%tldm_add}.
@item
@code{R_SPARC_TLS_LDM_CALL} is requested using @samp{%tldm_call}.

@item
@code{R_SPARC_TLS_LDO_HIX22} is requested using @samp{%tldo_hix22}.
@item
@code{R_SPARC_TLS_LDO_LOX10} is requested using @samp{%tldo_lox10}.
@item
@code{R_SPARC_TLS_LDO_ADD} is requested using @samp{%tldo_add}.

@item
@code{R_SPARC_TLS_IE_HI22} is requested using @samp{%tie_hi22}.
@item
@code{R_SPARC_TLS_IE_LO10} is requested using @samp{%tie_lo10}.
@item
@code{R_SPARC_TLS_IE_LD} is requested using @samp{%tie_ld}.
@item
@code{R_SPARC_TLS_IE_LDX} is requested using @samp{%tie_ldx}.
@item
@code{R_SPARC_TLS_IE_ADD} is requested using @samp{%tie_add}.

@item
@code{R_SPARC_TLS_LE_HIX22} is requested using @samp{%tle_hix22}.
@item
@code{R_SPARC_TLS_LE_LOX10} is requested using @samp{%tle_lox10}.
@end itemize

Here are some example TLS model sequences.

First, General Dynamic:

@example
sethi  %tgd_hi22(symbol), %l1
add    %l1, %tgd_lo10(symbol), %l1
add    %l7, %l1, %o0, %tgd_add(symbol)
call   __tls_get_addr, %tgd_call(symbol)
nop
@end example

Local Dynamic:

@example
sethi  %tldm_hi22(symbol), %l1
add    %l1, %tldm_lo10(symbol), %l1
add    %l7, %l1, %o0, %tldm_add(symbol)
call   __tls_get_addr, %tldm_call(symbol)
nop

sethi  %tldo_hix22(symbol), %l1
xor    %l1, %tldo_lox10(symbol), %l1
add    %o0, %l1, %l1, %tldo_add(symbol)
@end example

Initial Exec:

@example
sethi  %tie_hi22(symbol), %l1
add    %l1, %tie_lo10(symbol), %l1
ld     [%l7 + %l1], %o0, %tie_ld(symbol)
add    %g7, %o0, %o0, %tie_add(symbol)

sethi  %tie_hi22(symbol), %l1
add    %l1, %tie_lo10(symbol), %l1
ldx    [%l7 + %l1], %o0, %tie_ldx(symbol)
add    %g7, %o0, %o0, %tie_add(symbol)
@end example

And finally, Local Exec:

@example
sethi  %tle_hix22(symbol), %l1
add    %l1, %tle_lox10(symbol), %l1
add    %g7, %l1, %l1
@end example

When assembling for 64-bit, and a secondary constant addend is
specified in an address expression that would normally generate
an @code{R_SPARC_LO10} relocation, the assembler will emit an
@code{R_SPARC_OLO10} instead.

@node Sparc-Size-Translations
@subsection Size Translations
@cindex Sparc size translations
@cindex size, translations, Sparc

Often it is desirable to write code in an operand size agnostic
manner.  @code{@value{AS}} provides support for this via
operand size opcode translations.  Translations are supported
for loads, stores, shifts, compare-and-swap atomics, and the
@samp{clr} synthetic instruction.

If generating 32-bit code, @code{@value{AS}} will generate the
32-bit opcode.  Whereas if 64-bit code is being generated,
the 64-bit opcode will be emitted.  For example @code{ldn}
will be transformed into @code{ld} for 32-bit code and
@code{ldx} for 64-bit code.

Here is an example meant to demonstrate all the supported
opcode translations:

@example
ldn   [%o0], %o1
ldna  [%o0] %asi, %o2
stn   %o1, [%o0]
stna  %o2, [%o0] %asi
slln  %o3, 3, %o3
srln  %o4, 8, %o4
sran  %o5, 12, %o5
casn  [%o0], %o1, %o2
casna [%o0] %asi, %o1, %o2
clrn  %g1
@end example

In 32-bit mode @code{@value{AS}} will emit:

@example
ld   [%o0], %o1
lda  [%o0] %asi, %o2
st   %o1, [%o0]
sta  %o2, [%o0] %asi
sll  %o3, 3, %o3
srl  %o4, 8, %o4
sra  %o5, 12, %o5
cas  [%o0], %o1, %o2
casa [%o0] %asi, %o1, %o2
clr  %g1
@end example

And in 64-bit mode @code{@value{AS}} will emit:

@example
ldx   [%o0], %o1
ldxa  [%o0] %asi, %o2
stx   %o1, [%o0]
stxa  %o2, [%o0] %asi
sllx  %o3, 3, %o3
srlx  %o4, 8, %o4
srax  %o5, 12, %o5
casx  [%o0], %o1, %o2
casxa [%o0] %asi, %o1, %o2
clrx  %g1
@end example

Finally, the @samp{.nword} translating directive is supported
as well.  It is documented in the section on Sparc machine
directives.

@node Sparc-Float
@section Floating Point

@cindex floating point, SPARC (@sc{ieee})
@cindex SPARC floating point (@sc{ieee})
The Sparc uses @sc{ieee} floating-point numbers.

@node Sparc-Directives
@section Sparc Machine Directives

@cindex SPARC machine directives
@cindex machine directives, SPARC
The Sparc version of @code{@value{AS}} supports the following additional
machine directives:

@table @code
@cindex @code{align} directive, SPARC
@item .align
This must be followed by the desired alignment in bytes.

@cindex @code{common} directive, SPARC
@item .common
This must be followed by a symbol name, a positive number, and
@code{"bss"}.  This behaves somewhat like @code{.comm}, but the
syntax is different.

@cindex @code{half} directive, SPARC
@item .half
This is functionally identical to @code{.short}.

@cindex @code{nword} directive, SPARC
@item .nword
On the Sparc, the @code{.nword} directive produces native word sized value,
ie. if assembling with -32 it is equivalent to @code{.word}, if assembling
with -64 it is equivalent to @code{.xword}.

@cindex @code{proc} directive, SPARC
@item .proc
This directive is ignored.  Any text following it on the same
line is also ignored.

@cindex @code{register} directive, SPARC
@item .register
This directive declares use of a global application or system register.
It must be followed by a register name %g2, %g3, %g6 or %g7, comma and
the symbol name for that register.  If symbol name is @code{#scratch},
it is a scratch register, if it is @code{#ignore}, it just suppresses any
errors about using undeclared global register, but does not emit any
information about it into the object file.  This can be useful e.g. if you
save the register before use and restore it after.

@cindex @code{reserve} directive, SPARC
@item .reserve
This must be followed by a symbol name, a positive number, and
@code{"bss"}.  This behaves somewhat like @code{.lcomm}, but the
syntax is different.

@cindex @code{seg} directive, SPARC
@item .seg
This must be followed by @code{"text"}, @code{"data"}, or
@code{"data1"}.  It behaves like @code{.text}, @code{.data}, or
@code{.data 1}.

@cindex @code{skip} directive, SPARC
@item .skip
This is functionally identical to the @code{.space} directive.

@cindex @code{word} directive, SPARC
@item .word
On the Sparc, the @code{.word} directive produces 32 bit values,
instead of the 16 bit values it produces on many other machines.

@cindex @code{xword} directive, SPARC
@item .xword
On the Sparc V9 processor, the @code{.xword} directive produces
64 bit values.
@end table
