1@c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2002
2@c Free Software Foundation, Inc.
3@c This is part of the GAS manual.
4@c For copying conditions, see the file as.texinfo.
5@ifset GENERIC
6@page
7@node Sparc-Dependent
8@chapter SPARC Dependent Features
9@end ifset
10@ifclear GENERIC
11@node Machine Dependencies
12@chapter SPARC Dependent Features
13@end ifclear
14
15@cindex SPARC support
16@menu
17* Sparc-Opts::                  Options
18* Sparc-Aligned-Data::		Option to enforce aligned data
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
30The SPARC chip family includes several successive levels, using the same
31core instruction set, but including a few additional instructions at
32each level.  There are exceptions to this however.  For details on what
33instructions each variant supports, please see the chip's architecture
34reference manual.
35
36By default, @code{@value{AS}} assumes the core instruction set (SPARC
37v6), but ``bumps'' the architecture level as needed: it switches to
38successively higher architectures as it encounters instructions that
39only exist in the higher levels.
40
41If not configured for SPARC v9 (@code{sparc64-*-*}) GAS will not bump
42passed sparclite by default, an option must be passed to enable the
43v9 instructions.
44
45GAS treats sparclite as being compatible with v8, unless an architecture
46is 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 -Asparclet
56@kindex -Asparclite
57@kindex -Av9
58@kindex -Av9a
59@item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite
60@itemx -Av8plus | -Av8plusa | -Av9 | -Av9a
61Use one of the @samp{-A} options to select one of the SPARC
62architectures explicitly.  If you select an architecture explicitly,
63@code{@value{AS}} reports a fatal error if it encounters an instruction
64or feature requiring an incompatible or higher level.
65
66@samp{-Av8plus} and @samp{-Av8plusa} select a 32 bit environment.
67
68@samp{-Av9} and @samp{-Av9a} select a 64 bit environment and are not
69available unless GAS is explicitly configured with 64 bit environment
70support.
71
72@samp{-Av8plusa} and @samp{-Av9a} enable the SPARC V9 instruction set with
73UltraSPARC extensions.
74
75@item -xarch=v8plus | -xarch=v8plusa
76For compatibility with the Solaris v9 assembler.  These options are
77equivalent to -Av8plus and -Av8plusa, respectively.
78
79@item -bump
80Warn whenever it is necessary to switch to another level.
81If an architecture level is explicitly requested, GAS will not issue
82warnings until that level is reached, and will then bump the level
83as required (except between incompatible levels).
84
85@item -32 | -64
86Select the word size, either 32 bits or 64 bits.
87These options are only available with the ELF object file format,
88and require that the necessary BFD support has been included.
89@end table
90
91@node Sparc-Aligned-Data
92@section Enforcing aligned data
93
94@cindex data alignment on SPARC
95@cindex SPARC data alignment
96SPARC GAS normally permits data to be misaligned.  For example, it
97permits the @code{.long} pseudo-op to be used on a byte boundary.
98However, the native SunOS and Solaris assemblers issue an error when
99they see misaligned data.
100
101@kindex --enforce-aligned-data
102You can use the @code{--enforce-aligned-data} option to make SPARC GAS
103also issue an error about misaligned data, just as the SunOS and Solaris
104assemblers do.
105
106The @code{--enforce-aligned-data} option is not the default because gcc
107issues misaligned data pseudo-ops when it initializes certain packed
108data structures (structures defined using the @code{packed} attribute).
109You may have to assemble with GAS in order to initialize packed data
110structures in your own code.
111
112@ignore
113@c FIXME: (sparc) Fill in "syntax" section!
114@c subsection syntax
115I don't know anything about Sparc syntax.  Someone who does
116will have to write this section.
117@end ignore
118
119@node Sparc-Float
120@section Floating Point
121
122@cindex floating point, SPARC (@sc{ieee})
123@cindex SPARC floating point (@sc{ieee})
124The Sparc uses @sc{ieee} floating-point numbers.
125
126@node Sparc-Directives
127@section Sparc Machine Directives
128
129@cindex SPARC machine directives
130@cindex machine directives, SPARC
131The Sparc version of @code{@value{AS}} supports the following additional
132machine directives:
133
134@table @code
135@cindex @code{align} directive, SPARC
136@item .align
137This must be followed by the desired alignment in bytes.
138
139@cindex @code{common} directive, SPARC
140@item .common
141This must be followed by a symbol name, a positive number, and
142@code{"bss"}.  This behaves somewhat like @code{.comm}, but the
143syntax is different.
144
145@cindex @code{half} directive, SPARC
146@item .half
147This is functionally identical to @code{.short}.
148
149@cindex @code{nword} directive, SPARC
150@item .nword
151On the Sparc, the @code{.nword} directive produces native word sized value,
152ie. if assembling with -32 it is equivalent to @code{.word}, if assembling
153with -64 it is equivalent to @code{.xword}.
154
155@cindex @code{proc} directive, SPARC
156@item .proc
157This directive is ignored.  Any text following it on the same
158line is also ignored.
159
160@cindex @code{register} directive, SPARC
161@item .register
162This directive declares use of a global application or system register.
163It must be followed by a register name %g2, %g3, %g6 or %g7, comma and
164the symbol name for that register.  If symbol name is @code{#scratch},
165it is a scratch register, if it is @code{#ignore}, it just suppresses any
166errors about using undeclared global register, but does not emit any
167information about it into the object file.  This can be useful e.g. if you
168save the register before use and restore it after.
169
170@cindex @code{reserve} directive, SPARC
171@item .reserve
172This must be followed by a symbol name, a positive number, and
173@code{"bss"}.  This behaves somewhat like @code{.lcomm}, but the
174syntax is different.
175
176@cindex @code{seg} directive, SPARC
177@item .seg
178This must be followed by @code{"text"}, @code{"data"}, or
179@code{"data1"}.  It behaves like @code{.text}, @code{.data}, or
180@code{.data 1}.
181
182@cindex @code{skip} directive, SPARC
183@item .skip
184This is functionally identical to the @code{.space} directive.
185
186@cindex @code{word} directive, SPARC
187@item .word
188On the Sparc, the @code{.word} directive produces 32 bit values,
189instead of the 16 bit values it produces on many other machines.
190
191@cindex @code{xword} directive, SPARC
192@item .xword
193On the Sparc V9 processor, the @code{.xword} directive produces
19464 bit values.
195@end table
196