1 @c Copyright (C) 1991-2014 Free Software Foundation, Inc. 2 @c This is part of the GAS manual. 3 @c For copying conditions, see the file as.texinfo. 4 @ifset GENERIC 5 @page 6 @node MIPS-Dependent 7 @chapter MIPS Dependent Features 8 @end ifset 9 @ifclear GENERIC 10 @node Machine Dependencies 11 @chapter MIPS Dependent Features 12 @end ifclear 13 14 @cindex MIPS processor 15 @sc{gnu} @code{@value{AS}} for MIPS architectures supports several 16 different MIPS processors, and MIPS ISA levels I through V, MIPS32, 17 and MIPS64. For information about the MIPS instruction set, see 18 @cite{MIPS RISC Architecture}, by Kane and Heindrich (Prentice-Hall). 19 For an overview of MIPS assembly conventions, see ``Appendix D: 20 Assembly Language Programming'' in the same work. 21 22 @menu 23 * MIPS Options:: Assembler options 24 * MIPS Macros:: High-level assembly macros 25 * MIPS Symbol Sizes:: Directives to override the size of symbols 26 * MIPS Small Data:: Controlling the use of small data accesses 27 * MIPS ISA:: Directives to override the ISA level 28 * MIPS assembly options:: Directives to control code generation 29 * MIPS autoextend:: Directives for extending MIPS 16 bit instructions 30 * MIPS insn:: Directive to mark data as an instruction 31 * MIPS FP ABIs:: Marking which FP ABI is in use 32 * MIPS NaN Encodings:: Directives to record which NaN encoding is being used 33 * MIPS Option Stack:: Directives to save and restore options 34 * MIPS ASE Instruction Generation Overrides:: Directives to control 35 generation of MIPS ASE instructions 36 * MIPS Floating-Point:: Directives to override floating-point options 37 * MIPS Syntax:: MIPS specific syntactical considerations 38 @end menu 39 40 @node MIPS Options 41 @section Assembler options 42 43 The MIPS configurations of @sc{gnu} @code{@value{AS}} support these 44 special options: 45 46 @table @code 47 @cindex @code{-G} option (MIPS) 48 @item -G @var{num} 49 Set the ``small data'' limit to @var{n} bytes. The default limit is 8 bytes. 50 @xref{MIPS Small Data,, Controlling the use of small data accesses}. 51 52 @cindex @code{-EB} option (MIPS) 53 @cindex @code{-EL} option (MIPS) 54 @cindex MIPS big-endian output 55 @cindex MIPS little-endian output 56 @cindex big-endian output, MIPS 57 @cindex little-endian output, MIPS 58 @item -EB 59 @itemx -EL 60 Any MIPS configuration of @code{@value{AS}} can select big-endian or 61 little-endian output at run time (unlike the other @sc{gnu} development 62 tools, which must be configured for one or the other). Use @samp{-EB} 63 to select big-endian output, and @samp{-EL} for little-endian. 64 65 @item -KPIC 66 @cindex PIC selection, MIPS 67 @cindex @option{-KPIC} option, MIPS 68 Generate SVR4-style PIC. This option tells the assembler to generate 69 SVR4-style position-independent macro expansions. It also tells the 70 assembler to mark the output file as PIC. 71 72 @item -mvxworks-pic 73 @cindex @option{-mvxworks-pic} option, MIPS 74 Generate VxWorks PIC. This option tells the assembler to generate 75 VxWorks-style position-independent macro expansions. 76 77 @cindex MIPS architecture options 78 @item -mips1 79 @itemx -mips2 80 @itemx -mips3 81 @itemx -mips4 82 @itemx -mips5 83 @itemx -mips32 84 @itemx -mips32r2 85 @itemx -mips32r3 86 @itemx -mips32r5 87 @itemx -mips32r6 88 @itemx -mips64 89 @itemx -mips64r2 90 @itemx -mips64r3 91 @itemx -mips64r5 92 @itemx -mips64r6 93 Generate code for a particular MIPS Instruction Set Architecture level. 94 @samp{-mips1} corresponds to the R2000 and R3000 processors, 95 @samp{-mips2} to the R6000 processor, @samp{-mips3} to the 96 R4000 processor, and @samp{-mips4} to the R8000 and R10000 processors. 97 @samp{-mips5}, @samp{-mips32}, @samp{-mips32r2}, @samp{-mips32r3}, 98 @samp{-mips32r5}, @samp{-mips32r6}, @samp{-mips64}, @samp{-mips64r2}, 99 @samp{-mips64r3}, @samp{-mips64r5}, and @samp{-mips64r6} correspond to 100 generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32 Release 3, MIPS32 101 Release 5, MIPS32 Release 6, MIPS64, and MIPS64 Release 2, MIPS64 102 Release 3, MIPS64 Release 5, and MIPS64 Release 6 ISA processors, 103 respectively. You can also switch instruction sets during the assembly; 104 see @ref{MIPS ISA, Directives to override the ISA level}. 105 106 @item -mgp32 107 @itemx -mfp32 108 Some macros have different expansions for 32-bit and 64-bit registers. 109 The register sizes are normally inferred from the ISA and ABI, but these 110 flags force a certain group of registers to be treated as 32 bits wide at 111 all times. @samp{-mgp32} controls the size of general-purpose registers 112 and @samp{-mfp32} controls the size of floating-point registers. 113 114 The @code{.set gp=32} and @code{.set fp=32} directives allow the size 115 of registers to be changed for parts of an object. The default value is 116 restored by @code{.set gp=default} and @code{.set fp=default}. 117 118 On some MIPS variants there is a 32-bit mode flag; when this flag is 119 set, 64-bit instructions generate a trap. Also, some 32-bit OSes only 120 save the 32-bit registers on a context switch, so it is essential never 121 to use the 64-bit registers. 122 123 @item -mgp64 124 @itemx -mfp64 125 Assume that 64-bit registers are available. This is provided in the 126 interests of symmetry with @samp{-mgp32} and @samp{-mfp32}. 127 128 The @code{.set gp=64} and @code{.set fp=64} directives allow the size 129 of registers to be changed for parts of an object. The default value is 130 restored by @code{.set gp=default} and @code{.set fp=default}. 131 132 @item -mfpxx 133 Make no assumptions about whether 32-bit or 64-bit floating-point 134 registers are available. This is provided to support having modules 135 compatible with either @samp{-mfp32} or @samp{-mfp64}. This option can 136 only be used with MIPS II and above. 137 138 The @code{.set fp=xx} directive allows a part of an object to be marked 139 as not making assumptions about 32-bit or 64-bit FP registers. The 140 default value is restored by @code{.set fp=default}. 141 142 @item -modd-spreg 143 @itemx -mno-odd-spreg 144 Enable use of floating-point operations on odd-numbered single-precision 145 registers when supported by the ISA. @samp{-mfpxx} implies 146 @samp{-mno-odd-spreg}, otherwise the default is @samp{-modd-spreg} 147 148 @item -mips16 149 @itemx -no-mips16 150 Generate code for the MIPS 16 processor. This is equivalent to putting 151 @code{.set mips16} at the start of the assembly file. @samp{-no-mips16} 152 turns off this option. 153 154 @item -mmicromips 155 @itemx -mno-micromips 156 Generate code for the microMIPS processor. This is equivalent to putting 157 @code{.set micromips} at the start of the assembly file. @samp{-mno-micromips} 158 turns off this option. This is equivalent to putting @code{.set nomicromips} 159 at the start of the assembly file. 160 161 @item -msmartmips 162 @itemx -mno-smartmips 163 Enables the SmartMIPS extensions to the MIPS32 instruction set, which 164 provides a number of new instructions which target smartcard and 165 cryptographic applications. This is equivalent to putting 166 @code{.set smartmips} at the start of the assembly file. 167 @samp{-mno-smartmips} turns off this option. 168 169 @item -mips3d 170 @itemx -no-mips3d 171 Generate code for the MIPS-3D Application Specific Extension. 172 This tells the assembler to accept MIPS-3D instructions. 173 @samp{-no-mips3d} turns off this option. 174 175 @item -mdmx 176 @itemx -no-mdmx 177 Generate code for the MDMX Application Specific Extension. 178 This tells the assembler to accept MDMX instructions. 179 @samp{-no-mdmx} turns off this option. 180 181 @item -mdsp 182 @itemx -mno-dsp 183 Generate code for the DSP Release 1 Application Specific Extension. 184 This tells the assembler to accept DSP Release 1 instructions. 185 @samp{-mno-dsp} turns off this option. 186 187 @item -mdspr2 188 @itemx -mno-dspr2 189 Generate code for the DSP Release 2 Application Specific Extension. 190 This option implies -mdsp. 191 This tells the assembler to accept DSP Release 2 instructions. 192 @samp{-mno-dspr2} turns off this option. 193 194 @item -mmt 195 @itemx -mno-mt 196 Generate code for the MT Application Specific Extension. 197 This tells the assembler to accept MT instructions. 198 @samp{-mno-mt} turns off this option. 199 200 @item -mmcu 201 @itemx -mno-mcu 202 Generate code for the MCU Application Specific Extension. 203 This tells the assembler to accept MCU instructions. 204 @samp{-mno-mcu} turns off this option. 205 206 @item -mmsa 207 @itemx -mno-msa 208 Generate code for the MIPS SIMD Architecture Extension. 209 This tells the assembler to accept MSA instructions. 210 @samp{-mno-msa} turns off this option. 211 212 @item -mxpa 213 @itemx -mno-xpa 214 Generate code for the MIPS eXtended Physical Address (XPA) Extension. 215 This tells the assembler to accept XPA instructions. 216 @samp{-mno-xpa} turns off this option. 217 218 @item -mmxu 219 @itemx -mno-mxu 220 Generate code for the XBurst MXU Extension. 221 This tells the assembler to accept MXU instructions. 222 @samp{-mno-mxu} turns off this option. 223 224 @item -mvirt 225 @itemx -mno-virt 226 Generate code for the Virtualization Application Specific Extension. 227 This tells the assembler to accept Virtualization instructions. 228 @samp{-mno-virt} turns off this option. 229 230 @item -minsn32 231 @itemx -mno-insn32 232 Only use 32-bit instruction encodings when generating code for the 233 microMIPS processor. This option inhibits the use of any 16-bit 234 instructions. This is equivalent to putting @code{.set insn32} at 235 the start of the assembly file. @samp{-mno-insn32} turns off this 236 option. This is equivalent to putting @code{.set noinsn32} at the 237 start of the assembly file. By default @samp{-mno-insn32} is 238 selected, allowing all instructions to be used. 239 240 @item -mfix7000 241 @itemx -mno-fix7000 242 Cause nops to be inserted if the read of the destination register 243 of an mfhi or mflo instruction occurs in the following two instructions. 244 245 @item -mfix-rm7000 246 @itemx -mno-fix-rm7000 247 Cause nops to be inserted if a dmult or dmultu instruction is 248 followed by a load instruction. 249 250 @item -mfix-loongson2f-jump 251 @itemx -mno-fix-loongson2f-jump 252 Eliminate instruction fetch from outside 256M region to work around the 253 Loongson2F @samp{jump} instructions. Without it, under extreme cases, 254 the kernel may crash. The issue has been solved in latest processor 255 batches, but this fix has no side effect to them. 256 257 @item -mfix-loongson2f-nop 258 @itemx -mno-fix-loongson2f-nop 259 Replace nops by @code{or at,at,zero} to work around the Loongson2F 260 @samp{nop} errata. Without it, under extreme cases, the CPU might 261 deadlock. The issue has been solved in later Loongson2F batches, but 262 this fix has no side effect to them. 263 264 @item -mfix-vr4120 265 @itemx -mno-fix-vr4120 266 Insert nops to work around certain VR4120 errata. This option is 267 intended to be used on GCC-generated code: it is not designed to catch 268 all problems in hand-written assembler code. 269 270 @item -mfix-vr4130 271 @itemx -mno-fix-vr4130 272 Insert nops to work around the VR4130 @samp{mflo}/@samp{mfhi} errata. 273 274 @item -mfix-24k 275 @itemx -mno-fix-24k 276 Insert nops to work around the 24K @samp{eret}/@samp{deret} errata. 277 278 @item -mfix-cn63xxp1 279 @itemx -mno-fix-cn63xxp1 280 Replace @code{pref} hints 0 - 4 and 6 - 24 with hint 28 to work around 281 certain CN63XXP1 errata. 282 283 @item -m4010 284 @itemx -no-m4010 285 Generate code for the LSI R4010 chip. This tells the assembler to 286 accept the R4010-specific instructions (@samp{addciu}, @samp{ffc}, 287 etc.), and to not schedule @samp{nop} instructions around accesses to 288 the @samp{HI} and @samp{LO} registers. @samp{-no-m4010} turns off this 289 option. 290 291 @item -m4650 292 @itemx -no-m4650 293 Generate code for the MIPS R4650 chip. This tells the assembler to accept 294 the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop} 295 instructions around accesses to the @samp{HI} and @samp{LO} registers. 296 @samp{-no-m4650} turns off this option. 297 298 @item -m3900 299 @itemx -no-m3900 300 @itemx -m4100 301 @itemx -no-m4100 302 For each option @samp{-m@var{nnnn}}, generate code for the MIPS 303 R@var{nnnn} chip. This tells the assembler to accept instructions 304 specific to that chip, and to schedule for that chip's hazards. 305 306 @item -march=@var{cpu} 307 Generate code for a particular MIPS CPU. It is exactly equivalent to 308 @samp{-m@var{cpu}}, except that there are more value of @var{cpu} 309 understood. Valid @var{cpu} value are: 310 311 @quotation 312 2000, 313 3000, 314 3900, 315 4000, 316 4010, 317 4100, 318 4111, 319 vr4120, 320 vr4130, 321 vr4181, 322 4300, 323 4400, 324 4600, 325 4650, 326 5000, 327 rm5200, 328 rm5230, 329 rm5231, 330 rm5261, 331 rm5721, 332 vr5400, 333 vr5500, 334 6000, 335 rm7000, 336 8000, 337 rm9000, 338 10000, 339 12000, 340 14000, 341 16000, 342 4kc, 343 4km, 344 4kp, 345 4ksc, 346 4kec, 347 4kem, 348 4kep, 349 4ksd, 350 m4k, 351 m4kp, 352 m14k, 353 m14kc, 354 m14ke, 355 m14kec, 356 24kc, 357 24kf2_1, 358 24kf, 359 24kf1_1, 360 24kec, 361 24kef2_1, 362 24kef, 363 24kef1_1, 364 34kc, 365 34kf2_1, 366 34kf, 367 34kf1_1, 368 34kn, 369 74kc, 370 74kf2_1, 371 74kf, 372 74kf1_1, 373 74kf3_2, 374 1004kc, 375 1004kf2_1, 376 1004kf, 377 1004kf1_1, 378 p5600, 379 5kc, 380 5kf, 381 20kc, 382 25kf, 383 sb1, 384 sb1a, 385 loongson2e, 386 loongson2f, 387 loongson3a, 388 octeon, 389 octeon+, 390 octeon2, 391 octeon3, 392 xlr, 393 xlp 394 @end quotation 395 396 For compatibility reasons, @samp{@var{n}x} and @samp{@var{b}fx} are 397 accepted as synonyms for @samp{@var{n}f1_1}. These values are 398 deprecated. 399 400 @item -mtune=@var{cpu} 401 Schedule and tune for a particular MIPS CPU. Valid @var{cpu} values are 402 identical to @samp{-march=@var{cpu}}. 403 404 @item -mabi=@var{abi} 405 Record which ABI the source code uses. The recognized arguments 406 are: @samp{32}, @samp{n32}, @samp{o64}, @samp{64} and @samp{eabi}. 407 408 @item -msym32 409 @itemx -mno-sym32 410 @cindex -msym32 411 @cindex -mno-sym32 412 Equivalent to adding @code{.set sym32} or @code{.set nosym32} to 413 the beginning of the assembler input. @xref{MIPS Symbol Sizes}. 414 415 @cindex @code{-nocpp} ignored (MIPS) 416 @item -nocpp 417 This option is ignored. It is accepted for command-line compatibility with 418 other assemblers, which use it to turn off C style preprocessing. With 419 @sc{gnu} @code{@value{AS}}, there is no need for @samp{-nocpp}, because the 420 @sc{gnu} assembler itself never runs the C preprocessor. 421 422 @item -msoft-float 423 @itemx -mhard-float 424 Disable or enable floating-point instructions. Note that by default 425 floating-point instructions are always allowed even with CPU targets 426 that don't have support for these instructions. 427 428 @item -msingle-float 429 @itemx -mdouble-float 430 Disable or enable double-precision floating-point operations. Note 431 that by default double-precision floating-point operations are always 432 allowed even with CPU targets that don't have support for these 433 operations. 434 435 @item --construct-floats 436 @itemx --no-construct-floats 437 The @code{--no-construct-floats} option disables the construction of 438 double width floating point constants by loading the two halves of the 439 value into the two single width floating point registers that make up 440 the double width register. This feature is useful if the processor 441 support the FR bit in its status register, and this bit is known (by 442 the programmer) to be set. This bit prevents the aliasing of the double 443 width register by the single width registers. 444 445 By default @code{--construct-floats} is selected, allowing construction 446 of these floating point constants. 447 448 @item --relax-branch 449 @itemx --no-relax-branch 450 The @samp{--relax-branch} option enables the relaxation of out-of-range 451 branches. Any branches whose target cannot be reached directly are 452 converted to a small instruction sequence including an inverse-condition 453 branch to the physically next instruction, and a jump to the original 454 target is inserted between the two instructions. In PIC code the jump 455 will involve further instructions for address calculation. 456 457 The @code{BC1ANY2F}, @code{BC1ANY2T}, @code{BC1ANY4F}, @code{BC1ANY4T}, 458 @code{BPOSGE32} and @code{BPOSGE64} instructions are excluded from 459 relaxation, because they have no complementing counterparts. They could 460 be relaxed with the use of a longer sequence involving another branch, 461 however this has not been implemented and if their target turns out of 462 reach, they produce an error even if branch relaxation is enabled. 463 464 Also no MIPS16 branches are ever relaxed. 465 466 By default @samp{--no-relax-branch} is selected, causing any out-of-range 467 branches to produce an error. 468 469 @cindex @option{-mnan=} command line option, MIPS 470 @item -mnan=@var{encoding} 471 This option indicates whether the source code uses the IEEE 2008 472 NaN encoding (@option{-mnan=2008}) or the original MIPS encoding 473 (@option{-mnan=legacy}). It is equivalent to adding a @code{.nan} 474 directive to the beginning of the source file. @xref{MIPS NaN Encodings}. 475 476 @option{-mnan=legacy} is the default if no @option{-mnan} option or 477 @code{.nan} directive is used. 478 479 @item --trap 480 @itemx --no-break 481 @c FIXME! (1) reflect these options (next item too) in option summaries; 482 @c (2) stop teasing, say _which_ instructions expanded _how_. 483 @code{@value{AS}} automatically macro expands certain division and 484 multiplication instructions to check for overflow and division by zero. This 485 option causes @code{@value{AS}} to generate code to take a trap exception 486 rather than a break exception when an error is detected. The trap instructions 487 are only supported at Instruction Set Architecture level 2 and higher. 488 489 @item --break 490 @itemx --no-trap 491 Generate code to take a break exception rather than a trap exception when an 492 error is detected. This is the default. 493 494 @item -mpdr 495 @itemx -mno-pdr 496 Control generation of @code{.pdr} sections. Off by default on IRIX, on 497 elsewhere. 498 499 @item -mshared 500 @itemx -mno-shared 501 When generating code using the Unix calling conventions (selected by 502 @samp{-KPIC} or @samp{-mcall_shared}), gas will normally generate code 503 which can go into a shared library. The @samp{-mno-shared} option 504 tells gas to generate code which uses the calling convention, but can 505 not go into a shared library. The resulting code is slightly more 506 efficient. This option only affects the handling of the 507 @samp{.cpload} and @samp{.cpsetup} pseudo-ops. 508 @end table 509 510 @node MIPS Macros 511 @section High-level assembly macros 512 513 MIPS assemblers have traditionally provided a wider range of 514 instructions than the MIPS architecture itself. These extra 515 instructions are usually referred to as ``macro'' instructions 516 @footnote{The term ``macro'' is somewhat overloaded here, since 517 these macros have no relation to those defined by @code{.macro}, 518 @pxref{Macro,, @code{.macro}}.}. 519 520 Some MIPS macro instructions extend an underlying architectural instruction 521 while others are entirely new. An example of the former type is @code{and}, 522 which allows the third operand to be either a register or an arbitrary 523 immediate value. Examples of the latter type include @code{bgt}, which 524 branches to the third operand when the first operand is greater than 525 the second operand, and @code{ulh}, which implements an unaligned 526 2-byte load. 527 528 One of the most common extensions provided by macros is to expand 529 memory offsets to the full address range (32 or 64 bits) and to allow 530 symbolic offsets such as @samp{my_data + 4} to be used in place of 531 integer constants. For example, the architectural instruction 532 @code{lbu} allows only a signed 16-bit offset, whereas the macro 533 @code{lbu} allows code such as @samp{lbu $4,array+32769($5)}. 534 The implementation of these symbolic offsets depends on several factors, 535 such as whether the assembler is generating SVR4-style PIC (selected by 536 @option{-KPIC}, @pxref{MIPS Options,, Assembler options}), the size of symbols 537 (@pxref{MIPS Symbol Sizes,, Directives to override the size of symbols}), 538 and the small data limit (@pxref{MIPS Small Data,, Controlling the use 539 of small data accesses}). 540 541 @kindex @code{.set macro} 542 @kindex @code{.set nomacro} 543 Sometimes it is undesirable to have one assembly instruction expand 544 to several machine instructions. The directive @code{.set nomacro} 545 tells the assembler to warn when this happens. @code{.set macro} 546 restores the default behavior. 547 548 @cindex @code{at} register, MIPS 549 @kindex @code{.set at=@var{reg}} 550 Some macro instructions need a temporary register to store intermediate 551 results. This register is usually @code{$1}, also known as @code{$at}, 552 but it can be changed to any core register @var{reg} using 553 @code{.set at=@var{reg}}. Note that @code{$at} always refers 554 to @code{$1} regardless of which register is being used as the 555 temporary register. 556 557 @kindex @code{.set at} 558 @kindex @code{.set noat} 559 Implicit uses of the temporary register in macros could interfere with 560 explicit uses in the assembly code. The assembler therefore warns 561 whenever it sees an explicit use of the temporary register. The directive 562 @code{.set noat} silences this warning while @code{.set at} restores 563 the default behavior. It is safe to use @code{.set noat} while 564 @code{.set nomacro} is in effect since single-instruction macros 565 never need a temporary register. 566 567 Note that while the @sc{gnu} assembler provides these macros for compatibility, 568 it does not make any attempt to optimize them with the surrounding code. 569 570 @node MIPS Symbol Sizes 571 @section Directives to override the size of symbols 572 573 @kindex @code{.set sym32} 574 @kindex @code{.set nosym32} 575 The n64 ABI allows symbols to have any 64-bit value. Although this 576 provides a great deal of flexibility, it means that some macros have 577 much longer expansions than their 32-bit counterparts. For example, 578 the non-PIC expansion of @samp{dla $4,sym} is usually: 579 580 @smallexample 581 lui $4,%highest(sym) 582 lui $1,%hi(sym) 583 daddiu $4,$4,%higher(sym) 584 daddiu $1,$1,%lo(sym) 585 dsll32 $4,$4,0 586 daddu $4,$4,$1 587 @end smallexample 588 589 whereas the 32-bit expansion is simply: 590 591 @smallexample 592 lui $4,%hi(sym) 593 daddiu $4,$4,%lo(sym) 594 @end smallexample 595 596 n64 code is sometimes constructed in such a way that all symbolic 597 constants are known to have 32-bit values, and in such cases, it's 598 preferable to use the 32-bit expansion instead of the 64-bit 599 expansion. 600 601 You can use the @code{.set sym32} directive to tell the assembler 602 that, from this point on, all expressions of the form 603 @samp{@var{symbol}} or @samp{@var{symbol} + @var{offset}} 604 have 32-bit values. For example: 605 606 @smallexample 607 .set sym32 608 dla $4,sym 609 lw $4,sym+16 610 sw $4,sym+0x8000($4) 611 @end smallexample 612 613 will cause the assembler to treat @samp{sym}, @code{sym+16} and 614 @code{sym+0x8000} as 32-bit values. The handling of non-symbolic 615 addresses is not affected. 616 617 The directive @code{.set nosym32} ends a @code{.set sym32} block and 618 reverts to the normal behavior. It is also possible to change the 619 symbol size using the command-line options @option{-msym32} and 620 @option{-mno-sym32}. 621 622 These options and directives are always accepted, but at present, 623 they have no effect for anything other than n64. 624 625 @node MIPS Small Data 626 @section Controlling the use of small data accesses 627 628 @c This section deliberately glosses over the possibility of using -G 629 @c in SVR4-style PIC, as could be done on IRIX. We don't support that. 630 @cindex small data, MIPS 631 @cindex @code{gp} register, MIPS 632 It often takes several instructions to load the address of a symbol. 633 For example, when @samp{addr} is a 32-bit symbol, the non-PIC expansion 634 of @samp{dla $4,addr} is usually: 635 636 @smallexample 637 lui $4,%hi(addr) 638 daddiu $4,$4,%lo(addr) 639 @end smallexample 640 641 The sequence is much longer when @samp{addr} is a 64-bit symbol. 642 @xref{MIPS Symbol Sizes,, Directives to override the size of symbols}. 643 644 In order to cut down on this overhead, most embedded MIPS systems 645 set aside a 64-kilobyte ``small data'' area and guarantee that all 646 data of size @var{n} and smaller will be placed in that area. 647 The limit @var{n} is passed to both the assembler and the linker 648 using the command-line option @option{-G @var{n}}, @pxref{MIPS Options,, 649 Assembler options}. Note that the same value of @var{n} must be used 650 when linking and when assembling all input files to the link; any 651 inconsistency could cause a relocation overflow error. 652 653 The size of an object in the @code{.bss} section is set by the 654 @code{.comm} or @code{.lcomm} directive that defines it. The size of 655 an external object may be set with the @code{.extern} directive. For 656 example, @samp{.extern sym,4} declares that the object at @code{sym} 657 is 4 bytes in length, while leaving @code{sym} otherwise undefined. 658 659 When no @option{-G} option is given, the default limit is 8 bytes. 660 The option @option{-G 0} prevents any data from being automatically 661 classified as small. 662 663 It is also possible to mark specific objects as small by putting them 664 in the special sections @code{.sdata} and @code{.sbss}, which are 665 ``small'' counterparts of @code{.data} and @code{.bss} respectively. 666 The toolchain will treat such data as small regardless of the 667 @option{-G} setting. 668 669 On startup, systems that support a small data area are expected to 670 initialize register @code{$28}, also known as @code{$gp}, in such a 671 way that small data can be accessed using a 16-bit offset from that 672 register. For example, when @samp{addr} is small data, 673 the @samp{dla $4,addr} instruction above is equivalent to: 674 675 @smallexample 676 daddiu $4,$28,%gp_rel(addr) 677 @end smallexample 678 679 Small data is not supported for SVR4-style PIC. 680 681 @node MIPS ISA 682 @section Directives to override the ISA level 683 684 @cindex MIPS ISA override 685 @kindex @code{.set mips@var{n}} 686 @sc{gnu} @code{@value{AS}} supports an additional directive to change 687 the MIPS Instruction Set Architecture level on the fly: @code{.set 688 mips@var{n}}. @var{n} should be a number from 0 to 5, or 32, 32r2, 32r3, 689 32r5, 32r6, 64, 64r2, 64r3, 64r5 or 64r6. 690 The values other than 0 make the assembler accept instructions 691 for the corresponding ISA level, from that point on in the 692 assembly. @code{.set mips@var{n}} affects not only which instructions 693 are permitted, but also how certain macros are expanded. @code{.set 694 mips0} restores the ISA level to its original level: either the 695 level you selected with command line options, or the default for your 696 configuration. You can use this feature to permit specific MIPS III 697 instructions while assembling in 32 bit mode. Use this directive with 698 care! 699 700 @cindex MIPS CPU override 701 @kindex @code{.set arch=@var{cpu}} 702 The @code{.set arch=@var{cpu}} directive provides even finer control. 703 It changes the effective CPU target and allows the assembler to use 704 instructions specific to a particular CPU. All CPUs supported by the 705 @samp{-march} command line option are also selectable by this directive. 706 The original value is restored by @code{.set arch=default}. 707 708 The directive @code{.set mips16} puts the assembler into MIPS 16 mode, 709 in which it will assemble instructions for the MIPS 16 processor. Use 710 @code{.set nomips16} to return to normal 32 bit mode. 711 712 Traditional MIPS assemblers do not support this directive. 713 714 The directive @code{.set micromips} puts the assembler into microMIPS mode, 715 in which it will assemble instructions for the microMIPS processor. Use 716 @code{.set nomicromips} to return to normal 32 bit mode. 717 718 Traditional MIPS assemblers do not support this directive. 719 720 @node MIPS assembly options 721 @section Directives to control code generation 722 723 @cindex MIPS directives to override command line options 724 @kindex @code{.module} 725 The @code{.module} directive allows command line options to be set directly 726 from assembly. The format of the directive matches the @code{.set} 727 directive but only those options which are relevant to a whole module are 728 supported. The effect of a @code{.module} directive is the same as the 729 corresponding command line option. Where @code{.set} directives support 730 returning to a default then the @code{.module} directives do not as they 731 define the defaults. 732 733 These module-level directives must appear first in assembly. 734 735 Traditional MIPS assemblers do not support this directive. 736 737 @cindex MIPS 32-bit microMIPS instruction generation override 738 @kindex @code{.set insn32} 739 @kindex @code{.set noinsn32} 740 The directive @code{.set insn32} makes the assembler only use 32-bit 741 instruction encodings when generating code for the microMIPS processor. 742 This directive inhibits the use of any 16-bit instructions from that 743 point on in the assembly. The @code{.set noinsn32} directive allows 744 16-bit instructions to be accepted. 745 746 Traditional MIPS assemblers do not support this directive. 747 748 @node MIPS autoextend 749 @section Directives for extending MIPS 16 bit instructions 750 751 @kindex @code{.set autoextend} 752 @kindex @code{.set noautoextend} 753 By default, MIPS 16 instructions are automatically extended to 32 bits 754 when necessary. The directive @code{.set noautoextend} will turn this 755 off. When @code{.set noautoextend} is in effect, any 32 bit instruction 756 must be explicitly extended with the @code{.e} modifier (e.g., 757 @code{li.e $4,1000}). The directive @code{.set autoextend} may be used 758 to once again automatically extend instructions when necessary. 759 760 This directive is only meaningful when in MIPS 16 mode. Traditional 761 MIPS assemblers do not support this directive. 762 763 @node MIPS insn 764 @section Directive to mark data as an instruction 765 766 @kindex @code{.insn} 767 The @code{.insn} directive tells @code{@value{AS}} that the following 768 data is actually instructions. This makes a difference in MIPS 16 and 769 microMIPS modes: when loading the address of a label which precedes 770 instructions, @code{@value{AS}} automatically adds 1 to the value, so 771 that jumping to the loaded address will do the right thing. 772 773 @kindex @code{.global} 774 The @code{.global} and @code{.globl} directives supported by 775 @code{@value{AS}} will by default mark the symbol as pointing to a 776 region of data not code. This means that, for example, any 777 instructions following such a symbol will not be disassembled by 778 @code{objdump} as it will regard them as data. To change this 779 behavior an optional section name can be placed after the symbol name 780 in the @code{.global} directive. If this section exists and is known 781 to be a code section, then the symbol will be marked as pointing at 782 code not data. Ie the syntax for the directive is: 783 784 @code{.global @var{symbol}[ @var{section}][, @var{symbol}[ @var{section}]] ...}, 785 786 Here is a short example: 787 788 @example 789 .global foo .text, bar, baz .data 790 foo: 791 nop 792 bar: 793 .word 0x0 794 baz: 795 .word 0x1 796 797 @end example 798 799 @node MIPS FP ABIs 800 @section Directives to control the FP ABI 801 @menu 802 * MIPS FP ABI History:: History of FP ABIs 803 * MIPS FP ABI Variants:: Supported FP ABIs 804 * MIPS FP ABI Selection:: Automatic selection of FP ABI 805 * MIPS FP ABI Compatibility:: Linking different FP ABI variants 806 @end menu 807 808 @node MIPS FP ABI History 809 @subsection History of FP ABIs 810 @cindex @code{.gnu_attribute 4, @var{n}} directive, MIPS 811 @cindex @code{.gnu_attribute Tag_GNU_MIPS_ABI_FP, @var{n}} directive, MIPS 812 The MIPS ABIs support a variety of different floating-point extensions 813 where calling-convention and register sizes vary for floating-point data. 814 The extensions exist to support a wide variety of optional architecture 815 features. The resulting ABI variants are generally incompatible with each 816 other and must be tracked carefully. 817 818 Traditionally the use of an explicit @code{.gnu_attribute 4, @var{n}} 819 directive is used to indicate which ABI is in use by a specific module. 820 It was then left to the user to ensure that command line options and the 821 selected ABI were compatible with some potential for inconsistencies. 822 823 @node MIPS FP ABI Variants 824 @subsection Supported FP ABIs 825 The supported floating-point ABI variants are: 826 827 @table @code 828 @item 0 - No floating-point 829 This variant is used to indicate that floating-point is not used within 830 the module at all and therefore has no impact on the ABI. This is the 831 default. 832 833 @item 1 - Double-precision 834 This variant indicates that double-precision support is used. For 64-bit 835 ABIs this means that 64-bit wide floating-point registers are required. 836 For 32-bit ABIs this means that 32-bit wide floating-point registers are 837 required and double-precision operations use pairs of registers. 838 839 @item 2 - Single-precision 840 This variant indicates that single-precision support is used. Double 841 precision operations will be supported via soft-float routines. 842 843 @item 3 - Soft-float 844 This variant indicates that although floating-point support is used all 845 operations are emulated in software. This means the ABI is modified to 846 pass all floating-point data in general-purpose registers. 847 848 @item 4 - Deprecated 849 This variant existed as an initial attempt at supporting 64-bit wide 850 floating-point registers for O32 ABI on a MIPS32r2 CPU. This has been 851 superseded by 5, 6 and 7. 852 853 @item 5 - Double-precision 32-bit CPU, 32-bit or 64-bit FPU 854 This variant is used by 32-bit ABIs to indicate that the floating-point 855 code in the module has been designed to operate correctly with either 856 32-bit wide or 64-bit wide floating-point registers. Double-precision 857 support is used. Only O32 currently supports this variant and requires 858 a minimum architecture of MIPS II. 859 860 @item 6 - Double-precision 32-bit FPU, 64-bit FPU 861 This variant is used by 32-bit ABIs to indicate that the floating-point 862 code in the module requires 64-bit wide floating-point registers. 863 Double-precision support is used. Only O32 currently supports this 864 variant and requires a minimum architecture of MIPS32r2. 865 866 @item 7 - Double-precision compat 32-bit FPU, 64-bit FPU 867 This variant is used by 32-bit ABIs to indicate that the floating-point 868 code in the module requires 64-bit wide floating-point registers. 869 Double-precision support is used. This differs from the previous ABI 870 as it restricts use of odd-numbered single-precision registers. Only 871 O32 currently supports this variant and requires a minimum architecture 872 of MIPS32r2. 873 @end table 874 875 @node MIPS FP ABI Selection 876 @subsection Automatic selection of FP ABI 877 @cindex @code{.module fp=@var{nn}} directive, MIPS 878 In order to simplify and add safety to the process of selecting the 879 correct floating-point ABI, the assembler will automatically infer the 880 correct @code{.gnu_attribute 4, @var{n}} directive based on command line 881 options and @code{.module} overrides. Where an explicit 882 @code{.gnu_attribute 4, @var{n}} directive has been seen then a warning 883 will be raised if it does not match an inferred setting. 884 885 The floating-point ABI is inferred as follows. If @samp{-msoft-float} 886 has been used the module will be marked as soft-float. If 887 @samp{-msingle-float} has been used then the module will be marked as 888 single-precision. The remaining ABIs are then selected based 889 on the FP register width. Double-precision is selected if the width 890 of GP and FP registers match and the special double-precision variants 891 for 32-bit ABIs are then selected depending on @samp{-mfpxx}, 892 @samp{-mfp64} and @samp{-mno-odd-spreg}. 893 894 @node MIPS FP ABI Compatibility 895 @subsection Linking different FP ABI variants 896 Modules using the default FP ABI (no floating-point) can be linked with 897 any other (singular) FP ABI variant. 898 899 Special compatibility support exists for O32 with the four 900 double-precision FP ABI variants. The @samp{-mfpxx} FP ABI is specifically 901 designed to be compatible with the standard double-precision ABI and the 902 @samp{-mfp64} FP ABIs. This makes it desirable for O32 modules to be 903 built as @samp{-mfpxx} to ensure the maximum compatibility with other 904 modules produced for more specific needs. The only FP ABIs which cannot 905 be linked together are the standard double-precision ABI and the full 906 @samp{-mfp64} ABI with @samp{-modd-spreg}. 907 908 @node MIPS NaN Encodings 909 @section Directives to record which NaN encoding is being used 910 911 @cindex MIPS IEEE 754 NaN data encoding selection 912 @cindex @code{.nan} directive, MIPS 913 The IEEE 754 floating-point standard defines two types of not-a-number 914 (NaN) data: ``signalling'' NaNs and ``quiet'' NaNs. The original version 915 of the standard did not specify how these two types should be 916 distinguished. Most implementations followed the i387 model, in which 917 the first bit of the significand is set for quiet NaNs and clear for 918 signalling NaNs. However, the original MIPS implementation assigned the 919 opposite meaning to the bit, so that it was set for signalling NaNs and 920 clear for quiet NaNs. 921 922 The 2008 revision of the standard formally suggested the i387 choice 923 and as from Sep 2012 the current release of the MIPS architecture 924 therefore optionally supports that form. Code that uses one NaN encoding 925 would usually be incompatible with code that uses the other NaN encoding, 926 so MIPS ELF objects have a flag (@code{EF_MIPS_NAN2008}) to record which 927 encoding is being used. 928 929 Assembly files can use the @code{.nan} directive to select between the 930 two encodings. @samp{.nan 2008} says that the assembly file uses the 931 IEEE 754-2008 encoding while @samp{.nan legacy} says that the file uses 932 the original MIPS encoding. If several @code{.nan} directives are given, 933 the final setting is the one that is used. 934 935 The command-line options @option{-mnan=legacy} and @option{-mnan=2008} 936 can be used instead of @samp{.nan legacy} and @samp{.nan 2008} 937 respectively. However, any @code{.nan} directive overrides the 938 command-line setting. 939 940 @samp{.nan legacy} is the default if no @code{.nan} directive or 941 @option{-mnan} option is given. 942 943 Note that @sc{gnu} @code{@value{AS}} does not produce NaNs itself and 944 therefore these directives do not affect code generation. They simply 945 control the setting of the @code{EF_MIPS_NAN2008} flag. 946 947 Traditional MIPS assemblers do not support these directives. 948 949 @node MIPS Option Stack 950 @section Directives to save and restore options 951 952 @cindex MIPS option stack 953 @kindex @code{.set push} 954 @kindex @code{.set pop} 955 The directives @code{.set push} and @code{.set pop} may be used to save 956 and restore the current settings for all the options which are 957 controlled by @code{.set}. The @code{.set push} directive saves the 958 current settings on a stack. The @code{.set pop} directive pops the 959 stack and restores the settings. 960 961 These directives can be useful inside an macro which must change an 962 option such as the ISA level or instruction reordering but does not want 963 to change the state of the code which invoked the macro. 964 965 Traditional MIPS assemblers do not support these directives. 966 967 @node MIPS ASE Instruction Generation Overrides 968 @section Directives to control generation of MIPS ASE instructions 969 970 @cindex MIPS MIPS-3D instruction generation override 971 @kindex @code{.set mips3d} 972 @kindex @code{.set nomips3d} 973 The directive @code{.set mips3d} makes the assembler accept instructions 974 from the MIPS-3D Application Specific Extension from that point on 975 in the assembly. The @code{.set nomips3d} directive prevents MIPS-3D 976 instructions from being accepted. 977 978 @cindex SmartMIPS instruction generation override 979 @kindex @code{.set smartmips} 980 @kindex @code{.set nosmartmips} 981 The directive @code{.set smartmips} makes the assembler accept 982 instructions from the SmartMIPS Application Specific Extension to the 983 MIPS32 ISA from that point on in the assembly. The 984 @code{.set nosmartmips} directive prevents SmartMIPS instructions from 985 being accepted. 986 987 @cindex MIPS MDMX instruction generation override 988 @kindex @code{.set mdmx} 989 @kindex @code{.set nomdmx} 990 The directive @code{.set mdmx} makes the assembler accept instructions 991 from the MDMX Application Specific Extension from that point on 992 in the assembly. The @code{.set nomdmx} directive prevents MDMX 993 instructions from being accepted. 994 995 @cindex MIPS DSP Release 1 instruction generation override 996 @kindex @code{.set dsp} 997 @kindex @code{.set nodsp} 998 The directive @code{.set dsp} makes the assembler accept instructions 999 from the DSP Release 1 Application Specific Extension from that point 1000 on in the assembly. The @code{.set nodsp} directive prevents DSP 1001 Release 1 instructions from being accepted. 1002 1003 @cindex MIPS DSP Release 2 instruction generation override 1004 @kindex @code{.set dspr2} 1005 @kindex @code{.set nodspr2} 1006 The directive @code{.set dspr2} makes the assembler accept instructions 1007 from the DSP Release 2 Application Specific Extension from that point 1008 on in the assembly. This directive implies @code{.set dsp}. The 1009 @code{.set nodspr2} directive prevents DSP Release 2 instructions from 1010 being accepted. 1011 1012 @cindex MIPS MT instruction generation override 1013 @kindex @code{.set mt} 1014 @kindex @code{.set nomt} 1015 The directive @code{.set mt} makes the assembler accept instructions 1016 from the MT Application Specific Extension from that point on 1017 in the assembly. The @code{.set nomt} directive prevents MT 1018 instructions from being accepted. 1019 1020 @cindex MIPS MCU instruction generation override 1021 @kindex @code{.set mcu} 1022 @kindex @code{.set nomcu} 1023 The directive @code{.set mcu} makes the assembler accept instructions 1024 from the MCU Application Specific Extension from that point on 1025 in the assembly. The @code{.set nomcu} directive prevents MCU 1026 instructions from being accepted. 1027 1028 @cindex MIPS SIMD Architecture instruction generation override 1029 @kindex @code{.set msa} 1030 @kindex @code{.set nomsa} 1031 The directive @code{.set msa} makes the assembler accept instructions 1032 from the MIPS SIMD Architecture Extension from that point on 1033 in the assembly. The @code{.set nomsa} directive prevents MSA 1034 instructions from being accepted. 1035 1036 @cindex Virtualization instruction generation override 1037 @kindex @code{.set virt} 1038 @kindex @code{.set novirt} 1039 The directive @code{.set virt} makes the assembler accept instructions 1040 from the Virtualization Application Specific Extension from that point 1041 on in the assembly. The @code{.set novirt} directive prevents Virtualization 1042 instructions from being accepted. 1043 1044 @cindex MIPS eXtended Physical Address (XPA) instruction generation override 1045 @kindex @code{.set xpa} 1046 @kindex @code{.set noxpa} 1047 The directive @code{.set xpa} makes the assembler accept instructions 1048 from the XPA Extension from that point on in the assembly. The 1049 @code{.set noxpa} directive prevents XPA instructions from being accepted. 1050 1051 @cindex XBurst MXU instruction generation override 1052 @kindex @code{.set mxu} 1053 @kindex @code{.set nomxu} 1054 The directive @code{.set mxu} makes the assembler accept instructions 1055 from the MXU Extension from that point on in the assembly. The 1056 @code{.set nomxu} directive prevents MXU instructions from being accepted. 1057 1058 Traditional MIPS assemblers do not support these directives. 1059 1060 @node MIPS Floating-Point 1061 @section Directives to override floating-point options 1062 1063 @cindex Disable floating-point instructions 1064 @kindex @code{.set softfloat} 1065 @kindex @code{.set hardfloat} 1066 The directives @code{.set softfloat} and @code{.set hardfloat} provide 1067 finer control of disabling and enabling float-point instructions. 1068 These directives always override the default (that hard-float 1069 instructions are accepted) or the command-line options 1070 (@samp{-msoft-float} and @samp{-mhard-float}). 1071 1072 @cindex Disable single-precision floating-point operations 1073 @kindex @code{.set singlefloat} 1074 @kindex @code{.set doublefloat} 1075 The directives @code{.set singlefloat} and @code{.set doublefloat} 1076 provide finer control of disabling and enabling double-precision 1077 float-point operations. These directives always override the default 1078 (that double-precision operations are accepted) or the command-line 1079 options (@samp{-msingle-float} and @samp{-mdouble-float}). 1080 1081 Traditional MIPS assemblers do not support these directives. 1082 1083 @node MIPS Syntax 1084 @section Syntactical considerations for the MIPS assembler 1085 @menu 1086 * MIPS-Chars:: Special Characters 1087 @end menu 1088 1089 @node MIPS-Chars 1090 @subsection Special Characters 1091 1092 @cindex line comment character, MIPS 1093 @cindex MIPS line comment character 1094 The presence of a @samp{#} on a line indicates the start of a comment 1095 that extends to the end of the current line. 1096 1097 If a @samp{#} appears as the first character of a line, the whole line 1098 is treated as a comment, but in this case the line can also be a 1099 logical line number directive (@pxref{Comments}) or a 1100 preprocessor control command (@pxref{Preprocessing}). 1101 1102 @cindex line separator, MIPS 1103 @cindex statement separator, MIPS 1104 @cindex MIPS line separator 1105 The @samp{;} character can be used to separate statements on the same 1106 line. 1107