Home | History | Annotate | Download | only in doc
      1 @c Copyright (C) 1991-2014 Free Software Foundation, Inc.
      2 @c This is part of the GAS manual.
      3 @c For copying conditions, see the file as.texinfo.
      4 @ifset GENERIC
      5 @page
      6 @node Sparc-Dependent
      7 @chapter SPARC Dependent Features
      8 @end ifset
      9 @ifclear GENERIC
     10 @node Machine Dependencies
     11 @chapter SPARC Dependent Features
     12 @end ifclear
     13 
     14 @cindex SPARC support
     15 @menu
     16 * Sparc-Opts::                  Options
     17 * Sparc-Aligned-Data::		Option to enforce aligned data
     18 * Sparc-Syntax::		Syntax
     19 * Sparc-Float::                 Floating Point
     20 * Sparc-Directives::            Sparc Machine Directives
     21 @end menu
     22 
     23 @node Sparc-Opts
     24 @section Options
     25 
     26 @cindex options for SPARC
     27 @cindex SPARC options
     28 @cindex architectures, SPARC
     29 @cindex SPARC architectures
     30 The SPARC chip family includes several successive versions, using the same
     31 core instruction set, but including a few additional instructions at
     32 each version.  There are exceptions to this however.  For details on what
     33 instructions each variant supports, please see the chip's architecture
     34 reference manual.
     35 
     36 By default, @code{@value{AS}} assumes the core instruction set (SPARC
     37 v6), but ``bumps'' the architecture level as needed: it switches to
     38 successively higher architectures as it encounters instructions that
     39 only exist in the higher levels.
     40 
     41 If not configured for SPARC v9 (@code{sparc64-*-*}) GAS will not bump
     42 past sparclite by default, an option must be passed to enable the
     43 v9 instructions.
     44 
     45 GAS treats sparclite as being compatible with v8, unless an architecture
     46 is explicitly requested.  SPARC v9 is always incompatible with sparclite.
     47 
     48 @c The order here is the same as the order of enum sparc_opcode_arch_val
     49 @c to give the user a sense of the order of the "bumping".
     50 
     51 @table @code
     52 @kindex -Av6
     53 @kindex -Av7
     54 @kindex -Av8
     55 @kindex -Aleon
     56 @kindex -Asparclet
     57 @kindex -Asparclite
     58 @kindex -Av9
     59 @kindex -Av9a
     60 @kindex -Av9b
     61 @kindex -Av9c
     62 @kindex -Av9d
     63 @kindex -Av9e
     64 @kindex -Av9v
     65 @kindex -Av9m
     66 @kindex -Asparc
     67 @kindex -Asparcvis
     68 @kindex -Asparcvis2
     69 @kindex -Asparcfmaf
     70 @kindex -Asparcima
     71 @kindex -Asparcvis3
     72 @kindex -Asparcvis3r
     73 @item -Av6 | -Av7 | -Av8 | -Aleon | -Asparclet | -Asparclite
     74 @itemx -Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd | -Av8plusv
     75 @itemx -Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9e | -Av9v | -Av9m
     76 @itemx -Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima
     77 @itemx -Asparcvis3 | -Asparcvis3r
     78 Use one of the @samp{-A} options to select one of the SPARC
     79 architectures explicitly.  If you select an architecture explicitly,
     80 @code{@value{AS}} reports a fatal error if it encounters an instruction
     81 or feature requiring an incompatible or higher level.
     82 
     83 @samp{-Av8plus}, @samp{-Av8plusa}, @samp{-Av8plusb}, @samp{-Av8plusc},
     84 @samp{-Av8plusd}, and @samp{-Av8plusv} select a 32 bit environment.
     85 
     86 @samp{-Av9}, @samp{-Av9a}, @samp{-Av9b}, @samp{-Av9c}, @samp{-Av9d},
     87 @samp{-Av9e}, @samp{-Av9v} and @samp{-Av9m} select a 64 bit
     88 environment and are not available unless GAS is explicitly configured
     89 with 64 bit environment support.
     90 
     91 @samp{-Av8plusa} and @samp{-Av9a} enable the SPARC V9 instruction set with
     92 UltraSPARC VIS 1.0 extensions.
     93 
     94 @samp{-Av8plusb} and @samp{-Av9b} enable the UltraSPARC VIS 2.0 instructions,
     95 as well as the instructions enabled by @samp{-Av8plusa} and @samp{-Av9a}.
     96 
     97 @samp{-Av8plusc} and @samp{-Av9c} enable the UltraSPARC Niagara instructions,
     98 as well as the instructions enabled by @samp{-Av8plusb} and @samp{-Av9b}.
     99 
    100 @samp{-Av8plusd} and @samp{-Av9d} enable the floating point fused
    101 multiply-add, VIS 3.0, and HPC extension instructions, as well as the
    102 instructions enabled by @samp{-Av8plusc} and @samp{-Av9c}.
    103 
    104 @samp{-Av8pluse} and @samp{-Av9e} enable the cryptographic
    105 instructions, as well as the instructions enabled by @samp{-Av8plusd}
    106 and @samp{-Av9d}.
    107 
    108 @samp{-Av8plusv} and @samp{-Av9v} enable floating point unfused
    109 multiply-add, and integer multiply-add, as well as the instructions
    110 enabled by @samp{-Av8pluse} and @samp{-Av9e}.
    111 
    112 @samp{-Av8plusm} and @samp{-Av9m} enable the VIS 4.0, subtract extended,
    113 xmpmul, xmontmul and xmontsqr instructions, as well as the instructions
    114 enabled by @samp{-Av8plusv} and @samp{-Av9v}.
    115 
    116 @samp{-Asparc} specifies a v9 environment.  It is equivalent to
    117 @samp{-Av9} if the word size is 64-bit, and @samp{-Av8plus} otherwise.
    118 
    119 @samp{-Asparcvis} specifies a v9a environment.  It is equivalent to
    120 @samp{-Av9a} if the word size is 64-bit, and @samp{-Av8plusa} otherwise.
    121 
    122 @samp{-Asparcvis2} specifies a v9b environment.  It is equivalent to
    123 @samp{-Av9b} if the word size is 64-bit, and @samp{-Av8plusb} otherwise.
    124 
    125 @samp{-Asparcfmaf} specifies a v9b environment with the floating point
    126 fused multiply-add instructions enabled.
    127 
    128 @samp{-Asparcima} specifies a v9b environment with the integer
    129 multiply-add instructions enabled.
    130 
    131 @samp{-Asparcvis3} specifies a v9b environment with the VIS 3.0,
    132 HPC , and floating point fused multiply-add instructions enabled.
    133 
    134 @samp{-Asparcvis3r} specifies a v9b environment with the VIS 3.0, HPC,
    135 and floating point unfused multiply-add instructions enabled.
    136 
    137 @samp{-Asparc5} is equivalent to @samp{-Av9m}.
    138 
    139 @item -xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc
    140 @itemx -xarch=v8plusd | -xarch=v8plusv | -xarch=v9 | -xarch=v9a
    141 @itemx -xarch=v9b | -xarch=v9c | -xarch=v9d | -xarch=v9e | -xarch=v9v | -xarch=v9m
    142 @itemx -xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2
    143 @itemx -xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3
    144 @itemx -xarch=sparcvis3r | -xarch=sparc5
    145 For compatibility with the SunOS v9 assembler.  These options are
    146 equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd,
    147 -Av8plusv, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, -Av9e, -Av9v, -Av9m,
    148 -Asparc, -Asparcvis, -Asparcvis2, -Asparcfmaf, -Asparcima,
    149 -Asparcvis3, and -Asparcvis3r, respectively.
    150 
    151 @item -bump
    152 Warn whenever it is necessary to switch to another level.
    153 If an architecture level is explicitly requested, GAS will not issue
    154 warnings until that level is reached, and will then bump the level
    155 as required (except between incompatible levels).
    156 
    157 @item -32 | -64
    158 Select the word size, either 32 bits or 64 bits.
    159 These options are only available with the ELF object file format,
    160 and require that the necessary BFD support has been included.
    161 @end table
    162 
    163 @node Sparc-Aligned-Data
    164 @section Enforcing aligned data
    165 
    166 @cindex data alignment on SPARC
    167 @cindex SPARC data alignment
    168 SPARC GAS normally permits data to be misaligned.  For example, it
    169 permits the @code{.long} pseudo-op to be used on a byte boundary.
    170 However, the native SunOS assemblers issue an error when they see
    171 misaligned data.
    172 
    173 @kindex --enforce-aligned-data
    174 You can use the @code{--enforce-aligned-data} option to make SPARC GAS
    175 also issue an error about misaligned data, just as the SunOS
    176 assemblers do.
    177 
    178 The @code{--enforce-aligned-data} option is not the default because gcc
    179 issues misaligned data pseudo-ops when it initializes certain packed
    180 data structures (structures defined using the @code{packed} attribute).
    181 You may have to assemble with GAS in order to initialize packed data
    182 structures in your own code.
    183 
    184 @cindex SPARC syntax
    185 @cindex syntax, SPARC
    186 @node Sparc-Syntax
    187 @section Sparc Syntax
    188 The assembler syntax closely follows The Sparc Architecture Manual,
    189 versions 8 and 9, as well as most extensions defined by Sun
    190 for their UltraSPARC and Niagara line of processors.
    191 
    192 @menu
    193 * Sparc-Chars::                Special Characters
    194 * Sparc-Regs::                 Register Names
    195 * Sparc-Constants::            Constant Names
    196 * Sparc-Relocs::               Relocations
    197 * Sparc-Size-Translations::    Size Translations
    198 @end menu
    199 
    200 @node Sparc-Chars
    201 @subsection Special Characters
    202 
    203 @cindex line comment character, Sparc
    204 @cindex Sparc line comment character
    205 A @samp{!} character appearing anywhere on a line indicates the start
    206 of a comment that extends to the end of that line.
    207 
    208 If a @samp{#} appears as the first character of a line then the whole
    209 line is treated as a comment, but in this case the line could also be
    210 a logical line number directive (@pxref{Comments}) or a preprocessor
    211 control command (@pxref{Preprocessing}).
    212 
    213 @cindex line separator, Sparc
    214 @cindex statement separator, Sparc
    215 @cindex Sparc line separator
    216 @samp{;} can be used instead of a newline to separate statements.
    217 
    218 @node Sparc-Regs
    219 @subsection Register Names
    220 @cindex Sparc registers
    221 @cindex register names, Sparc
    222 
    223 The Sparc integer register file is broken down into global,
    224 outgoing, local, and incoming.
    225 
    226 @itemize @bullet
    227 @item
    228 The 8 global registers are referred to as @samp{%g@var{n}}.
    229 
    230 @item
    231 The 8 outgoing registers are referred to as @samp{%o@var{n}}.
    232 
    233 @item
    234 The 8 local registers are referred to as @samp{%l@var{n}}.
    235 
    236 @item
    237 The 8 incoming registers are referred to as @samp{%i@var{n}}.
    238 
    239 @item
    240 The frame pointer register @samp{%i6} can be referenced using
    241 the alias @samp{%fp}.
    242 
    243 @item
    244 The stack pointer register @samp{%o6} can be referenced using
    245 the alias @samp{%sp}.
    246 @end itemize
    247 
    248 Floating point registers are simply referred to as @samp{%f@var{n}}.
    249 When assembling for pre-V9, only 32 floating point registers
    250 are available.  For V9 and later there are 64, but there are
    251 restrictions when referencing the upper 32 registers.  They
    252 can only be accessed as double or quad, and thus only even
    253 or quad numbered accesses are allowed.  For example, @samp{%f34}
    254 is a legal floating point register, but @samp{%f35} is not.
    255 
    256 Certain V9 instructions allow access to ancillary state registers.
    257 Most simply they can be referred to as @samp{%asr@var{n}} where
    258 @var{n} can be from 16 to 31.  However, there are some aliases
    259 defined to reference ASR registers defined for various UltraSPARC
    260 processors:
    261 
    262 @itemize @bullet
    263 @item
    264 The tick compare register is referred to as @samp{%tick_cmpr}.
    265 
    266 @item
    267 The system tick register is referred to as @samp{%stick}.  An alias,
    268 @samp{%sys_tick}, exists but is deprecated and should not be used
    269 by new software.
    270 
    271 @item
    272 The system tick compare register is referred to as @samp{%stick_cmpr}.
    273 An alias, @samp{%sys_tick_cmpr}, exists but is deprecated and should
    274 not be used by new software.
    275 
    276 @item
    277 The software interrupt register is referred to as @samp{%softint}.
    278 
    279 @item
    280 The set software interrupt register is referred to as @samp{%set_softint}.
    281 The mnemonic @samp{%softint_set} is provided as an alias.
    282 
    283 @item
    284 The clear software interrupt register is referred to as
    285 @samp{%clear_softint}.  The mnemonic @samp{%softint_clear} is provided
    286 as an alias.
    287 
    288 @item
    289 The performance instrumentation counters register is referred to as
    290 @samp{%pic}.
    291 
    292 @item
    293 The performance control register is referred to as @samp{%pcr}.
    294 
    295 @item
    296 The graphics status register is referred to as @samp{%gsr}.
    297 
    298 @item
    299 The V9 dispatch control register is referred to as @samp{%dcr}.
    300 @end itemize
    301 
    302 Various V9 branch and conditional move instructions allow
    303 specification of which set of integer condition codes to
    304 test.  These are referred to as @samp{%xcc} and @samp{%icc}.
    305 
    306 In V9, there are 4 sets of floating point condition codes
    307 which are referred to as @samp{%fcc@var{n}}.
    308 
    309 Several special privileged and non-privileged registers
    310 exist:
    311 
    312 @itemize @bullet
    313 @item
    314 The V9 address space identifier register is referred to as @samp{%asi}.
    315 
    316 @item
    317 The V9 restorable windows register is referred to as @samp{%canrestore}.
    318 
    319 @item
    320 The V9 savable windows register is referred to as @samp{%cansave}.
    321 
    322 @item
    323 The V9 clean windows register is referred to as @samp{%cleanwin}.
    324 
    325 @item
    326 The V9 current window pointer register is referred to as @samp{%cwp}.
    327 
    328 @item
    329 The floating-point queue register is referred to as @samp{%fq}.
    330 
    331 @item
    332 The V8 co-processor queue register is referred to as @samp{%cq}.
    333 
    334 @item
    335 The floating point status register is referred to as @samp{%fsr}.
    336 
    337 @item
    338 The other windows register is referred to as @samp{%otherwin}.
    339 
    340 @item
    341 The V9 program counter register is referred to as @samp{%pc}.
    342 
    343 @item
    344 The V9 next program counter register is referred to as @samp{%npc}.
    345 
    346 @item
    347 The V9 processor interrupt level register is referred to as @samp{%pil}.
    348 
    349 @item
    350 The V9 processor state register is referred to as @samp{%pstate}.
    351 
    352 @item
    353 The trap base address register is referred to as @samp{%tba}.
    354 
    355 @item
    356 The V9 tick register is referred to as @samp{%tick}.
    357 
    358 @item
    359 The V9 trap level is referred to as @samp{%tl}.
    360 
    361 @item
    362 The V9 trap program counter is referred to as @samp{%tpc}.
    363 
    364 @item
    365 The V9 trap next program counter is referred to as @samp{%tnpc}.
    366 
    367 @item
    368 The V9 trap state is referred to as @samp{%tstate}.
    369 
    370 @item
    371 The V9 trap type is referred to as @samp{%tt}.
    372 
    373 @item
    374 The V9 condition codes is referred to as @samp{%ccr}.
    375 
    376 @item
    377 The V9 floating-point registers state is referred to as @samp{%fprs}.
    378 
    379 @item
    380 The V9 version register is referred to as @samp{%ver}.
    381 
    382 @item
    383 The V9 window state register is referred to as @samp{%wstate}.
    384 
    385 @item
    386 The Y register is referred to as @samp{%y}.
    387 
    388 @item
    389 The V8 window invalid mask register is referred to as @samp{%wim}.
    390 
    391 @item
    392 The V8 processor state register is referred to as @samp{%psr}.
    393 
    394 @item
    395 The V9 global register level register is referred to as @samp{%gl}.
    396 @end itemize
    397 
    398 Several special register names exist for hypervisor mode code:
    399 
    400 @itemize @bullet
    401 @item
    402 The hyperprivileged processor state register is referred to as
    403 @samp{%hpstate}.
    404 
    405 @item
    406 The hyperprivileged trap state register is referred to as @samp{%htstate}.
    407 
    408 @item
    409 The hyperprivileged interrupt pending register is referred to as
    410 @samp{%hintp}.
    411 
    412 @item
    413 The hyperprivileged trap base address register is referred to as
    414 @samp{%htba}.
    415 
    416 @item
    417 The hyperprivileged implementation version register is referred
    418 to as @samp{%hver}.
    419 
    420 @item
    421 The hyperprivileged system tick offset register is referred to as
    422 @samp{%hstick_offset}.  Note that there is no @samp{%hstick} register,
    423 the normal @samp{%stick} is used.
    424 
    425 @item
    426 The hyperprivileged system tick enable register is referred to as
    427 @samp{%hstick_enable}.
    428 
    429 @item
    430 The hyperprivileged system tick compare register is referred
    431 to as @samp{%hstick_cmpr}.
    432 @end itemize
    433 
    434 @node Sparc-Constants
    435 @subsection Constants
    436 @cindex Sparc constants
    437 @cindex constants, Sparc
    438 
    439 Several Sparc instructions take an immediate operand field for
    440 which mnemonic names exist.  Two such examples are @samp{membar}
    441 and @samp{prefetch}.  Another example are the set of V9
    442 memory access instruction that allow specification of an
    443 address space identifier.
    444 
    445 The @samp{membar} instruction specifies a memory barrier that is
    446 the defined by the operand which is a bitmask.  The supported
    447 mask mnemonics are:
    448 
    449 @itemize @bullet
    450 @item
    451 @samp{#Sync} requests that all operations (including nonmemory
    452 reference operations) appearing prior to the @code{membar} must have
    453 been performed and the effects of any exceptions become visible before
    454 any instructions after the @code{membar} may be initiated.  This
    455 corresponds to @code{membar} cmask field bit 2.
    456 
    457 @item
    458 @samp{#MemIssue} requests that all memory reference operations
    459 appearing prior to the @code{membar} must have been performed before
    460 any memory operation after the @code{membar} may be initiated.  This
    461 corresponds to @code{membar} cmask field bit 1.
    462 
    463 @item
    464 @samp{#Lookaside} requests that a store appearing prior to the
    465 @code{membar} must complete before any load following the
    466 @code{membar} referencing the same address can be initiated.  This
    467 corresponds to @code{membar} cmask field bit 0.
    468 
    469 @item
    470 @samp{#StoreStore} defines that the effects of all stores appearing
    471 prior to the @code{membar} instruction must be visible to all
    472 processors before the effect of any stores following the
    473 @code{membar}.  Equivalent to the deprecated @code{stbar} instruction.
    474 This corresponds to @code{membar} mmask field bit 3.
    475 
    476 @item
    477 @samp{#LoadStore} defines all loads appearing prior to the
    478 @code{membar} instruction must have been performed before the effect
    479 of any stores following the @code{membar} is visible to any other
    480 processor.  This corresponds to @code{membar} mmask field bit 2.
    481 
    482 @item
    483 @samp{#StoreLoad} defines that the effects of all stores appearing
    484 prior to the @code{membar} instruction must be visible to all
    485 processors before loads following the @code{membar} may be performed.
    486 This corresponds to @code{membar} mmask field bit 1.
    487 
    488 @item
    489 @samp{#LoadLoad} defines that all loads appearing prior to the
    490 @code{membar} instruction must have been performed before any loads
    491 following the @code{membar} may be performed.  This corresponds to
    492 @code{membar} mmask field bit 0.
    493 
    494 @end itemize
    495 
    496 These values can be ored together, for example:
    497 
    498 @example
    499 membar #Sync
    500 membar #StoreLoad | #LoadLoad
    501 membar #StoreLoad | #StoreStore
    502 @end example
    503 
    504 The @code{prefetch} and @code{prefetcha} instructions take a prefetch
    505 function code.  The following prefetch function code constant
    506 mnemonics are available:
    507 
    508 @itemize @bullet
    509 @item
    510 @samp{#n_reads} requests a prefetch for several reads, and corresponds
    511 to a prefetch function code of 0.
    512 
    513 @samp{#one_read} requests a prefetch for one read, and corresponds
    514 to a prefetch function code of 1.
    515 
    516 @samp{#n_writes} requests a prefetch for several writes (and possibly
    517 reads), and corresponds to a prefetch function code of 2.
    518 
    519 @samp{#one_write} requests a prefetch for one write, and corresponds
    520 to a prefetch function code of 3.
    521 
    522 @samp{#page} requests a prefetch page, and corresponds to a prefetch
    523 function code of 4.
    524 
    525 @samp{#invalidate} requests a prefetch invalidate, and corresponds to
    526 a prefetch function code of 16.
    527 
    528 @samp{#unified} requests a prefetch to the nearest unified cache, and
    529 corresponds to a prefetch function code of 17.
    530 
    531 @samp{#n_reads_strong} requests a strong prefetch for several reads,
    532 and corresponds to a prefetch function code of 20.
    533 
    534 @samp{#one_read_strong} requests a strong prefetch for one read,
    535 and corresponds to a prefetch function code of 21.
    536 
    537 @samp{#n_writes_strong} requests a strong prefetch for several writes,
    538 and corresponds to a prefetch function code of 22.
    539 
    540 @samp{#one_write_strong} requests a strong prefetch for one write,
    541 and corresponds to a prefetch function code of 23.
    542 
    543 Onle one prefetch code may be specified.  Here are some examples:
    544 
    545 @example
    546 prefetch  [%l0 + %l2], #one_read
    547 prefetch  [%g2 + 8], #n_writes
    548 prefetcha [%g1] 0x8, #unified
    549 prefetcha [%o0 + 0x10] %asi, #n_reads
    550 @end example
    551 
    552 The actual behavior of a given prefetch function code is processor
    553 specific.  If a processor does not implement a given prefetch
    554 function code, it will treat the prefetch instruction as a nop.
    555 
    556 For instructions that accept an immediate address space identifier,
    557 @code{@value{AS}} provides many mnemonics corresponding to
    558 V9 defined as well as UltraSPARC and Niagara extended values.
    559 For example, @samp{#ASI_P} and @samp{#ASI_BLK_INIT_QUAD_LDD_AIUS}.
    560 See the V9 and processor specific manuals for details.
    561 
    562 @end itemize
    563 
    564 @node Sparc-Relocs
    565 @subsection Relocations
    566 @cindex Sparc relocations
    567 @cindex relocations, Sparc
    568 
    569 ELF relocations are available as defined in the 32-bit and 64-bit
    570 Sparc ELF specifications.
    571 
    572 @code{R_SPARC_HI22} is obtained using @samp{%hi} and @code{R_SPARC_LO10}
    573 is obtained using @samp{%lo}.  Likewise @code{R_SPARC_HIX22} is
    574 obtained from @samp{%hix} and @code{R_SPARC_LOX10} is obtained
    575 using @samp{%lox}.  For example:
    576 
    577 @example
    578 sethi %hi(symbol), %g1
    579 or    %g1, %lo(symbol), %g1
    580 
    581 sethi %hix(symbol), %g1
    582 xor   %g1, %lox(symbol), %g1
    583 @end example
    584 
    585 These ``high'' mnemonics extract bits 31:10 of their operand,
    586 and the ``low'' mnemonics extract bits 9:0 of their operand.
    587 
    588 V9 code model relocations can be requested as follows:
    589 
    590 @itemize @bullet
    591 @item
    592 @code{R_SPARC_HH22} is requested using @samp{%hh}.  It can
    593 also be generated using @samp{%uhi}.
    594 @item
    595 @code{R_SPARC_HM10} is requested using @samp{%hm}.  It can
    596 also be generated using @samp{%ulo}.
    597 @item
    598 @code{R_SPARC_LM22} is requested using @samp{%lm}.
    599 
    600 @item
    601 @code{R_SPARC_H44} is requested using @samp{%h44}.
    602 @item
    603 @code{R_SPARC_M44} is requested using @samp{%m44}.
    604 @item
    605 @code{R_SPARC_L44} is requested using @samp{%l44} or @samp{%l34}.
    606 @item
    607 @code{R_SPARC_H34} is requested using @samp{%h34}.
    608 @end itemize
    609 
    610 The @samp{%l34} generates a @code{R_SPARC_L44} relocation because it
    611 calculates the necessary value, and therefore no explicit
    612 @code{R_SPARC_L34} relocation needed to be created for this purpose.
    613 
    614 The @samp{%h34} and @samp{%l34} relocations are used for the abs34 code
    615 model.  Here is an example abs34 address generation sequence:
    616 
    617 @example
    618 sethi %h34(symbol), %g1
    619 sllx  %g1, 2, %g1
    620 or    %g1, %l34(symbol), %g1
    621 @end example
    622 
    623 The PC relative relocation @code{R_SPARC_PC22} can be obtained by
    624 enclosing an operand inside of @samp{%pc22}.  Likewise, the
    625 @code{R_SPARC_PC10} relocation can be obtained using @samp{%pc10}.
    626 These are mostly used when assembling PIC code.  For example, the
    627 standard PIC sequence on Sparc to get the base of the global offset
    628 table, PC relative, into a register, can be performed as:
    629 
    630 @example
    631 sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7
    632 add   %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7
    633 @end example
    634 
    635 Several relocations exist to allow the link editor to potentially
    636 optimize GOT data references.  The @code{R_SPARC_GOTDATA_OP_HIX22}
    637 relocation can obtained by enclosing an operand inside of
    638 @samp{%gdop_hix22}.  The @code{R_SPARC_GOTDATA_OP_LOX10}
    639 relocation can obtained by enclosing an operand inside of
    640 @samp{%gdop_lox10}.  Likewise, @code{R_SPARC_GOTDATA_OP} can be
    641 obtained by enclosing an operand inside of @samp{%gdop}.
    642 For example, assuming the GOT base is in register @code{%l7}:
    643 
    644 @example
    645 sethi %gdop_hix22(symbol), %l1
    646 xor   %l1, %gdop_lox10(symbol), %l1
    647 ld    [%l7 + %l1], %l2, %gdop(symbol)
    648 @end example
    649 
    650 There are many relocations that can be requested for access to
    651 thread local storage variables.  All of the Sparc TLS mnemonics
    652 are supported:
    653 
    654 @itemize @bullet
    655 @item
    656 @code{R_SPARC_TLS_GD_HI22} is requested using @samp{%tgd_hi22}.
    657 @item
    658 @code{R_SPARC_TLS_GD_LO10} is requested using @samp{%tgd_lo10}.
    659 @item
    660 @code{R_SPARC_TLS_GD_ADD} is requested using @samp{%tgd_add}.
    661 @item
    662 @code{R_SPARC_TLS_GD_CALL} is requested using @samp{%tgd_call}.
    663 
    664 @item
    665 @code{R_SPARC_TLS_LDM_HI22} is requested using @samp{%tldm_hi22}.
    666 @item
    667 @code{R_SPARC_TLS_LDM_LO10} is requested using @samp{%tldm_lo10}.
    668 @item
    669 @code{R_SPARC_TLS_LDM_ADD} is requested using @samp{%tldm_add}.
    670 @item
    671 @code{R_SPARC_TLS_LDM_CALL} is requested using @samp{%tldm_call}.
    672 
    673 @item
    674 @code{R_SPARC_TLS_LDO_HIX22} is requested using @samp{%tldo_hix22}.
    675 @item
    676 @code{R_SPARC_TLS_LDO_LOX10} is requested using @samp{%tldo_lox10}.
    677 @item
    678 @code{R_SPARC_TLS_LDO_ADD} is requested using @samp{%tldo_add}.
    679 
    680 @item
    681 @code{R_SPARC_TLS_IE_HI22} is requested using @samp{%tie_hi22}.
    682 @item
    683 @code{R_SPARC_TLS_IE_LO10} is requested using @samp{%tie_lo10}.
    684 @item
    685 @code{R_SPARC_TLS_IE_LD} is requested using @samp{%tie_ld}.
    686 @item
    687 @code{R_SPARC_TLS_IE_LDX} is requested using @samp{%tie_ldx}.
    688 @item
    689 @code{R_SPARC_TLS_IE_ADD} is requested using @samp{%tie_add}.
    690 
    691 @item
    692 @code{R_SPARC_TLS_LE_HIX22} is requested using @samp{%tle_hix22}.
    693 @item
    694 @code{R_SPARC_TLS_LE_LOX10} is requested using @samp{%tle_lox10}.
    695 @end itemize
    696 
    697 Here are some example TLS model sequences.
    698 
    699 First, General Dynamic:
    700 
    701 @example
    702 sethi  %tgd_hi22(symbol), %l1
    703 add    %l1, %tgd_lo10(symbol), %l1
    704 add    %l7, %l1, %o0, %tgd_add(symbol)
    705 call   __tls_get_addr, %tgd_call(symbol)
    706 nop
    707 @end example
    708 
    709 Local Dynamic:
    710 
    711 @example
    712 sethi  %tldm_hi22(symbol), %l1
    713 add    %l1, %tldm_lo10(symbol), %l1
    714 add    %l7, %l1, %o0, %tldm_add(symbol)
    715 call   __tls_get_addr, %tldm_call(symbol)
    716 nop
    717 
    718 sethi  %tldo_hix22(symbol), %l1
    719 xor    %l1, %tldo_lox10(symbol), %l1
    720 add    %o0, %l1, %l1, %tldo_add(symbol)
    721 @end example
    722 
    723 Initial Exec:
    724 
    725 @example
    726 sethi  %tie_hi22(symbol), %l1
    727 add    %l1, %tie_lo10(symbol), %l1
    728 ld     [%l7 + %l1], %o0, %tie_ld(symbol)
    729 add    %g7, %o0, %o0, %tie_add(symbol)
    730 
    731 sethi  %tie_hi22(symbol), %l1
    732 add    %l1, %tie_lo10(symbol), %l1
    733 ldx    [%l7 + %l1], %o0, %tie_ldx(symbol)
    734 add    %g7, %o0, %o0, %tie_add(symbol)
    735 @end example
    736 
    737 And finally, Local Exec:
    738 
    739 @example
    740 sethi  %tle_hix22(symbol), %l1
    741 add    %l1, %tle_lox10(symbol), %l1
    742 add    %g7, %l1, %l1
    743 @end example
    744 
    745 When assembling for 64-bit, and a secondary constant addend is
    746 specified in an address expression that would normally generate
    747 an @code{R_SPARC_LO10} relocation, the assembler will emit an
    748 @code{R_SPARC_OLO10} instead.
    749 
    750 @node Sparc-Size-Translations
    751 @subsection Size Translations
    752 @cindex Sparc size translations
    753 @cindex size, translations, Sparc
    754 
    755 Often it is desirable to write code in an operand size agnostic
    756 manner.  @code{@value{AS}} provides support for this via
    757 operand size opcode translations.  Translations are supported
    758 for loads, stores, shifts, compare-and-swap atomics, and the
    759 @samp{clr} synthetic instruction.
    760 
    761 If generating 32-bit code, @code{@value{AS}} will generate the
    762 32-bit opcode.  Whereas if 64-bit code is being generated,
    763 the 64-bit opcode will be emitted.  For example @code{ldn}
    764 will be transformed into @code{ld} for 32-bit code and
    765 @code{ldx} for 64-bit code.
    766 
    767 Here is an example meant to demonstrate all the supported
    768 opcode translations:
    769 
    770 @example
    771 ldn   [%o0], %o1
    772 ldna  [%o0] %asi, %o2
    773 stn   %o1, [%o0]
    774 stna  %o2, [%o0] %asi
    775 slln  %o3, 3, %o3
    776 srln  %o4, 8, %o4
    777 sran  %o5, 12, %o5
    778 casn  [%o0], %o1, %o2
    779 casna [%o0] %asi, %o1, %o2
    780 clrn  %g1
    781 @end example
    782 
    783 In 32-bit mode @code{@value{AS}} will emit:
    784 
    785 @example
    786 ld   [%o0], %o1
    787 lda  [%o0] %asi, %o2
    788 st   %o1, [%o0]
    789 sta  %o2, [%o0] %asi
    790 sll  %o3, 3, %o3
    791 srl  %o4, 8, %o4
    792 sra  %o5, 12, %o5
    793 cas  [%o0], %o1, %o2
    794 casa [%o0] %asi, %o1, %o2
    795 clr  %g1
    796 @end example
    797 
    798 And in 64-bit mode @code{@value{AS}} will emit:
    799 
    800 @example
    801 ldx   [%o0], %o1
    802 ldxa  [%o0] %asi, %o2
    803 stx   %o1, [%o0]
    804 stxa  %o2, [%o0] %asi
    805 sllx  %o3, 3, %o3
    806 srlx  %o4, 8, %o4
    807 srax  %o5, 12, %o5
    808 casx  [%o0], %o1, %o2
    809 casxa [%o0] %asi, %o1, %o2
    810 clrx  %g1
    811 @end example
    812 
    813 Finally, the @samp{.nword} translating directive is supported
    814 as well.  It is documented in the section on Sparc machine
    815 directives.
    816 
    817 @node Sparc-Float
    818 @section Floating Point
    819 
    820 @cindex floating point, SPARC (@sc{ieee})
    821 @cindex SPARC floating point (@sc{ieee})
    822 The Sparc uses @sc{ieee} floating-point numbers.
    823 
    824 @node Sparc-Directives
    825 @section Sparc Machine Directives
    826 
    827 @cindex SPARC machine directives
    828 @cindex machine directives, SPARC
    829 The Sparc version of @code{@value{AS}} supports the following additional
    830 machine directives:
    831 
    832 @table @code
    833 @cindex @code{align} directive, SPARC
    834 @item .align
    835 This must be followed by the desired alignment in bytes.
    836 
    837 @cindex @code{common} directive, SPARC
    838 @item .common
    839 This must be followed by a symbol name, a positive number, and
    840 @code{"bss"}.  This behaves somewhat like @code{.comm}, but the
    841 syntax is different.
    842 
    843 @cindex @code{half} directive, SPARC
    844 @item .half
    845 This is functionally identical to @code{.short}.
    846 
    847 @cindex @code{nword} directive, SPARC
    848 @item .nword
    849 On the Sparc, the @code{.nword} directive produces native word sized value,
    850 ie. if assembling with -32 it is equivalent to @code{.word}, if assembling
    851 with -64 it is equivalent to @code{.xword}.
    852 
    853 @cindex @code{proc} directive, SPARC
    854 @item .proc
    855 This directive is ignored.  Any text following it on the same
    856 line is also ignored.
    857 
    858 @cindex @code{register} directive, SPARC
    859 @item .register
    860 This directive declares use of a global application or system register.
    861 It must be followed by a register name %g2, %g3, %g6 or %g7, comma and
    862 the symbol name for that register.  If symbol name is @code{#scratch},
    863 it is a scratch register, if it is @code{#ignore}, it just suppresses any
    864 errors about using undeclared global register, but does not emit any
    865 information about it into the object file.  This can be useful e.g. if you
    866 save the register before use and restore it after.
    867 
    868 @cindex @code{reserve} directive, SPARC
    869 @item .reserve
    870 This must be followed by a symbol name, a positive number, and
    871 @code{"bss"}.  This behaves somewhat like @code{.lcomm}, but the
    872 syntax is different.
    873 
    874 @cindex @code{seg} directive, SPARC
    875 @item .seg
    876 This must be followed by @code{"text"}, @code{"data"}, or
    877 @code{"data1"}.  It behaves like @code{.text}, @code{.data}, or
    878 @code{.data 1}.
    879 
    880 @cindex @code{skip} directive, SPARC
    881 @item .skip
    882 This is functionally identical to the @code{.space} directive.
    883 
    884 @cindex @code{word} directive, SPARC
    885 @item .word
    886 On the Sparc, the @code{.word} directive produces 32 bit values,
    887 instead of the 16 bit values it produces on many other machines.
    888 
    889 @cindex @code{xword} directive, SPARC
    890 @item .xword
    891 On the Sparc V9 processor, the @code{.xword} directive produces
    892 64 bit values.
    893 @end table
    894