Wrap overly long line in last patch.
[deliverable/binutils-gdb.git] / gas / doc / c-mips.texi
CommitLineData
f7e42eb4
NC
1@c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2000
2@c Free Software Foundation, Inc.
252b5132
RH
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
14
15@cindex MIPS processor
16@sc{gnu} @code{@value{AS}} for @sc{mips} architectures supports several
84ea6cf2 17different @sc{mips} processors, and MIPS ISA levels I through V, MIPS32,
584da044
NC
18and MIPS64. For information about the @sc{mips} instruction set, see
19@cite{MIPS RISC Architecture}, by Kane and Heindrich (Prentice-Hall).
20For an overview of @sc{mips} assembly conventions, see ``Appendix D:
21Assembly Language Programming'' in the same work.
252b5132
RH
22
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
0eb7102d
AJ
31* MIPS ASE instruction generation overrides:: Directives to control
32 generation of MIPS ASE instructions
252b5132
RH
33@end menu
34
35@node MIPS Opts
36@section Assembler options
37
38The @sc{mips} configurations of @sc{gnu} @code{@value{AS}} support these
39special options:
40
41@table @code
42@cindex @code{-G} option (MIPS)
43@item -G @var{num}
44This option sets the largest size of an object that can be referenced
45implicitly with the @code{gp} register. It is only accepted for targets
46that use @sc{ecoff} format. The default value is 8.
47
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
56Any @sc{mips} configuration of @code{@value{AS}} can select big-endian or
57little-endian output at run time (unlike the other @sc{gnu} development
58tools, which must be configured for one or the other). Use @samp{-EB}
59to select big-endian output, and @samp{-EL} for little-endian.
60
61@cindex MIPS architecture options
62@item -mips1
63@itemx -mips2
64@itemx -mips3
65@itemx -mips4
84ea6cf2 66@itemx -mips5
e7af610e 67@itemx -mips32
84ea6cf2 68@itemx -mips64
252b5132
RH
69Generate 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
84ea6cf2 72@sc{r4000} processor, and @samp{-mips4} to the @sc{r8000} and
584da044
NC
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
76instruction sets during the assembly; see @ref{MIPS ISA, Directives to
ec68c924 77override the ISA level}.
252b5132 78
6349b5f4 79@item -mgp32
ca4e0257
RS
80@itemx -mfp32
81Some macros have different expansions for 32-bit and 64-bit registers.
82The register sizes are normally inferred from the ISA and ABI, but these
83flags force a certain group of registers to be treated as 32 bits wide at
84all times. @samp{-mgp32} controls the size of general-purpose registers
85and @samp{-mfp32} controls the size of floating-point registers.
86
87On some MIPS variants there is a 32-bit mode flag; when this flag is
88set, 64-bit instructions generate a trap. Also, some 32-bit OSes only
89save the 32-bit registers on a context switch, so it is essential never
90to use the 64-bit registers.
6349b5f4
AH
91
92@item -mgp64
93Assume that 64-bit general purpose registers are available. This is
94provided in the interests of symmetry with -gp32.
95
252b5132
RH
96@item -mips16
97@itemx -no-mips16
98Generate 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}
100turns off this option.
101
1f25f5d3
CD
102@item -mips3d
103@itemx -no-mips3d
104Generate code for the MIPS-3D Application Specific Extension.
105This tells the assembler to accept MIPS-3D instructions.
106@samp{-no-mips3d} turns off this option.
107
6b76fefe
CM
108@item -mfix7000
109@itemx -no-mfix7000
110Cause nops to be inserted if the read of the destination register
111of an mfhi or mflo instruction occurs in the following two instructions.
112
252b5132
RH
113@item -m4010
114@itemx -no-m4010
115Generate code for the LSI @sc{r4010} chip. This tells the assembler to
116accept the @sc{r4010} specific instructions (@samp{addciu}, @samp{ffc},
117etc.), and to not schedule @samp{nop} instructions around accesses to
118the @samp{HI} and @samp{LO} registers. @samp{-no-m4010} turns off this
119option.
120
121@item -m4650
122@itemx -no-m4650
123Generate code for the MIPS @sc{r4650} chip. This tells the assembler to accept
124the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop}
125instructions around accesses to the @samp{HI} and @samp{LO} registers.
126@samp{-no-m4650} turns off this option.
127
128@itemx -m3900
129@itemx -no-m3900
130@itemx -m4100
131@itemx -no-m4100
132For each option @samp{-m@var{nnnn}}, generate code for the MIPS
133@sc{r@var{nnnn}} chip. This tells the assembler to accept instructions
134specific to that chip, and to schedule for that chip's hazards.
135
ec68c924 136@item -march=@var{cpu}
252b5132
RH
137Generate code for a particular MIPS cpu. It is exactly equivalent to
138@samp{-m@var{cpu}}, except that there are more value of @var{cpu}
139understood. Valid @var{cpu} value are:
140
141@quotation
1422000,
1433000,
1443900,
1454000,
1464010,
1474100,
1484111,
1494300,
1504400,
1514600,
1524650,
1535000,
b946ec34
NC
154rm5200,
155rm5230,
156rm5231,
157rm5261,
158rm5721,
252b5132 1596000,
b946ec34 160rm7000,
252b5132 1618000,
e7af610e 16210000,
18ae5d72 16312000,
c6c98b38
NC
164mips32-4k,
165sb1
252b5132
RH
166@end quotation
167
ec68c924
EC
168@item -mtune=@var{cpu}
169Schedule and tune for a particular MIPS cpu. Valid @var{cpu} values are
170identical to @samp{-march=@var{cpu}}.
171
172@item -mcpu=@var{cpu}
173Generate code and schedule for a particular MIPS cpu. This is exactly
174equivalent to @samp{-march=@var{cpu}} and @samp{-mtune=@var{cpu}}. Valid
175@var{cpu} values are identical to @samp{-march=@var{cpu}}.
176Use of this option is discouraged.
177
252b5132
RH
178
179@cindex @code{-nocpp} ignored (MIPS)
180@item -nocpp
181This option is ignored. It is accepted for command-line compatibility with
182other assemblers, which use it to turn off C style preprocessing. With
183@sc{gnu} @code{@value{AS}}, there is no need for @samp{-nocpp}, because the
184@sc{gnu} assembler itself never runs the C preprocessor.
185
119d663a
NC
186@item --construct-floats
187@itemx --no-construct-floats
188@cindex --construct-floats
189@cindex --no-construct-floats
190The @code{--no-construct-floats} option disables the construction of
191double width floating point constants by loading the two halves of the
192value into the two single width floating point registers that make up
193the double width register. This feature is useful if the processor
194support the FR bit in its status register, and this bit is known (by
195the programmer) to be set. This bit prevents the aliasing of the double
196width register by the single width registers.
197
63bf5651 198By default @code{--construct-floats} is selected, allowing construction
119d663a
NC
199of these floating point constants.
200
252b5132
RH
201@item --trap
202@itemx --no-break
203@c FIXME! (1) reflect these options (next item too) in option summaries;
204@c (2) stop teasing, say _which_ instructions expanded _how_.
205@code{@value{AS}} automatically macro expands certain division and
206multiplication instructions to check for overflow and division by zero. This
207option causes @code{@value{AS}} to generate code to take a trap exception
208rather than a break exception when an error is detected. The trap instructions
209are only supported at Instruction Set Architecture level 2 and higher.
210
211@item --break
212@itemx --no-trap
213Generate code to take a break exception rather than a trap exception when an
214error is detected. This is the default.
63486801
L
215
216@item -n
217When this option is used, @code{@value{AS}} will issue a warning every
218time it generates a nop instruction from a macro.
252b5132
RH
219@end table
220
221@node MIPS Object
222@section MIPS ECOFF object code
223
224@cindex ECOFF sections
225@cindex MIPS ECOFF sections
226Assembling for a @sc{mips} @sc{ecoff} target supports some additional sections
227besides the usual @code{.text}, @code{.data} and @code{.bss}. The
228additional sections are @code{.rdata}, used for read-only data,
229@code{.sdata}, used for small data, and @code{.sbss}, used for small
230common objects.
231
232@cindex small objects, MIPS ECOFF
233@cindex @code{gp} register, MIPS
234When assembling for @sc{ecoff}, the assembler uses the @code{$gp} (@code{$28})
235register to form the address of a ``small object''. Any object in the
236@code{.sdata} or @code{.sbss} sections is considered ``small'' in this sense.
237For external objects, or for objects in the @code{.bss} section, you can use
238the @code{@value{GCC}} @samp{-G} option to control the size of objects addressed via
239@code{$gp}; the default value is 8, meaning that a reference to any object
240eight bytes or smaller uses @code{$gp}. Passing @samp{-G 0} to
241@code{@value{AS}} prevents it from using the @code{$gp} register on the basis
242of object size (but the assembler uses @code{$gp} for objects in @code{.sdata}
243or @code{sbss} in any case). The size of an object in the @code{.bss} section
244is set by the @code{.comm} or @code{.lcomm} directive that defines it. The
245size of an external object may be set with the @code{.extern} directive. For
246example, @samp{.extern sym,4} declares that the object at @code{sym} is 4 bytes
247in length, whie leaving @code{sym} otherwise undefined.
248
249Using small @sc{ecoff} objects requires linker support, and assumes that the
250@code{$gp} register is correctly initialized (normally done automatically by
251the startup code). @sc{mips} @sc{ecoff} assembly code must not modify the
252@code{$gp} register.
253
254@node MIPS Stabs
255@section Directives for debugging information
256
257@cindex MIPS debugging directives
258@sc{mips} @sc{ecoff} @code{@value{AS}} supports several directives used for
259generating debugging information which are not support by traditional @sc{mips}
260assemblers. These are @code{.def}, @code{.endef}, @code{.dim}, @code{.file},
261@code{.scl}, @code{.size}, @code{.tag}, @code{.type}, @code{.val},
262@code{.stabd}, @code{.stabn}, and @code{.stabs}. The debugging information
263generated by the three @code{.stab} directives can only be read by @sc{gdb},
264not by traditional @sc{mips} debuggers (this enhancement is required to fully
265support C++ debugging). These directives are primarily used by compilers, not
266assembly language programmers!
267
268@node MIPS ISA
269@section Directives to override the ISA level
270
271@cindex MIPS ISA override
272@kindex @code{.set mips@var{n}}
273@sc{gnu} @code{@value{AS}} supports an additional directive to change
274the @sc{mips} Instruction Set Architecture level on the fly: @code{.set
84ea6cf2
NC
275mips@var{n}}. @var{n} should be a number from 0 to 5, or 32 or 64.
276The values 1 to 5, 32, and 64 make the assembler accept instructions
584da044
NC
277for the corresponding @sc{isa} level, from that point on in the
278assembly. @code{.set mips@var{n}} affects not only which instructions
279are permitted, but also how certain macros are expanded. @code{.set
280mips0} restores the @sc{isa} level to its original level: either the
281level you selected with command line options, or the default for your
282configuration. You can use this feature to permit specific @sc{r4000}
283instructions while assembling in 32 bit mode. Use this directive with
ec68c924 284care!
252b5132
RH
285
286The directive @samp{.set mips16} puts the assembler into MIPS 16 mode,
287in which it will assemble instructions for the MIPS 16 processor. Use
288@samp{.set nomips16} to return to normal 32 bit mode.
289
ec68c924 290Traditional @sc{mips} assemblers do not support this directive.
252b5132
RH
291
292@node MIPS autoextend
293@section Directives for extending MIPS 16 bit instructions
294
295@kindex @code{.set autoextend}
296@kindex @code{.set noautoextend}
297By default, MIPS 16 instructions are automatically extended to 32 bits
298when necessary. The directive @samp{.set noautoextend} will turn this
299off. When @samp{.set noautoextend} is in effect, any 32 bit instruction
300must be explicitly extended with the @samp{.e} modifier (e.g.,
301@samp{li.e $4,1000}). The directive @samp{.set autoextend} may be used
302to once again automatically extend instructions when necessary.
303
304This directive is only meaningful when in MIPS 16 mode. Traditional
305@sc{mips} assemblers do not support this directive.
306
307@node MIPS insn
308@section Directive to mark data as an instruction
309
310@kindex @code{.insn}
311The @code{.insn} directive tells @code{@value{AS}} that the following
312data is actually instructions. This makes a difference in MIPS 16 mode:
313when loading the address of a label which precedes instructions,
314@code{@value{AS}} automatically adds 1 to the value, so that jumping to
315the loaded address will do the right thing.
316
317@node MIPS option stack
318@section Directives to save and restore options
319
320@cindex MIPS option stack
321@kindex @code{.set push}
322@kindex @code{.set pop}
323The directives @code{.set push} and @code{.set pop} may be used to save
324and restore the current settings for all the options which are
325controlled by @code{.set}. The @code{.set push} directive saves the
326current settings on a stack. The @code{.set pop} directive pops the
327stack and restores the settings.
328
329These directives can be useful inside an macro which must change an
330option such as the ISA level or instruction reordering but does not want
331to change the state of the code which invoked the macro.
332
333Traditional @sc{mips} assemblers do not support these directives.
1f25f5d3
CD
334
335@node MIPS ASE instruction generation overrides
336@section Directives to control generation of MIPS ASE instructions
337
338@cindex MIPS MIPS-3D instruction generation override
339@kindex @code{.set mips3d}
340@kindex @code{.set nomips3d}
341The directive @code{.set mips3d} makes the assembler accept instructions
342from the MIPS-3D Application Specific Extension from that point on
343in the assembly. The @code{.set nomips3d} directive prevents MIPS-3D
344instructions from being accepted.
345
346Traditional @sc{mips} assemblers do not support these directives.
This page took 0.134851 seconds and 4 git commands to generate.