* acinclude.m4 (AM_INSTALL_LIBBFD): Do not rely on "test -o".
[binutils.git] / gas / doc / c-mips.texi
blob6b82fd0c9575d5fc52e6b6eed9e8557e56db986f
1 @c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2000
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 MIPS-Dependent
8 @chapter MIPS Dependent Features
9 @end ifset
10 @ifclear GENERIC
11 @node Machine Dependencies
12 @chapter MIPS Dependent Features
13 @end ifclear
15 @cindex MIPS processor
16 @sc{gnu} @code{@value{AS}} for @sc{mips} architectures supports several
17 different @sc{mips} processors, and MIPS ISA levels I through V, MIPS32,
18 and MIPS64.  For information about the @sc{mips} instruction set, see
19 @cite{MIPS RISC Architecture}, by Kane and Heindrich (Prentice-Hall).
20 For an overview of @sc{mips} assembly conventions, see ``Appendix D:
21 Assembly Language Programming'' in the same work.
23 @menu
24 * MIPS Opts::           Assembler options
25 * MIPS Object::         ECOFF object code
26 * MIPS Stabs::          Directives for debugging information
27 * MIPS ISA::            Directives to override the ISA level
28 * MIPS autoextend::     Directives for extending MIPS 16 bit instructions
29 * MIPS insn::           Directive to mark data as an instruction
30 * MIPS option stack::   Directives to save and restore options
31 * MIPS ASE instruction generation overrides:: Directives to control
32                         generation of MIPS ASE instructions
33 @end menu
35 @node MIPS Opts
36 @section Assembler options
38 The @sc{mips} configurations of @sc{gnu} @code{@value{AS}} support these
39 special options:
41 @table @code
42 @cindex @code{-G} option (MIPS)
43 @item -G @var{num}
44 This option sets the largest size of an object that can be referenced
45 implicitly with the @code{gp} register.  It is only accepted for targets
46 that use @sc{ecoff} format.  The default value is 8.
48 @cindex @code{-EB} option (MIPS)
49 @cindex @code{-EL} option (MIPS)
50 @cindex MIPS big-endian output
51 @cindex MIPS little-endian output
52 @cindex big-endian output, MIPS
53 @cindex little-endian output, MIPS
54 @item -EB
55 @itemx -EL
56 Any @sc{mips} configuration of @code{@value{AS}} can select big-endian or
57 little-endian output at run time (unlike the other @sc{gnu} development
58 tools, which must be configured for one or the other).  Use @samp{-EB}
59 to select big-endian output, and @samp{-EL} for little-endian.
61 @cindex MIPS architecture options
62 @item -mips1
63 @itemx -mips2
64 @itemx -mips3
65 @itemx -mips4
66 @itemx -mips5
67 @itemx -mips32
68 @itemx -mips64
69 Generate code for a particular MIPS Instruction Set Architecture level.
70 @samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors,
71 @samp{-mips2} to the @sc{r6000} processor, @samp{-mips3} to the
72 @sc{r4000} processor, and @samp{-mips4} to the @sc{r8000} and
73 @sc{r10000} processors.  @samp{-mips5}, @samp{-mips32}, and
74 @samp{-mips64} correspond to generic @sc{MIPS V}, @sc{MIPS32}, and
75 @sc{MIPS64} ISA processors, respectively.  You can also switch
76 instruction sets during the assembly; see @ref{MIPS ISA, Directives to
77 override the ISA level}.
79 @item -mgp32
80 @itemx -mfp32
81 Some macros have different expansions for 32-bit and 64-bit registers.
82 The register sizes are normally inferred from the ISA and ABI, but these
83 flags force a certain group of registers to be treated as 32 bits wide at
84 all times.  @samp{-mgp32} controls the size of general-purpose registers
85 and @samp{-mfp32} controls the size of floating-point registers.
87 On some MIPS variants there is a 32-bit mode flag; when this flag is
88 set, 64-bit instructions generate a trap.  Also, some 32-bit OSes only
89 save the 32-bit registers on a context switch, so it is essential never
90 to use the 64-bit registers.
92 @item -mgp64
93 Assume that 64-bit general purpose registers are available.  This is
94 provided in the interests of symmetry with -gp32.
96 @item -mips16
97 @itemx -no-mips16
98 Generate code for the MIPS 16 processor.  This is equivalent to putting
99 @samp{.set mips16} at the start of the assembly file.  @samp{-no-mips16}
100 turns off this option.
102 @item -mips3d
103 @itemx -no-mips3d
104 Generate code for the MIPS-3D Application Specific Extension.
105 This tells the assembler to accept MIPS-3D instructions.
106 @samp{-no-mips3d} turns off this option.
108 @item -mdmx
109 @itemx -no-mdmx
110 Generate code for the MDMX Application Specific Extension.
111 This tells the assembler to accept MDMX instructions.
112 @samp{-no-mdmx} turns off this option.
114 @item -mfix7000
115 @itemx -mno-fix7000
116 Cause nops to be inserted if the read of the destination register
117 of an mfhi or mflo instruction occurs in the following two instructions.
119 @item -mfix-vr4122-bugs
120 @itemx -no-mfix-vr4122-bugs
121 Insert @samp{nop} instructions to avoid errors in certain versions of
122 the vr4122 core.  This option is intended to be used on GCC-generated
123 code: it is not designed to catch errors in hand-written assembler code.
125 @item -m4010
126 @itemx -no-m4010
127 Generate code for the LSI @sc{r4010} chip.  This tells the assembler to
128 accept the @sc{r4010} specific instructions (@samp{addciu}, @samp{ffc},
129 etc.), and to not schedule @samp{nop} instructions around accesses to
130 the @samp{HI} and @samp{LO} registers.  @samp{-no-m4010} turns off this
131 option.
133 @item -m4650
134 @itemx -no-m4650
135 Generate code for the MIPS @sc{r4650} chip.  This tells the assembler to accept
136 the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop}
137 instructions around accesses to the @samp{HI} and @samp{LO} registers.
138 @samp{-no-m4650} turns off this option.
140 @itemx -m3900
141 @itemx -no-m3900
142 @itemx -m4100
143 @itemx -no-m4100
144 For each option @samp{-m@var{nnnn}}, generate code for the MIPS
145 @sc{r@var{nnnn}} chip.  This tells the assembler to accept instructions
146 specific to that chip, and to schedule for that chip's hazards.
148 @item -march=@var{cpu}
149 Generate code for a particular MIPS cpu.  It is exactly equivalent to
150 @samp{-m@var{cpu}}, except that there are more value of @var{cpu}
151 understood.  Valid @var{cpu} value are:
153 @quotation
154 2000,
155 3000,
156 3900,
157 4000,
158 4010,
159 4100,
160 4111,
161 vr4120,
162 vr4130,
163 vr4181,
164 4300,
165 4400,
166 4600,
167 4650,
168 5000,
169 rm5200,
170 rm5230,
171 rm5231,
172 rm5261,
173 rm5721,
174 vr5400,
175 vr5500,
176 6000,
177 rm7000,
178 8000,
179 10000,
180 12000,
181 mips32-4k,
183 @end quotation
185 @item -mtune=@var{cpu}
186 Schedule and tune for a particular MIPS cpu.  Valid @var{cpu} values are
187 identical to @samp{-march=@var{cpu}}.
189 @item -mabi=@var{abi}
190 Record which ABI the source code uses.  The recognized arguments
191 are: @samp{32}, @samp{n32}, @samp{o64}, @samp{64} and @samp{eabi}.
193 @cindex @code{-nocpp} ignored (MIPS)
194 @item -nocpp
195 This option is ignored.  It is accepted for command-line compatibility with
196 other assemblers, which use it to turn off C style preprocessing.  With
197 @sc{gnu} @code{@value{AS}}, there is no need for @samp{-nocpp}, because the
198 @sc{gnu} assembler itself never runs the C preprocessor.
200 @item --construct-floats
201 @itemx --no-construct-floats
202 @cindex --construct-floats
203 @cindex --no-construct-floats
204 The @code{--no-construct-floats} option disables the construction of
205 double width floating point constants by loading the two halves of the
206 value into the two single width floating point registers that make up
207 the double width register.  This feature is useful if the processor
208 support the FR bit in its status  register, and this bit is known (by
209 the programmer) to be set.  This bit prevents the aliasing of the double
210 width register by the single width registers.
212 By default @code{--construct-floats} is selected, allowing construction
213 of these floating point constants.
215 @item --trap
216 @itemx --no-break
217 @c FIXME!  (1) reflect these options (next item too) in option summaries;
218 @c         (2) stop teasing, say _which_ instructions expanded _how_.
219 @code{@value{AS}} automatically macro expands certain division and
220 multiplication instructions to check for overflow and division by zero.  This
221 option causes @code{@value{AS}} to generate code to take a trap exception
222 rather than a break exception when an error is detected.  The trap instructions
223 are only supported at Instruction Set Architecture level 2 and higher.
225 @item --break
226 @itemx --no-trap
227 Generate code to take a break exception rather than a trap exception when an
228 error is detected.  This is the default.
230 @item -n
231 When this option is used, @code{@value{AS}} will issue a warning every
232 time it generates a nop instruction from a macro.
233 @end table
235 @node MIPS Object
236 @section MIPS ECOFF object code
238 @cindex ECOFF sections
239 @cindex MIPS ECOFF sections
240 Assembling for a @sc{mips} @sc{ecoff} target supports some additional sections
241 besides the usual @code{.text}, @code{.data} and @code{.bss}.  The
242 additional sections are @code{.rdata}, used for read-only data,
243 @code{.sdata}, used for small data, and @code{.sbss}, used for small
244 common objects.
246 @cindex small objects, MIPS ECOFF
247 @cindex @code{gp} register, MIPS
248 When assembling for @sc{ecoff}, the assembler uses the @code{$gp} (@code{$28})
249 register to form the address of a ``small object''.  Any object in the
250 @code{.sdata} or @code{.sbss} sections is considered ``small'' in this sense.
251 For external objects, or for objects in the @code{.bss} section, you can use
252 the @code{@value{GCC}} @samp{-G} option to control the size of objects addressed via
253 @code{$gp}; the default value is 8, meaning that a reference to any object
254 eight bytes or smaller uses @code{$gp}.  Passing @samp{-G 0} to
255 @code{@value{AS}} prevents it from using the @code{$gp} register on the basis
256 of object size (but the assembler uses @code{$gp} for objects in @code{.sdata}
257 or @code{sbss} in any case).  The size of an object in the @code{.bss} section
258 is set by the @code{.comm} or @code{.lcomm} directive that defines it.  The
259 size of an external object may be set with the @code{.extern} directive.  For
260 example, @samp{.extern sym,4} declares that the object at @code{sym} is 4 bytes
261 in length, whie leaving @code{sym} otherwise undefined.
263 Using small @sc{ecoff} objects requires linker support, and assumes that the
264 @code{$gp} register is correctly initialized (normally done automatically by
265 the startup code).  @sc{mips} @sc{ecoff} assembly code must not modify the
266 @code{$gp} register.
268 @node MIPS Stabs
269 @section Directives for debugging information
271 @cindex MIPS debugging directives
272 @sc{mips} @sc{ecoff} @code{@value{AS}} supports several directives used for
273 generating debugging information which are not support by traditional @sc{mips}
274 assemblers.  These are @code{.def}, @code{.endef}, @code{.dim}, @code{.file},
275 @code{.scl}, @code{.size}, @code{.tag}, @code{.type}, @code{.val},
276 @code{.stabd}, @code{.stabn}, and @code{.stabs}.  The debugging information
277 generated by the three @code{.stab} directives can only be read by @sc{gdb},
278 not by traditional @sc{mips} debuggers (this enhancement is required to fully
279 support C++ debugging).  These directives are primarily used by compilers, not
280 assembly language programmers!
282 @node MIPS ISA
283 @section Directives to override the ISA level
285 @cindex MIPS ISA override
286 @kindex @code{.set mips@var{n}}
287 @sc{gnu} @code{@value{AS}} supports an additional directive to change
288 the @sc{mips} Instruction Set Architecture level on the fly: @code{.set
289 mips@var{n}}.  @var{n} should be a number from 0 to 5, or 32 or 64.
290 The values 1 to 5, 32, and 64 make the assembler accept instructions
291 for the corresponding @sc{isa} level, from that point on in the
292 assembly.  @code{.set mips@var{n}} affects not only which instructions
293 are permitted, but also how certain macros are expanded.  @code{.set
294 mips0} restores the @sc{isa} level to its original level: either the
295 level you selected with command line options, or the default for your
296 configuration.  You can use this feature to permit specific @sc{r4000}
297 instructions while assembling in 32 bit mode.  Use this directive with
298 care!
300 The directive @samp{.set mips16} puts the assembler into MIPS 16 mode,
301 in which it will assemble instructions for the MIPS 16 processor.  Use
302 @samp{.set nomips16} to return to normal 32 bit mode.
304 Traditional @sc{mips} assemblers do not support this directive.
306 @node MIPS autoextend
307 @section Directives for extending MIPS 16 bit instructions
309 @kindex @code{.set autoextend}
310 @kindex @code{.set noautoextend}
311 By default, MIPS 16 instructions are automatically extended to 32 bits
312 when necessary.  The directive @samp{.set noautoextend} will turn this
313 off.  When @samp{.set noautoextend} is in effect, any 32 bit instruction
314 must be explicitly extended with the @samp{.e} modifier (e.g.,
315 @samp{li.e $4,1000}).  The directive @samp{.set autoextend} may be used
316 to once again automatically extend instructions when necessary.
318 This directive is only meaningful when in MIPS 16 mode.  Traditional
319 @sc{mips} assemblers do not support this directive.
321 @node MIPS insn
322 @section Directive to mark data as an instruction
324 @kindex @code{.insn}
325 The @code{.insn} directive tells @code{@value{AS}} that the following
326 data is actually instructions.  This makes a difference in MIPS 16 mode:
327 when loading the address of a label which precedes instructions,
328 @code{@value{AS}} automatically adds 1 to the value, so that jumping to
329 the loaded address will do the right thing.
331 @node MIPS option stack
332 @section Directives to save and restore options
334 @cindex MIPS option stack
335 @kindex @code{.set push}
336 @kindex @code{.set pop}
337 The directives @code{.set push} and @code{.set pop} may be used to save
338 and restore the current settings for all the options which are
339 controlled by @code{.set}.  The @code{.set push} directive saves the
340 current settings on a stack.  The @code{.set pop} directive pops the
341 stack and restores the settings.
343 These directives can be useful inside an macro which must change an
344 option such as the ISA level or instruction reordering but does not want
345 to change the state of the code which invoked the macro.
347 Traditional @sc{mips} assemblers do not support these directives.
349 @node MIPS ASE instruction generation overrides
350 @section Directives to control generation of MIPS ASE instructions
352 @cindex MIPS MIPS-3D instruction generation override
353 @kindex @code{.set mips3d}
354 @kindex @code{.set nomips3d}
355 The directive @code{.set mips3d} makes the assembler accept instructions
356 from the MIPS-3D Application Specific Extension from that point on
357 in the assembly.  The @code{.set nomips3d} directive prevents MIPS-3D
358 instructions from being accepted.
360 @cindex MIPS MDMX instruction generation override
361 @kindex @code{.set mdmx}
362 @kindex @code{.set nomdmx}
363 The directive @code{.set mdmx} makes the assembler accept instructions
364 from the MDMX Application Specific Extension from that point on
365 in the assembly.  The @code{.set nomdmx} directive prevents MDMX
366 instructions from being accepted.
368 Traditional @sc{mips} assemblers do not support these directives.