as: MMIX-Opts

1 
1 9.28.1 Command-line Options
1 ---------------------------
1 
1 The MMIX version of 'as' has some machine-dependent options.
1 
1    When '--fixed-special-register-names' is specified, only the register
1 names specified in ⇒MMIX-Regs are recognized in the instructions
1 'PUT' and 'GET'.
1 
1    You can use the '--globalize-symbols' to make all symbols global.
1 This option is useful when splitting up a 'mmixal' program into several
1 files.
1 
1    The '--gnu-syntax' turns off most syntax compatibility with 'mmixal'.
1 Its usability is currently doubtful.
1 
1    The '--relax' option is not fully supported, but will eventually make
1 the object file prepared for linker relaxation.
1 
1    If you want to avoid inadvertently calling a predefined symbol and
1 would rather get an error, for example when using 'as' with a compiler
1 or other machine-generated code, specify '--no-predefined-syms'.  This
1 turns off built-in predefined definitions of all such symbols, including
1 rounding-mode symbols, segment symbols, 'BIT' symbols, and 'TRAP'
1 symbols used in 'mmix' "system calls".  It also turns off predefined
1 special-register names, except when used in 'PUT' and 'GET'
1 instructions.
1 
1    By default, some instructions are expanded to fit the size of the
1 operand or an external symbol (⇒MMIX-Expand).  By passing
1 '--no-expand', no such expansion will be done, instead causing errors at
1 link time if the operand does not fit.
1 
1    The 'mmixal' documentation (⇒mmixsite) specifies that global
1 registers allocated with the 'GREG' directive (⇒MMIX-greg) and
1 initialized to the same non-zero value, will refer to the same global
1 register.  This isn't strictly enforceable in 'as' since the final
1 addresses aren't known until link-time, but it will do an effort unless
1 the '--no-merge-gregs' option is specified.  (Register merging isn't yet
1 implemented in 'ld'.)
1 
1    'as' will warn every time it expands an instruction to fit an operand
1 unless the option '-x' is specified.  It is believed that this behaviour
1 is more useful than just mimicking 'mmixal''s behaviour, in which
1 instructions are only expanded if the '-x' option is specified, and
1 assembly fails otherwise, when an instruction needs to be expanded.  It
1 needs to be kept in mind that 'mmixal' is both an assembler and linker,
1 while 'as' will expand instructions that at link stage can be
1 contracted.  (Though linker relaxation isn't yet implemented in 'ld'.)
1 The option '-x' also implies '--linker-allocated-gregs'.
1 
1    If instruction expansion is enabled, 'as' can expand a 'PUSHJ'
1 instruction into a series of instructions.  The shortest expansion is to
1 not expand it, but just mark the call as redirectable to a stub, which
1 'ld' creates at link-time, but only if the original 'PUSHJ' instruction
1 is found not to reach the target.  The stub consists of the necessary
1 instructions to form a jump to the target.  This happens if 'as' can
1 assert that the 'PUSHJ' instruction can reach such a stub.  The option
1 '--no-pushj-stubs' disables this shorter expansion, and the longer
1 series of instructions is then created at assembly-time.  The option
1 '--no-stubs' is a synonym, intended for compatibility with future
1 releases, where generation of stubs for other instructions may be
1 implemented.
1 
1    Usually a two-operand-expression (⇒GREG-base) without a
1 matching 'GREG' directive is treated as an error by 'as'.  When the
1 option '--linker-allocated-gregs' is in effect, they are instead passed
1 through to the linker, which will allocate as many global registers as
1 is needed.
1