This commit was manufactured by cvs2svn to create branch 'binutils-
[external/binutils.git] / gas / doc / c-mmix.texi
index dd18765..009f9d3 100644 (file)
@@ -1,4 +1,4 @@
-@c Copyright 2001 Free Software Foundation, Inc.
+@c Copyright 2001, 2002, 2003, 2006, 2011 Free Software Foundation, Inc.
 @c This is part of the GAS manual.
 @c For copying conditions, see the file as.texinfo.
 @c MMIX description by Hans-Peter Nilsson, hp@bitrange.com
@@ -65,7 +65,7 @@ at link time if the operand does not fit.
 The @code{mmixal} documentation (@pxref{mmixsite}) specifies that global
 registers allocated with the @samp{GREG} directive (@pxref{MMIX-greg}) and
 initialized to the same non-zero value, will refer to the same global
-register.  This isn't strictly enforcable in @code{@value{AS}} since the
+register.  This isn't strictly enforceable in @code{@value{AS}} since the
 final addresses aren't known until link-time, but it will do an effort
 unless the @samp{--no-merge-gregs} option is specified.  (Register merging
 isn't yet implemented in @code{@value{LD}}.)
@@ -79,7 +79,30 @@ is specified, and assembly fails otherwise, when an instruction needs to
 be expanded.  It needs to be kept in mind that @code{mmixal} is both an
 assembler and linker, while @code{@value{AS}} will expand instructions
 that at link stage can be contracted.  (Though linker relaxation isn't yet
-implemented in @code{@value{LD}}.)
+implemented in @code{@value{LD}}.)  The option @samp{-x} also imples
+@samp{--linker-allocated-gregs}.
+
+@cindex @samp{--no-pushj-stubs} command line option, MMIX
+@cindex @samp{--no-stubs} command line option, MMIX
+If instruction expansion is enabled, @code{@value{AS}} can expand a
+@samp{PUSHJ} 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{@value{LD}} creates at link-time, but only if the
+original @samp{PUSHJ} 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{@value{AS}} can assert that the @samp{PUSHJ}
+instruction can reach such a stub.  The option @samp{--no-pushj-stubs}
+disables this shorter expansion, and the longer series of instructions is
+then created at assembly-time.  The option @samp{--no-stubs} is a synonym,
+intended for compatibility with future releases, where generation of stubs
+for other instructions may be implemented.
+
+@cindex @samp{--linker-allocated-gregs} command line option, MMIX
+Usually a two-operand-expression (@pxref{GREG-base}) without a matching
+@samp{GREG} directive is treated as an error by @code{@value{AS}}.  When
+the option @samp{--linker-allocated-gregs} is in effect, they are instead
+passed through to the linker, which will allocate as many global registers
+as is needed.
 
 @node MMIX-Expand
 @section Instruction expansion
@@ -149,7 +172,10 @@ specified, the rest of the line is ignored, treated as a comment.
 The characters @samp{*} and @samp{#} are line comment characters; each
 start a comment at the beginning of a line, but only at the beginning of a
 line.  A @samp{#} prefixes a hexadecimal number if found elsewhere on a
-line.
+line.  If a @samp{#} appears at the start of a line the whole line is
+treated as a comment, but the line can also act as a logical line
+number directive (@pxref{Comments}) or a preprocessor control command
+(@pxref{Preprocessing}).
 
 Two other characters, @samp{%} and @samp{!}, each start a comment anywhere
 on the line.  Thus you can't use the @samp{modulus} and @samp{not}
@@ -381,7 +407,10 @@ Global registers allocated with this directive are allocated in order
 higher-to-lower within a file.  Other than that, the exact order of
 register allocation and elimination is undefined.  For example, the order
 is undefined when more than one file with such directives are linked
-together.
+together.  With the options @samp{-x} and @samp{--linker-allocated-gregs},
+@samp{GREG} directives for two-operand cases like the one mentioned above
+can be omitted.  Sufficient global registers will then be allocated by the
+linker.
 
 @item BYTE
 @cindex assembler directive BYTE, MMIX
@@ -417,7 +446,7 @@ operand can be omitted, defaulting to a zero value.
 The directives @samp{WYDE}, @samp{TETRA} and @samp{OCTA} emit constants of
 two, four and eight bytes size respectively.  Before anything else happens
 for the directive, the current location is aligned to the respective
-constant-size bondary.  If a label is defined at the beginning of the
+constant-size boundary.  If a label is defined at the beginning of the
 line, its value will be that after the alignment.  A single operand can be
 omitted, defaulting to a zero value emitted for the directive.  Operands
 can be expressed as strings (@pxref{Strings}), in which case each
@@ -504,7 +533,7 @@ Operand syntax is a bit stricter with @code{@value{AS}} than
 must write @code{addu $1,$2,3}.
 
 You can't LOC to a lower address than those already visited
-(i.e. ``backwards'').
+(i.e., ``backwards'').
 
 A LOC directive must come before any emitted code.
 
@@ -544,10 +573,11 @@ upper-case characters.
 
 There's no unicode support.
 
-The following is a list of programs in
-@url{http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html} dated
-2001-08-25 (md5sum c393470cfc86fac040487d22d2bf0172) that assemble with
-@code{mmixal} but do not assemble with @code{@value{AS}}:
+The following is a list of programs in @samp{mmix.tar.gz}, available at
+@url{http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html}, last
+checked with the version dated 2001-08-25 (md5sum
+c393470cfc86fac040487d22d2bf0172) that assemble with @code{mmixal} but do
+not assemble with @code{@value{AS}}:
 
 @table @code
 @item silly.mms