]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gas/doc/c-mips.texi
* m32r.cpu (stb-plus): Typo fix.
[thirdparty/binutils-gdb.git] / gas / doc / c-mips.texi
CommitLineData
78849248 1@c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001,
aa820537 2@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
f7e42eb4 3@c Free Software Foundation, Inc.
252b5132
RH
4@c This is part of the GAS manual.
5@c For copying conditions, see the file as.texinfo.
6@ifset GENERIC
7@page
8@node MIPS-Dependent
9@chapter MIPS Dependent Features
10@end ifset
11@ifclear GENERIC
12@node Machine Dependencies
13@chapter MIPS Dependent Features
14@end ifclear
15
16@cindex MIPS processor
17@sc{gnu} @code{@value{AS}} for @sc{mips} architectures supports several
84ea6cf2 18different @sc{mips} processors, and MIPS ISA levels I through V, MIPS32,
584da044
NC
19and MIPS64. For information about the @sc{mips} instruction set, see
20@cite{MIPS RISC Architecture}, by Kane and Heindrich (Prentice-Hall).
21For an overview of @sc{mips} assembly conventions, see ``Appendix D:
22Assembly Language Programming'' in the same work.
252b5132
RH
23
24@menu
25* MIPS Opts:: Assembler options
26* MIPS Object:: ECOFF object code
27* MIPS Stabs:: Directives for debugging information
28* MIPS ISA:: Directives to override the ISA level
aed1a261 29* MIPS symbol sizes:: Directives to override the size of symbols
252b5132
RH
30* MIPS autoextend:: Directives for extending MIPS 16 bit instructions
31* MIPS insn:: Directive to mark data as an instruction
32* MIPS option stack:: Directives to save and restore options
0eb7102d
AJ
33* MIPS ASE instruction generation overrides:: Directives to control
34 generation of MIPS ASE instructions
037b32b9 35* MIPS floating-point:: Directives to override floating-point options
252b5132
RH
36@end menu
37
38@node MIPS Opts
39@section Assembler options
40
41The @sc{mips} configurations of @sc{gnu} @code{@value{AS}} support these
42special options:
43
44@table @code
45@cindex @code{-G} option (MIPS)
46@item -G @var{num}
47This option sets the largest size of an object that can be referenced
48implicitly with the @code{gp} register. It is only accepted for targets
49that use @sc{ecoff} format. The default value is 8.
50
51@cindex @code{-EB} option (MIPS)
52@cindex @code{-EL} option (MIPS)
53@cindex MIPS big-endian output
54@cindex MIPS little-endian output
55@cindex big-endian output, MIPS
56@cindex little-endian output, MIPS
57@item -EB
58@itemx -EL
59Any @sc{mips} configuration of @code{@value{AS}} can select big-endian or
60little-endian output at run time (unlike the other @sc{gnu} development
61tools, which must be configured for one or the other). Use @samp{-EB}
62to select big-endian output, and @samp{-EL} for little-endian.
63
0c000745
RS
64@item -KPIC
65@cindex PIC selection, MIPS
66@cindex @option{-KPIC} option, MIPS
67Generate SVR4-style PIC. This option tells the assembler to generate
68SVR4-style position-independent macro expansions. It also tells the
69assembler to mark the output file as PIC.
70
71@item -mvxworks-pic
72@cindex @option{-mvxworks-pic} option, MIPS
73Generate VxWorks PIC. This option tells the assembler to generate
74VxWorks-style position-independent macro expansions.
75
252b5132
RH
76@cindex MIPS architecture options
77@item -mips1
78@itemx -mips2
79@itemx -mips3
80@itemx -mips4
84ea6cf2 81@itemx -mips5
e7af610e 82@itemx -mips32
af7ee8bf 83@itemx -mips32r2
84ea6cf2 84@itemx -mips64
5f74bc13 85@itemx -mips64r2
252b5132
RH
86Generate code for a particular MIPS Instruction Set Architecture level.
87@samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors,
88@samp{-mips2} to the @sc{r6000} processor, @samp{-mips3} to the
84ea6cf2 89@sc{r4000} processor, and @samp{-mips4} to the @sc{r8000} and
5f74bc13
CD
90@sc{r10000} processors. @samp{-mips5}, @samp{-mips32}, @samp{-mips32r2},
91@samp{-mips64}, and @samp{-mips64r2}
92correspond to generic
93@sc{MIPS V}, @sc{MIPS32}, @sc{MIPS32 Release 2}, @sc{MIPS64},
94and @sc{MIPS64 Release 2}
95ISA processors, respectively. You can also switch
584da044 96instruction sets during the assembly; see @ref{MIPS ISA, Directives to
ec68c924 97override the ISA level}.
252b5132 98
6349b5f4 99@item -mgp32
ca4e0257
RS
100@itemx -mfp32
101Some macros have different expansions for 32-bit and 64-bit registers.
102The register sizes are normally inferred from the ISA and ABI, but these
103flags force a certain group of registers to be treated as 32 bits wide at
104all times. @samp{-mgp32} controls the size of general-purpose registers
105and @samp{-mfp32} controls the size of floating-point registers.
106
ad3fea08
TS
107The @code{.set gp=32} and @code{.set fp=32} directives allow the size
108of registers to be changed for parts of an object. The default value is
109restored by @code{.set gp=default} and @code{.set fp=default}.
110
ca4e0257
RS
111On some MIPS variants there is a 32-bit mode flag; when this flag is
112set, 64-bit instructions generate a trap. Also, some 32-bit OSes only
113save the 32-bit registers on a context switch, so it is essential never
114to use the 64-bit registers.
6349b5f4
AH
115
116@item -mgp64
ad3fea08
TS
117@itemx -mfp64
118Assume that 64-bit registers are available. This is provided in the
119interests of symmetry with @samp{-mgp32} and @samp{-mfp32}.
120
121The @code{.set gp=64} and @code{.set fp=64} directives allow the size
122of registers to be changed for parts of an object. The default value is
123restored by @code{.set gp=default} and @code{.set fp=default}.
6349b5f4 124
252b5132
RH
125@item -mips16
126@itemx -no-mips16
127Generate code for the MIPS 16 processor. This is equivalent to putting
ad3fea08 128@code{.set mips16} at the start of the assembly file. @samp{-no-mips16}
252b5132
RH
129turns off this option.
130
e16bfa71
TS
131@item -msmartmips
132@itemx -mno-smartmips
133Enables the SmartMIPS extensions to the MIPS32 instruction set, which
134provides a number of new instructions which target smartcard and
135cryptographic applications. This is equivalent to putting
ad3fea08 136@code{.set smartmips} at the start of the assembly file.
e16bfa71
TS
137@samp{-mno-smartmips} turns off this option.
138
1f25f5d3
CD
139@item -mips3d
140@itemx -no-mips3d
141Generate code for the MIPS-3D Application Specific Extension.
142This tells the assembler to accept MIPS-3D instructions.
143@samp{-no-mips3d} turns off this option.
144
deec1734
CD
145@item -mdmx
146@itemx -no-mdmx
147Generate code for the MDMX Application Specific Extension.
148This tells the assembler to accept MDMX instructions.
149@samp{-no-mdmx} turns off this option.
150
2ef2b9ae
CF
151@item -mdsp
152@itemx -mno-dsp
8b082fb1
TS
153Generate code for the DSP Release 1 Application Specific Extension.
154This tells the assembler to accept DSP Release 1 instructions.
2ef2b9ae
CF
155@samp{-mno-dsp} turns off this option.
156
8b082fb1
TS
157@item -mdspr2
158@itemx -mno-dspr2
159Generate code for the DSP Release 2 Application Specific Extension.
160This option implies -mdsp.
161This tells the assembler to accept DSP Release 2 instructions.
162@samp{-mno-dspr2} turns off this option.
163
ef2e4d86
CF
164@item -mmt
165@itemx -mno-mt
166Generate code for the MT Application Specific Extension.
167This tells the assembler to accept MT instructions.
168@samp{-mno-mt} turns off this option.
169
6b76fefe 170@item -mfix7000
9ee72ff1 171@itemx -mno-fix7000
6b76fefe
CM
172Cause nops to be inserted if the read of the destination register
173of an mfhi or mflo instruction occurs in the following two instructions.
174
d766e8ec
RS
175@item -mfix-vr4120
176@itemx -no-mfix-vr4120
177Insert nops to work around certain VR4120 errata. This option is
178intended to be used on GCC-generated code: it is not designed to catch
179all problems in hand-written assembler code.
60b63b72 180
11db99f8
RS
181@item -mfix-vr4130
182@itemx -no-mfix-vr4130
183Insert nops to work around the VR4130 @samp{mflo}/@samp{mfhi} errata.
184
6a32d874
CM
185@item -mfix-24k
186@itemx -no-mfix-24k
187Insert nops to work around the 24K @samp{eret}/@samp{deret} errata.
188
252b5132
RH
189@item -m4010
190@itemx -no-m4010
191Generate code for the LSI @sc{r4010} chip. This tells the assembler to
192accept the @sc{r4010} specific instructions (@samp{addciu}, @samp{ffc},
193etc.), and to not schedule @samp{nop} instructions around accesses to
194the @samp{HI} and @samp{LO} registers. @samp{-no-m4010} turns off this
195option.
196
197@item -m4650
198@itemx -no-m4650
199Generate code for the MIPS @sc{r4650} chip. This tells the assembler to accept
200the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop}
201instructions around accesses to the @samp{HI} and @samp{LO} registers.
202@samp{-no-m4650} turns off this option.
203
204@itemx -m3900
205@itemx -no-m3900
206@itemx -m4100
207@itemx -no-m4100
208For each option @samp{-m@var{nnnn}}, generate code for the MIPS
209@sc{r@var{nnnn}} chip. This tells the assembler to accept instructions
210specific to that chip, and to schedule for that chip's hazards.
211
ec68c924 212@item -march=@var{cpu}
252b5132
RH
213Generate code for a particular MIPS cpu. It is exactly equivalent to
214@samp{-m@var{cpu}}, except that there are more value of @var{cpu}
215understood. Valid @var{cpu} value are:
216
217@quotation
2182000,
2193000,
2203900,
2214000,
2224010,
2234100,
2244111,
60b63b72
RS
225vr4120,
226vr4130,
227vr4181,
252b5132
RH
2284300,
2294400,
2304600,
2314650,
2325000,
b946ec34
NC
233rm5200,
234rm5230,
235rm5231,
236rm5261,
237rm5721,
60b63b72
RS
238vr5400,
239vr5500,
252b5132 2406000,
b946ec34 241rm7000,
252b5132 2428000,
963ac363 243rm9000,
e7af610e 24410000,
18ae5d72 24512000,
3aa3176b
TS
24614000,
24716000,
ad3fea08
TS
2484kc,
2494km,
2504kp,
2514ksc,
2524kec,
2534kem,
2544kep,
2554ksd,
256m4k,
257m4kp,
25824kc,
0fdf1951 25924kf2_1,
ad3fea08 26024kf,
0fdf1951 26124kf1_1,
ad3fea08 26224kec,
0fdf1951 26324kef2_1,
ad3fea08 26424kef,
0fdf1951 26524kef1_1,
ad3fea08 26634kc,
0fdf1951 26734kf2_1,
ad3fea08 26834kf,
0fdf1951 26934kf1_1,
f281862d 27074kc,
0fdf1951 27174kf2_1,
f281862d 27274kf,
0fdf1951
RS
27374kf1_1,
27474kf3_2,
30f8113a
SL
2751004kc,
2761004kf2_1,
2771004kf,
2781004kf1_1,
ad3fea08
TS
2795kc,
2805kf,
28120kc,
28225kf,
82100185 283sb1,
350cc38d
MS
284sb1a,
285loongson2e,
037b32b9 286loongson2f,
52b6b6b9
JM
287octeon,
288xlr
252b5132
RH
289@end quotation
290
0fdf1951
RS
291For compatibility reasons, @samp{@var{n}x} and @samp{@var{b}fx} are
292accepted as synonyms for @samp{@var{n}f1_1}. These values are
293deprecated.
294
ec68c924
EC
295@item -mtune=@var{cpu}
296Schedule and tune for a particular MIPS cpu. Valid @var{cpu} values are
297identical to @samp{-march=@var{cpu}}.
298
316f5878
RS
299@item -mabi=@var{abi}
300Record which ABI the source code uses. The recognized arguments
301are: @samp{32}, @samp{n32}, @samp{o64}, @samp{64} and @samp{eabi}.
252b5132 302
aed1a261
RS
303@item -msym32
304@itemx -mno-sym32
305@cindex -msym32
306@cindex -mno-sym32
307Equivalent to adding @code{.set sym32} or @code{.set nosym32} to
308the beginning of the assembler input. @xref{MIPS symbol sizes}.
309
252b5132
RH
310@cindex @code{-nocpp} ignored (MIPS)
311@item -nocpp
312This option is ignored. It is accepted for command-line compatibility with
313other assemblers, which use it to turn off C style preprocessing. With
314@sc{gnu} @code{@value{AS}}, there is no need for @samp{-nocpp}, because the
315@sc{gnu} assembler itself never runs the C preprocessor.
316
037b32b9
AN
317@item -msoft-float
318@itemx -mhard-float
319Disable or enable floating-point instructions. Note that by default
320floating-point instructions are always allowed even with CPU targets
321that don't have support for these instructions.
322
323@item -msingle-float
324@itemx -mdouble-float
325Disable or enable double-precision floating-point operations. Note
326that by default double-precision floating-point operations are always
327allowed even with CPU targets that don't have support for these
328operations.
329
119d663a
NC
330@item --construct-floats
331@itemx --no-construct-floats
119d663a
NC
332The @code{--no-construct-floats} option disables the construction of
333double width floating point constants by loading the two halves of the
334value into the two single width floating point registers that make up
335the double width register. This feature is useful if the processor
336support the FR bit in its status register, and this bit is known (by
337the programmer) to be set. This bit prevents the aliasing of the double
338width register by the single width registers.
339
63bf5651 340By default @code{--construct-floats} is selected, allowing construction
119d663a
NC
341of these floating point constants.
342
252b5132
RH
343@item --trap
344@itemx --no-break
345@c FIXME! (1) reflect these options (next item too) in option summaries;
346@c (2) stop teasing, say _which_ instructions expanded _how_.
347@code{@value{AS}} automatically macro expands certain division and
348multiplication instructions to check for overflow and division by zero. This
349option causes @code{@value{AS}} to generate code to take a trap exception
350rather than a break exception when an error is detected. The trap instructions
351are only supported at Instruction Set Architecture level 2 and higher.
352
353@item --break
354@itemx --no-trap
355Generate code to take a break exception rather than a trap exception when an
356error is detected. This is the default.
63486801 357
dcd410fe
RO
358@item -mpdr
359@itemx -mno-pdr
360Control generation of @code{.pdr} sections. Off by default on IRIX, on
361elsewhere.
aa6975fb
ILT
362
363@item -mshared
364@itemx -mno-shared
365When generating code using the Unix calling conventions (selected by
366@samp{-KPIC} or @samp{-mcall_shared}), gas will normally generate code
367which can go into a shared library. The @samp{-mno-shared} option
368tells gas to generate code which uses the calling convention, but can
369not go into a shared library. The resulting code is slightly more
370efficient. This option only affects the handling of the
371@samp{.cpload} and @samp{.cpsetup} pseudo-ops.
252b5132
RH
372@end table
373
374@node MIPS Object
375@section MIPS ECOFF object code
376
377@cindex ECOFF sections
378@cindex MIPS ECOFF sections
379Assembling for a @sc{mips} @sc{ecoff} target supports some additional sections
380besides the usual @code{.text}, @code{.data} and @code{.bss}. The
381additional sections are @code{.rdata}, used for read-only data,
382@code{.sdata}, used for small data, and @code{.sbss}, used for small
383common objects.
384
385@cindex small objects, MIPS ECOFF
386@cindex @code{gp} register, MIPS
387When assembling for @sc{ecoff}, the assembler uses the @code{$gp} (@code{$28})
388register to form the address of a ``small object''. Any object in the
389@code{.sdata} or @code{.sbss} sections is considered ``small'' in this sense.
390For external objects, or for objects in the @code{.bss} section, you can use
391the @code{@value{GCC}} @samp{-G} option to control the size of objects addressed via
392@code{$gp}; the default value is 8, meaning that a reference to any object
393eight bytes or smaller uses @code{$gp}. Passing @samp{-G 0} to
394@code{@value{AS}} prevents it from using the @code{$gp} register on the basis
395of object size (but the assembler uses @code{$gp} for objects in @code{.sdata}
396or @code{sbss} in any case). The size of an object in the @code{.bss} section
397is set by the @code{.comm} or @code{.lcomm} directive that defines it. The
398size of an external object may be set with the @code{.extern} directive. For
399example, @samp{.extern sym,4} declares that the object at @code{sym} is 4 bytes
400in length, whie leaving @code{sym} otherwise undefined.
401
402Using small @sc{ecoff} objects requires linker support, and assumes that the
403@code{$gp} register is correctly initialized (normally done automatically by
404the startup code). @sc{mips} @sc{ecoff} assembly code must not modify the
405@code{$gp} register.
406
407@node MIPS Stabs
408@section Directives for debugging information
409
410@cindex MIPS debugging directives
411@sc{mips} @sc{ecoff} @code{@value{AS}} supports several directives used for
412generating debugging information which are not support by traditional @sc{mips}
413assemblers. These are @code{.def}, @code{.endef}, @code{.dim}, @code{.file},
414@code{.scl}, @code{.size}, @code{.tag}, @code{.type}, @code{.val},
415@code{.stabd}, @code{.stabn}, and @code{.stabs}. The debugging information
416generated by the three @code{.stab} directives can only be read by @sc{gdb},
417not by traditional @sc{mips} debuggers (this enhancement is required to fully
418support C++ debugging). These directives are primarily used by compilers, not
419assembly language programmers!
420
aed1a261
RS
421@node MIPS symbol sizes
422@section Directives to override the size of symbols
423
424@cindex @code{.set sym32}
425@cindex @code{.set nosym32}
426The n64 ABI allows symbols to have any 64-bit value. Although this
427provides a great deal of flexibility, it means that some macros have
428much longer expansions than their 32-bit counterparts. For example,
429the non-PIC expansion of @samp{dla $4,sym} is usually:
430
431@smallexample
432lui $4,%highest(sym)
433lui $1,%hi(sym)
434daddiu $4,$4,%higher(sym)
435daddiu $1,$1,%lo(sym)
436dsll32 $4,$4,0
437daddu $4,$4,$1
438@end smallexample
439
440whereas the 32-bit expansion is simply:
441
442@smallexample
443lui $4,%hi(sym)
444daddiu $4,$4,%lo(sym)
445@end smallexample
446
447n64 code is sometimes constructed in such a way that all symbolic
448constants are known to have 32-bit values, and in such cases, it's
449preferable to use the 32-bit expansion instead of the 64-bit
450expansion.
451
452You can use the @code{.set sym32} directive to tell the assembler
453that, from this point on, all expressions of the form
454@samp{@var{symbol}} or @samp{@var{symbol} + @var{offset}}
455have 32-bit values. For example:
456
457@smallexample
458.set sym32
459dla $4,sym
460lw $4,sym+16
461sw $4,sym+0x8000($4)
462@end smallexample
463
464will cause the assembler to treat @samp{sym}, @code{sym+16} and
465@code{sym+0x8000} as 32-bit values. The handling of non-symbolic
466addresses is not affected.
467
468The directive @code{.set nosym32} ends a @code{.set sym32} block and
469reverts to the normal behavior. It is also possible to change the
470symbol size using the command-line options @option{-msym32} and
471@option{-mno-sym32}.
472
473These options and directives are always accepted, but at present,
474they have no effect for anything other than n64.
475
252b5132
RH
476@node MIPS ISA
477@section Directives to override the ISA level
478
479@cindex MIPS ISA override
480@kindex @code{.set mips@var{n}}
481@sc{gnu} @code{@value{AS}} supports an additional directive to change
482the @sc{mips} Instruction Set Architecture level on the fly: @code{.set
5f74bc13
CD
483mips@var{n}}. @var{n} should be a number from 0 to 5, or 32, 32r2, 64
484or 64r2.
071742cf 485The values other than 0 make the assembler accept instructions
584da044
NC
486for the corresponding @sc{isa} level, from that point on in the
487assembly. @code{.set mips@var{n}} affects not only which instructions
488are permitted, but also how certain macros are expanded. @code{.set
489mips0} restores the @sc{isa} level to its original level: either the
490level you selected with command line options, or the default for your
ad3fea08 491configuration. You can use this feature to permit specific @sc{mips3}
584da044 492instructions while assembling in 32 bit mode. Use this directive with
ec68c924 493care!
252b5132 494
ad3fea08
TS
495@cindex MIPS CPU override
496@kindex @code{.set arch=@var{cpu}}
497The @code{.set arch=@var{cpu}} directive provides even finer control.
498It changes the effective CPU target and allows the assembler to use
499instructions specific to a particular CPU. All CPUs supported by the
500@samp{-march} command line option are also selectable by this directive.
501The original value is restored by @code{.set arch=default}.
252b5132 502
ad3fea08
TS
503The directive @code{.set mips16} puts the assembler into MIPS 16 mode,
504in which it will assemble instructions for the MIPS 16 processor. Use
505@code{.set nomips16} to return to normal 32 bit mode.
e16bfa71 506
ec68c924 507Traditional @sc{mips} assemblers do not support this directive.
252b5132
RH
508
509@node MIPS autoextend
510@section Directives for extending MIPS 16 bit instructions
511
512@kindex @code{.set autoextend}
513@kindex @code{.set noautoextend}
514By default, MIPS 16 instructions are automatically extended to 32 bits
ad3fea08
TS
515when necessary. The directive @code{.set noautoextend} will turn this
516off. When @code{.set noautoextend} is in effect, any 32 bit instruction
517must be explicitly extended with the @code{.e} modifier (e.g.,
518@code{li.e $4,1000}). The directive @code{.set autoextend} may be used
252b5132
RH
519to once again automatically extend instructions when necessary.
520
521This directive is only meaningful when in MIPS 16 mode. Traditional
522@sc{mips} assemblers do not support this directive.
523
524@node MIPS insn
525@section Directive to mark data as an instruction
526
527@kindex @code{.insn}
528The @code{.insn} directive tells @code{@value{AS}} that the following
529data is actually instructions. This makes a difference in MIPS 16 mode:
530when loading the address of a label which precedes instructions,
531@code{@value{AS}} automatically adds 1 to the value, so that jumping to
532the loaded address will do the right thing.
533
a946d7e3
NC
534@kindex @code{.global}
535The @code{.global} and @code{.globl} directives supported by
536@code{@value{AS}} will by default mark the symbol as pointing to a
537region of data not code. This means that, for example, any
538instructions following such a symbol will not be disassembled by
f746e6b9 539@code{objdump} as it will regard them as data. To change this
a946d7e3
NC
540behaviour an optional section name can be placed after the symbol name
541in the @code{.global} directive. If this section exists and is known
542to be a code section, then the symbol will be marked as poiting at
543code not data. Ie the syntax for the directive is:
544
545 @code{.global @var{symbol}[ @var{section}][, @var{symbol}[ @var{section}]] ...},
546
547Here is a short example:
548
549@example
550 .global foo .text, bar, baz .data
551foo:
552 nop
553bar:
554 .word 0x0
555baz:
556 .word 0x1
557
558@end example
559
252b5132
RH
560@node MIPS option stack
561@section Directives to save and restore options
562
563@cindex MIPS option stack
564@kindex @code{.set push}
565@kindex @code{.set pop}
566The directives @code{.set push} and @code{.set pop} may be used to save
567and restore the current settings for all the options which are
568controlled by @code{.set}. The @code{.set push} directive saves the
569current settings on a stack. The @code{.set pop} directive pops the
570stack and restores the settings.
571
572These directives can be useful inside an macro which must change an
573option such as the ISA level or instruction reordering but does not want
574to change the state of the code which invoked the macro.
575
576Traditional @sc{mips} assemblers do not support these directives.
1f25f5d3
CD
577
578@node MIPS ASE instruction generation overrides
579@section Directives to control generation of MIPS ASE instructions
580
581@cindex MIPS MIPS-3D instruction generation override
582@kindex @code{.set mips3d}
583@kindex @code{.set nomips3d}
584The directive @code{.set mips3d} makes the assembler accept instructions
585from the MIPS-3D Application Specific Extension from that point on
586in the assembly. The @code{.set nomips3d} directive prevents MIPS-3D
587instructions from being accepted.
588
ad3fea08
TS
589@cindex SmartMIPS instruction generation override
590@kindex @code{.set smartmips}
591@kindex @code{.set nosmartmips}
592The directive @code{.set smartmips} makes the assembler accept
593instructions from the SmartMIPS Application Specific Extension to the
594MIPS32 @sc{isa} from that point on in the assembly. The
595@code{.set nosmartmips} directive prevents SmartMIPS instructions from
596being accepted.
597
deec1734
CD
598@cindex MIPS MDMX instruction generation override
599@kindex @code{.set mdmx}
600@kindex @code{.set nomdmx}
601The directive @code{.set mdmx} makes the assembler accept instructions
602from the MDMX Application Specific Extension from that point on
603in the assembly. The @code{.set nomdmx} directive prevents MDMX
604instructions from being accepted.
605
8b082fb1 606@cindex MIPS DSP Release 1 instruction generation override
2ef2b9ae
CF
607@kindex @code{.set dsp}
608@kindex @code{.set nodsp}
609The directive @code{.set dsp} makes the assembler accept instructions
8b082fb1
TS
610from the DSP Release 1 Application Specific Extension from that point
611on in the assembly. The @code{.set nodsp} directive prevents DSP
612Release 1 instructions from being accepted.
613
614@cindex MIPS DSP Release 2 instruction generation override
615@kindex @code{.set dspr2}
616@kindex @code{.set nodspr2}
617The directive @code{.set dspr2} makes the assembler accept instructions
618from the DSP Release 2 Application Specific Extension from that point
619on in the assembly. This dirctive implies @code{.set dsp}. The
620@code{.set nodspr2} directive prevents DSP Release 2 instructions from
621being accepted.
2ef2b9ae 622
ef2e4d86
CF
623@cindex MIPS MT instruction generation override
624@kindex @code{.set mt}
625@kindex @code{.set nomt}
626The directive @code{.set mt} makes the assembler accept instructions
627from the MT Application Specific Extension from that point on
628in the assembly. The @code{.set nomt} directive prevents MT
629instructions from being accepted.
630
1f25f5d3 631Traditional @sc{mips} assemblers do not support these directives.
037b32b9
AN
632
633@node MIPS floating-point
634@section Directives to override floating-point options
635
636@cindex Disable floating-point instructions
637@kindex @code{.set softfloat}
638@kindex @code{.set hardfloat}
639The directives @code{.set softfloat} and @code{.set hardfloat} provide
640finer control of disabling and enabling float-point instructions.
641These directives always override the default (that hard-float
642instructions are accepted) or the command-line options
643(@samp{-msoft-float} and @samp{-mhard-float}).
644
645@cindex Disable single-precision floating-point operations
646@kindex @code{.set softfloat}
647@kindex @code{.set hardfloat}
648The directives @code{.set singlefloat} and @code{.set doublefloat}
649provide finer control of disabling and enabling double-precision
650float-point operations. These directives always override the default
651(that double-precision operations are accepted) or the command-line
652options (@samp{-msingle-float} and @samp{-mdouble-float}).
653
654Traditional @sc{mips} assemblers do not support these directives.