c-mips.texi 42 KB

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