[ bfd/ChangeLog ]
[deliverable/binutils-gdb.git] / gas / doc / c-mips.texi
CommitLineData
dcd410fe 1@c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003
f7e42eb4 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
af7ee8bf 68@itemx -mips32r2
84ea6cf2 69@itemx -mips64
5f74bc13 70@itemx -mips64r2
252b5132
RH
71Generate code for a particular MIPS Instruction Set Architecture level.
72@samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors,
73@samp{-mips2} to the @sc{r6000} processor, @samp{-mips3} to the
84ea6cf2 74@sc{r4000} processor, and @samp{-mips4} to the @sc{r8000} and
5f74bc13
CD
75@sc{r10000} processors. @samp{-mips5}, @samp{-mips32}, @samp{-mips32r2},
76@samp{-mips64}, and @samp{-mips64r2}
77correspond to generic
78@sc{MIPS V}, @sc{MIPS32}, @sc{MIPS32 Release 2}, @sc{MIPS64},
79and @sc{MIPS64 Release 2}
80ISA processors, respectively. You can also switch
584da044 81instruction sets during the assembly; see @ref{MIPS ISA, Directives to
ec68c924 82override the ISA level}.
252b5132 83
6349b5f4 84@item -mgp32
ca4e0257
RS
85@itemx -mfp32
86Some macros have different expansions for 32-bit and 64-bit registers.
87The register sizes are normally inferred from the ISA and ABI, but these
88flags force a certain group of registers to be treated as 32 bits wide at
89all times. @samp{-mgp32} controls the size of general-purpose registers
90and @samp{-mfp32} controls the size of floating-point registers.
91
92On some MIPS variants there is a 32-bit mode flag; when this flag is
93set, 64-bit instructions generate a trap. Also, some 32-bit OSes only
94save the 32-bit registers on a context switch, so it is essential never
95to use the 64-bit registers.
6349b5f4
AH
96
97@item -mgp64
98Assume that 64-bit general purpose registers are available. This is
99provided in the interests of symmetry with -gp32.
100
252b5132
RH
101@item -mips16
102@itemx -no-mips16
103Generate code for the MIPS 16 processor. This is equivalent to putting
104@samp{.set mips16} at the start of the assembly file. @samp{-no-mips16}
105turns off this option.
106
1f25f5d3
CD
107@item -mips3d
108@itemx -no-mips3d
109Generate code for the MIPS-3D Application Specific Extension.
110This tells the assembler to accept MIPS-3D instructions.
111@samp{-no-mips3d} turns off this option.
112
deec1734
CD
113@item -mdmx
114@itemx -no-mdmx
115Generate code for the MDMX Application Specific Extension.
116This tells the assembler to accept MDMX instructions.
117@samp{-no-mdmx} turns off this option.
118
6b76fefe 119@item -mfix7000
9ee72ff1 120@itemx -mno-fix7000
6b76fefe
CM
121Cause nops to be inserted if the read of the destination register
122of an mfhi or mflo instruction occurs in the following two instructions.
123
60b63b72
RS
124@item -mfix-vr4122-bugs
125@itemx -no-mfix-vr4122-bugs
126Insert @samp{nop} instructions to avoid errors in certain versions of
127the vr4122 core. This option is intended to be used on GCC-generated
128code: it is not designed to catch errors in hand-written assembler code.
129
252b5132
RH
130@item -m4010
131@itemx -no-m4010
132Generate code for the LSI @sc{r4010} chip. This tells the assembler to
133accept the @sc{r4010} specific instructions (@samp{addciu}, @samp{ffc},
134etc.), and to not schedule @samp{nop} instructions around accesses to
135the @samp{HI} and @samp{LO} registers. @samp{-no-m4010} turns off this
136option.
137
138@item -m4650
139@itemx -no-m4650
140Generate code for the MIPS @sc{r4650} chip. This tells the assembler to accept
141the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop}
142instructions around accesses to the @samp{HI} and @samp{LO} registers.
143@samp{-no-m4650} turns off this option.
144
145@itemx -m3900
146@itemx -no-m3900
147@itemx -m4100
148@itemx -no-m4100
149For each option @samp{-m@var{nnnn}}, generate code for the MIPS
150@sc{r@var{nnnn}} chip. This tells the assembler to accept instructions
151specific to that chip, and to schedule for that chip's hazards.
152
ec68c924 153@item -march=@var{cpu}
252b5132
RH
154Generate code for a particular MIPS cpu. It is exactly equivalent to
155@samp{-m@var{cpu}}, except that there are more value of @var{cpu}
156understood. Valid @var{cpu} value are:
157
158@quotation
1592000,
1603000,
1613900,
1624000,
1634010,
1644100,
1654111,
60b63b72
RS
166vr4120,
167vr4130,
168vr4181,
252b5132
RH
1694300,
1704400,
1714600,
1724650,
1735000,
b946ec34
NC
174rm5200,
175rm5230,
176rm5231,
177rm5261,
178rm5721,
60b63b72
RS
179vr5400,
180vr5500,
252b5132 1816000,
b946ec34 182rm7000,
252b5132 1838000,
963ac363 184rm9000,
e7af610e 18510000,
18ae5d72 18612000,
c6c98b38
NC
187mips32-4k,
188sb1
252b5132
RH
189@end quotation
190
ec68c924
EC
191@item -mtune=@var{cpu}
192Schedule and tune for a particular MIPS cpu. Valid @var{cpu} values are
193identical to @samp{-march=@var{cpu}}.
194
316f5878
RS
195@item -mabi=@var{abi}
196Record which ABI the source code uses. The recognized arguments
197are: @samp{32}, @samp{n32}, @samp{o64}, @samp{64} and @samp{eabi}.
252b5132
RH
198
199@cindex @code{-nocpp} ignored (MIPS)
200@item -nocpp
201This option is ignored. It is accepted for command-line compatibility with
202other assemblers, which use it to turn off C style preprocessing. With
203@sc{gnu} @code{@value{AS}}, there is no need for @samp{-nocpp}, because the
204@sc{gnu} assembler itself never runs the C preprocessor.
205
119d663a
NC
206@item --construct-floats
207@itemx --no-construct-floats
208@cindex --construct-floats
209@cindex --no-construct-floats
210The @code{--no-construct-floats} option disables the construction of
211double width floating point constants by loading the two halves of the
212value into the two single width floating point registers that make up
213the double width register. This feature is useful if the processor
214support the FR bit in its status register, and this bit is known (by
215the programmer) to be set. This bit prevents the aliasing of the double
216width register by the single width registers.
217
63bf5651 218By default @code{--construct-floats} is selected, allowing construction
119d663a
NC
219of these floating point constants.
220
252b5132
RH
221@item --trap
222@itemx --no-break
223@c FIXME! (1) reflect these options (next item too) in option summaries;
224@c (2) stop teasing, say _which_ instructions expanded _how_.
225@code{@value{AS}} automatically macro expands certain division and
226multiplication instructions to check for overflow and division by zero. This
227option causes @code{@value{AS}} to generate code to take a trap exception
228rather than a break exception when an error is detected. The trap instructions
229are only supported at Instruction Set Architecture level 2 and higher.
230
231@item --break
232@itemx --no-trap
233Generate code to take a break exception rather than a trap exception when an
234error is detected. This is the default.
63486801 235
dcd410fe
RO
236@item -mpdr
237@itemx -mno-pdr
238Control generation of @code{.pdr} sections. Off by default on IRIX, on
239elsewhere.
240
63486801
L
241@item -n
242When this option is used, @code{@value{AS}} will issue a warning every
243time it generates a nop instruction from a macro.
252b5132
RH
244@end table
245
246@node MIPS Object
247@section MIPS ECOFF object code
248
249@cindex ECOFF sections
250@cindex MIPS ECOFF sections
251Assembling for a @sc{mips} @sc{ecoff} target supports some additional sections
252besides the usual @code{.text}, @code{.data} and @code{.bss}. The
253additional sections are @code{.rdata}, used for read-only data,
254@code{.sdata}, used for small data, and @code{.sbss}, used for small
255common objects.
256
257@cindex small objects, MIPS ECOFF
258@cindex @code{gp} register, MIPS
259When assembling for @sc{ecoff}, the assembler uses the @code{$gp} (@code{$28})
260register to form the address of a ``small object''. Any object in the
261@code{.sdata} or @code{.sbss} sections is considered ``small'' in this sense.
262For external objects, or for objects in the @code{.bss} section, you can use
263the @code{@value{GCC}} @samp{-G} option to control the size of objects addressed via
264@code{$gp}; the default value is 8, meaning that a reference to any object
265eight bytes or smaller uses @code{$gp}. Passing @samp{-G 0} to
266@code{@value{AS}} prevents it from using the @code{$gp} register on the basis
267of object size (but the assembler uses @code{$gp} for objects in @code{.sdata}
268or @code{sbss} in any case). The size of an object in the @code{.bss} section
269is set by the @code{.comm} or @code{.lcomm} directive that defines it. The
270size of an external object may be set with the @code{.extern} directive. For
271example, @samp{.extern sym,4} declares that the object at @code{sym} is 4 bytes
272in length, whie leaving @code{sym} otherwise undefined.
273
274Using small @sc{ecoff} objects requires linker support, and assumes that the
275@code{$gp} register is correctly initialized (normally done automatically by
276the startup code). @sc{mips} @sc{ecoff} assembly code must not modify the
277@code{$gp} register.
278
279@node MIPS Stabs
280@section Directives for debugging information
281
282@cindex MIPS debugging directives
283@sc{mips} @sc{ecoff} @code{@value{AS}} supports several directives used for
284generating debugging information which are not support by traditional @sc{mips}
285assemblers. These are @code{.def}, @code{.endef}, @code{.dim}, @code{.file},
286@code{.scl}, @code{.size}, @code{.tag}, @code{.type}, @code{.val},
287@code{.stabd}, @code{.stabn}, and @code{.stabs}. The debugging information
288generated by the three @code{.stab} directives can only be read by @sc{gdb},
289not by traditional @sc{mips} debuggers (this enhancement is required to fully
290support C++ debugging). These directives are primarily used by compilers, not
291assembly language programmers!
292
293@node MIPS ISA
294@section Directives to override the ISA level
295
296@cindex MIPS ISA override
297@kindex @code{.set mips@var{n}}
298@sc{gnu} @code{@value{AS}} supports an additional directive to change
299the @sc{mips} Instruction Set Architecture level on the fly: @code{.set
5f74bc13
CD
300mips@var{n}}. @var{n} should be a number from 0 to 5, or 32, 32r2, 64
301or 64r2.
071742cf 302The values other than 0 make the assembler accept instructions
584da044
NC
303for the corresponding @sc{isa} level, from that point on in the
304assembly. @code{.set mips@var{n}} affects not only which instructions
305are permitted, but also how certain macros are expanded. @code{.set
306mips0} restores the @sc{isa} level to its original level: either the
307level you selected with command line options, or the default for your
308configuration. You can use this feature to permit specific @sc{r4000}
309instructions while assembling in 32 bit mode. Use this directive with
ec68c924 310care!
252b5132
RH
311
312The directive @samp{.set mips16} puts the assembler into MIPS 16 mode,
313in which it will assemble instructions for the MIPS 16 processor. Use
314@samp{.set nomips16} to return to normal 32 bit mode.
315
ec68c924 316Traditional @sc{mips} assemblers do not support this directive.
252b5132
RH
317
318@node MIPS autoextend
319@section Directives for extending MIPS 16 bit instructions
320
321@kindex @code{.set autoextend}
322@kindex @code{.set noautoextend}
323By default, MIPS 16 instructions are automatically extended to 32 bits
324when necessary. The directive @samp{.set noautoextend} will turn this
325off. When @samp{.set noautoextend} is in effect, any 32 bit instruction
326must be explicitly extended with the @samp{.e} modifier (e.g.,
327@samp{li.e $4,1000}). The directive @samp{.set autoextend} may be used
328to once again automatically extend instructions when necessary.
329
330This directive is only meaningful when in MIPS 16 mode. Traditional
331@sc{mips} assemblers do not support this directive.
332
333@node MIPS insn
334@section Directive to mark data as an instruction
335
336@kindex @code{.insn}
337The @code{.insn} directive tells @code{@value{AS}} that the following
338data is actually instructions. This makes a difference in MIPS 16 mode:
339when loading the address of a label which precedes instructions,
340@code{@value{AS}} automatically adds 1 to the value, so that jumping to
341the loaded address will do the right thing.
342
343@node MIPS option stack
344@section Directives to save and restore options
345
346@cindex MIPS option stack
347@kindex @code{.set push}
348@kindex @code{.set pop}
349The directives @code{.set push} and @code{.set pop} may be used to save
350and restore the current settings for all the options which are
351controlled by @code{.set}. The @code{.set push} directive saves the
352current settings on a stack. The @code{.set pop} directive pops the
353stack and restores the settings.
354
355These directives can be useful inside an macro which must change an
356option such as the ISA level or instruction reordering but does not want
357to change the state of the code which invoked the macro.
358
359Traditional @sc{mips} assemblers do not support these directives.
1f25f5d3
CD
360
361@node MIPS ASE instruction generation overrides
362@section Directives to control generation of MIPS ASE instructions
363
364@cindex MIPS MIPS-3D instruction generation override
365@kindex @code{.set mips3d}
366@kindex @code{.set nomips3d}
367The directive @code{.set mips3d} makes the assembler accept instructions
368from the MIPS-3D Application Specific Extension from that point on
369in the assembly. The @code{.set nomips3d} directive prevents MIPS-3D
370instructions from being accepted.
371
deec1734
CD
372@cindex MIPS MDMX instruction generation override
373@kindex @code{.set mdmx}
374@kindex @code{.set nomdmx}
375The directive @code{.set mdmx} makes the assembler accept instructions
376from the MDMX Application Specific Extension from that point on
377in the assembly. The @code{.set nomdmx} directive prevents MDMX
378instructions from being accepted.
379
1f25f5d3 380Traditional @sc{mips} assemblers do not support these directives.
This page took 0.242963 seconds and 4 git commands to generate.