@c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2002 @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-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 levels, using the same core instruction set, but including a few additional instructions at each level. 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 passed 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 @item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite @itemx -Av8plus | -Av8plusa | -Av9 | -Av9a 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} and @samp{-Av8plusa} select a 32 bit environment. @samp{-Av9} and @samp{-Av9a} 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 extensions. @item -xarch=v8plus | -xarch=v8plusa For compatibility with the Solaris v9 assembler. These options are equivalent to -Av8plus and -Av8plusa, 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 and Solaris 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 and Solaris 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. @ignore @c FIXME: (sparc) Fill in "syntax" section! @c subsection syntax I don't know anything about Sparc syntax. Someone who does will have to write this section. @end ignore @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