* doc/as.texinfo: Document irp, irpc, macro, and rept. MRI mode

now supports macros, ifc, ifnc, irp, irpc, rept, and endr, without
	using gasp.
This commit is contained in:
Ian Lance Taylor 1995-08-21 18:37:10 +00:00
parent 7e047ac2c1
commit 95074dc362
2 changed files with 181 additions and 13 deletions

View File

@ -1,5 +1,9 @@
Mon Aug 21 13:57:20 1995 Ian Lance Taylor <ian@cygnus.com>
* doc/as.texinfo: Document irp, irpc, macro, and rept. MRI mode
now supports macros, ifc, ifnc, irp, irpc, rept, and endr, without
using gasp.
Add support for macros.
* as.c: Include sb.h and macro.h.
(max_macro_next): New global variable.

View File

@ -1084,19 +1084,6 @@ The @code{OPT} @code{D} option is the default, unlike the MRI assembler.
The @code{XREF} pseudo-op is ignored.
@item macros
Macros are not supported directly, but are supported by @code{gasp}.
@item @code{IFC}, @code{IFNC} pseudo-ops.
The @code{IFC} and @code{IFNC} pseudo-ops are not supported directly, but are
supported by @code{gasp}.
@item @code{IRP}, @code{IRPC}, @code{REPT}, @code{ENDR} pseudo-ops
The repeating pseudo-ops are not supported directly, but are supported by
@code{gasp}.
@end itemize
@node o
@ -2882,6 +2869,8 @@ Some machine configurations provide additional directives.
* If:: @code{.if @var{absolute expression}}
* Include:: @code{.include "@var{file}"}
* Int:: @code{.int @var{expressions}}
* Irp:: @code{.irp @var{symbol},@var{values}}@dots{}
* Irpc:: @code{.irpc @var{symbol},@var{values}}@dots{}
* Lcomm:: @code{.lcomm @var{symbol} , @var{length}}
* Lflags:: @code{.lflags}
@ifclear no-line-dir
@ -2895,12 +2884,15 @@ Some machine configurations provide additional directives.
* Lsym:: @code{.lsym @var{symbol}, @var{expression}}
@end ignore
* Macro:: @code{.macro @var{name} @var{args}}@dots{}
* Nolist:: @code{.nolist}
* Octa:: @code{.octa @var{bignums}}
* Org:: @code{.org @var{new-lc} , @var{fill}}
* P2align:: @code{.p2align @var{abs-expr} , @var{abs-expr}}
* Psize:: @code{.psize @var{lines}, @var{columns}}
* Quad:: @code{.quad @var{bignums}}
* Rept:: @code{.rept @var{count}}
* Sbttl:: @code{.sbttl "@var{subheading}"}
@ifset COFF
* Scl:: @code{.scl @var{class}}
@ -3407,6 +3399,62 @@ integers. On the H8/300H and the Hitachi SH, however, @code{.int} emits
@end ifset
@end ifclear
@node Irp
@section @code{.irp @var{symbol},@var{values}}@dots{}
@cindex @code{irp} directive
Evaluate a sequence of statements assigning different values to @var{symbol}.
The sequence of statements starts at the @code{.irp} directive, and is
terminated by an @code{.endr} directive. For each @var{value}, @var{symbol} is
set to @var{value}, and the sequence of statements is assembled. If no
@var{value} is listed, the sequence of statements is assembled once, with
@var{symbol} set to the null string. To refer to @var{symbol} within the
sequence of statements, use @var{\symbol}.
For example, assembling
@example
.irp param,1,2,3
move d\param,sp@@-
.endr
@end example
is equivalent to assembling
@example
move d1,sp@@-
move d2,sp@@-
move d3,sp@@-
@end example
@node Irpc
@section @code{.irpc @var{symbol},@var{values}}@dots{}
@cindex @code{irpc} directive
Evaluate a sequence of statements assigning different values to @var{symbol}.
The sequence of statements starts at the @code{.irpc} directive, and is
terminated by an @code{.endr} directive. For each character in @var{value},
@var{symbol} is set to the character, and the sequence of statements is
assembled. If no @var{value} is listed, the sequence of statements is
assembled once, with @var{symbol} set to the null string. To refer to
@var{symbol} within the sequence of statements, use @var{\symbol}.
For example, assembling
@example
.irpc param,123
move d\param,sp@@-
.endr
@end example
is equivalent to assembling
@example
move d1,sp@@-
move d2,sp@@-
move d3,sp@@-
@end example
@node Lcomm
@section @code{.lcomm @var{symbol} , @var{length}}
@ -3536,6 +3584,99 @@ the same as the expression value:
The new symbol is not flagged as external.
@end ignore
@node Macro
@section @code{.macro}
@cindex macros
The commands @code{.macro} and @code{.endm} allow you to define macros that
generate assembly output. For example, this definition specifies a macro
@code{sum} that puts a sequence of numbers into memory:
@example
.macro sum from=0, to=5
.long \from
.if \to-\from
sum "(\from+1)",\to
.endif
.endm
@end example
@noindent
With that definition, @samp{SUM 0,5} is equivalent to this assembly input:
@example
.long 0
.long 1
.long 2
.long 3
.long 4
.long 5
@end example
@ftable @code
@item .macro @var{macname}
@itemx .macro @var{macname} @var{macargs} @dots{}
@cindex @code{macro} directive
Begin the definition of a macro called @var{macname}. If your macro
definition requires arguments, specify their names after the macro name,
separated by commas or spaces. You can supply a default value for any
macro argument by following the name with @samp{=@var{deflt}}. For
example, these are all valid @code{.macro} statements:
@table @code
@item .macro comm
Begin the definition of a macro called @code{comm}, which takes no
arguments.
@item .macro plus1 p, p1
@itemx .macro plus1 p p1
Either statement begins the definition of a macro called @code{plus1},
which takes two arguments; within the macro definition, write
@samp{\p} or @samp{\p1} to evaluate the arguments.
@item .macro reserve_str p1=0 p2
Begin the definition of a macro called @code{reserve_str}, with two
arguments. The first argument has a default value, but not the second.
After the definition is complete, you can call the macro either as
@samp{reserve_str @var{a},@var{b}} (with @samp{\p1} evaluating to
@var{a} and @samp{\p2} evaluating to @var{b}), or as @samp{reserve_str
,@var{b}} (with @samp{\p1} evaluating as the default, in this case
@samp{0}, and @samp{\p2} evaluating to @var{b}).
@end table
When you call a macro, you can specify the argument values either by
position, or by keyword. For example, @samp{sum 9,17} is equivalent to
@samp{sum to=17, from=9}.
@item .endm
@cindex @code{endm} directive
Mark the end of a macro definition.
@item .exitm
@cindex @code{exitm} directive
Exit early from the current macro definition.
@cindex number of macros executed
@cindex macros, count executed
@item \@@
@code{@value{AS}} maintains a counter of how many macros it has
executed in this pseudo-variable; you can copy that number to your
output with @samp{\@@}, but @emph{only within a macro definition}.
@ignore
@item LOCAL @var{name} [ , @dots{} ]
@emph{Warning: @code{LOCAL} is only available if you select ``alternate
macro syntax'' with @samp{-a} or @samp{--alternate}.} @xref{Alternate,,
Alternate macro syntax}.
Generate a string replacement for each of the @var{name} arguments, and
replace any instances of @var{name} in each macro expansion. The
replacement string is unique in the assembly, and different for each
separate macro expansion. @code{LOCAL} allows you to write macros that
define symbols, without fear of conflict between separate macro expansions.
@end ignore
@end ftable
@node Nolist
@section @code{.nolist}
@ -3654,6 +3795,29 @@ warning message; and just takes the lowest order 16 bytes of the bignum.
@cindex integer, 16-byte
@end ifset
@node Rept
@section @code{.rept @var{count}}
@cindex @code{rept} directive
Repeat the sequence of lines between the @code{.rept} directive and the next
@code{.endr} directive @var{count} times.
For example, assembling
@example
.rept 3
.long 0
.endr
@end example
is equivalent to assembling
@example
.long 0
.long 0
.long 0
@end example
@node Sbttl
@section @code{.sbttl "@var{subheading}"}