<html lang="en"> <head> <title>MMIX-Opts - Using as</title> <meta http-equiv="Content-Type" content="text/html"> <meta name="description" content="Using as"> <meta name="generator" content="makeinfo 4.7"> <link title="Top" rel="start" href="index.html#Top"> <link rel="up" href="MMIX_002dDependent.html#MMIX_002dDependent" title="MMIX-Dependent"> <link rel="next" href="MMIX_002dExpand.html#MMIX_002dExpand" title="MMIX-Expand"> <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> <!-- This file documents the GNU Assembler "as". Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002, 2006, 2007 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. man end--> <meta http-equiv="Content-Style-Type" content="text/css"> <style type="text/css"><!-- pre.display { font-family:inherit } pre.format { font-family:inherit } pre.smalldisplay { font-family:inherit; font-size:smaller } pre.smallformat { font-family:inherit; font-size:smaller } pre.smallexample { font-size:smaller } pre.smalllisp { font-size:smaller } span.sc { font-variant:small-caps } span.roman { font-family: serif; font-weight: normal; } --></style> </head> <body> <div class="node"> <p> <a name="MMIX_002dOpts"></a>Next: <a rel="next" accesskey="n" href="MMIX_002dExpand.html#MMIX_002dExpand">MMIX-Expand</a>, Up: <a rel="up" accesskey="u" href="MMIX_002dDependent.html#MMIX_002dDependent">MMIX-Dependent</a> <hr><br> </div> <h4 class="subsection">9.23.1 Command-line Options</h4> <p><a name="index-options_002c-MMIX-1250"></a><a name="index-MMIX-options-1251"></a>The MMIX version of <code>as</code> has some machine-dependent options. <p><a name="index-_0040samp_007b_002d_002dfixed_002dspecial_002dregister_002dnames_007d-command-line-option_002c-MMIX-1252"></a>When <span class="samp">--fixed-special-register-names</span> is specified, only the register names specified in <a href="MMIX_002dRegs.html#MMIX_002dRegs">MMIX-Regs</a> are recognized in the instructions <code>PUT</code> and <code>GET</code>. <p><a name="index-_0040samp_007b_002d_002dglobalize_002dsymbols_007d-command-line-option_002c-MMIX-1253"></a>You can use the <span class="samp">--globalize-symbols</span> to make all symbols global. This option is useful when splitting up a <code>mmixal</code> program into several files. <p><a name="index-_0040samp_007b_002d_002dgnu_002dsyntax_007d-command-line-option_002c-MMIX-1254"></a>The <span class="samp">--gnu-syntax</span> turns off most syntax compatibility with <code>mmixal</code>. Its usability is currently doubtful. <p><a name="index-_0040samp_007b_002d_002drelax_007d-command-line-option_002c-MMIX-1255"></a>The <span class="samp">--relax</span> option is not fully supported, but will eventually make the object file prepared for linker relaxation. <p><a name="index-_0040samp_007b_002d_002dno_002dpredefined_002dsyms_007d-command-line-option_002c-MMIX-1256"></a>If you want to avoid inadvertently calling a predefined symbol and would rather get an error, for example when using <code>as</code> with a compiler or other machine-generated code, specify <span class="samp">--no-predefined-syms</span>. This turns off built-in predefined definitions of all such symbols, including rounding-mode symbols, segment symbols, <span class="samp">BIT</span> symbols, and <code>TRAP</code> symbols used in <code>mmix</code> “system calls”. It also turns off predefined special-register names, except when used in <code>PUT</code> and <code>GET</code> instructions. <p><a name="index-_0040samp_007b_002d_002dno_002dexpand_007d-command-line-option_002c-MMIX-1257"></a>By default, some instructions are expanded to fit the size of the operand or an external symbol (see <a href="MMIX_002dExpand.html#MMIX_002dExpand">MMIX-Expand</a>). By passing <span class="samp">--no-expand</span>, no such expansion will be done, instead causing errors at link time if the operand does not fit. <p><a name="index-_0040samp_007b_002d_002dno_002dmerge_002dgregs_007d-command-line-option_002c-MMIX-1258"></a>The <code>mmixal</code> documentation (see <a href="mmixsite.html#mmixsite">mmixsite</a>) specifies that global registers allocated with the <span class="samp">GREG</span> directive (see <a href="MMIX_002dgreg.html#MMIX_002dgreg">MMIX-greg</a>) and initialized to the same non-zero value, will refer to the same global register. This isn't strictly enforceable in <code>as</code> since the final addresses aren't known until link-time, but it will do an effort unless the <span class="samp">--no-merge-gregs</span> option is specified. (Register merging isn't yet implemented in <code>ld</code>.) <p><a name="index-_0040samp_007b_002dx_007d-command-line-option_002c-MMIX-1259"></a><code>as</code> will warn every time it expands an instruction to fit an operand unless the option <span class="samp">-x</span> is specified. It is believed that this behaviour is more useful than just mimicking <code>mmixal</code>'s behaviour, in which instructions are only expanded if the <span class="samp">-x</span> option is specified, and assembly fails otherwise, when an instruction needs to be expanded. It needs to be kept in mind that <code>mmixal</code> is both an assembler and linker, while <code>as</code> will expand instructions that at link stage can be contracted. (Though linker relaxation isn't yet implemented in <code>ld</code>.) The option <span class="samp">-x</span> also imples <span class="samp">--linker-allocated-gregs</span>. <p><a name="index-_0040samp_007b_002d_002dno_002dpushj_002dstubs_007d-command-line-option_002c-MMIX-1260"></a><a name="index-_0040samp_007b_002d_002dno_002dstubs_007d-command-line-option_002c-MMIX-1261"></a>If instruction expansion is enabled, <code>as</code> can expand a <span class="samp">PUSHJ</span> instruction into a series of instructions. The shortest expansion is to not expand it, but just mark the call as redirectable to a stub, which <code>ld</code> creates at link-time, but only if the original <span class="samp">PUSHJ</span> instruction is found not to reach the target. The stub consists of the necessary instructions to form a jump to the target. This happens if <code>as</code> can assert that the <span class="samp">PUSHJ</span> instruction can reach such a stub. The option <span class="samp">--no-pushj-stubs</span> disables this shorter expansion, and the longer series of instructions is then created at assembly-time. The option <span class="samp">--no-stubs</span> is a synonym, intended for compatibility with future releases, where generation of stubs for other instructions may be implemented. <p><a name="index-_0040samp_007b_002d_002dlinker_002dallocated_002dgregs_007d-command-line-option_002c-MMIX-1262"></a>Usually a two-operand-expression (see <a href="GREG_002dbase.html#GREG_002dbase">GREG-base</a>) without a matching <span class="samp">GREG</span> directive is treated as an error by <code>as</code>. When the option <span class="samp">--linker-allocated-gregs</span> is in effect, they are instead passed through to the linker, which will allocate as many global registers as is needed. </body></html>