summaryrefslogtreecommitdiffstats
path: root/gcc/doc
diff options
context:
space:
mode:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2005-05-10 22:40:37 +0000
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2005-05-10 22:40:37 +0000
commite64e4ed9d22ed3e32f9c6c6393c53f5bdd542c12 (patch)
tree3c192eb398beefd572075f215cd4eb5cbfb5515b /gcc/doc
parent2625ff05d1d2b19e4779319e4370fd69ff15e9f0 (diff)
downloadppe42-gcc-e64e4ed9d22ed3e32f9c6c6393c53f5bdd542c12.tar.gz
ppe42-gcc-e64e4ed9d22ed3e32f9c6c6393c53f5bdd542c12.zip
* read-rtl.c (struct macro_traverse_data): Define.
(map_attr_string): New static function, broken out of apply_macro_to_string. (mode_attr_index, apply_mode_maps): New static functions. (apply_macro_to_string): Call map_attr_string. (apply_macro_to_rtx): Add mode_maps and infile parameters. Change all callers. (apply_macro_traverse): Expect data to point to a struct macro_traverse_data. (read_rtx): Add mode_maps local variable. Use mode_traverse_data to pass data through htab_traverse. (read_rtx_1): Add mode_maps parameter. Change all callers. Handle mode names which are attribute strings. * doc/md.texi (Substitutions): Rename from String Substitutions. Change references. Document using attributes as modes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@99548 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/doc')
-rw-r--r--gcc/doc/md.texi37
1 files changed, 26 insertions, 11 deletions
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
index 61b8856f71d..4feab32698e 100644
--- a/gcc/doc/md.texi
+++ b/gcc/doc/md.texi
@@ -6718,7 +6718,7 @@ rtx-based construct, such as a @code{define_insn},
@menu
* Defining Mode Macros:: Defining a new mode macro.
-* String Substitutions:: Combining mode macros with string substitutions
+* Substitutions:: Combining mode macros with substitutions
* Examples:: Examples
@end menu
@@ -6764,14 +6764,15 @@ but that the @code{:SI} expansion has no such constraint.
Macros are applied in the order they are defined. This can be
significant if two macros are used in a construct that requires
-string substitutions. @xref{String Substitutions}.
+substitutions. @xref{Substitutions}.
-@node String Substitutions
-@subsubsection String Substitution in Mode Macros
+@node Substitutions
+@subsubsection Substitution in Mode Macros
@findex define_mode_attr
If an @file{.md} file construct uses mode macros, each version of the
-construct will often need slightly different strings. For example:
+construct will often need slightly different strings or modes. For
+example:
@itemize @bullet
@item
@@ -6782,6 +6783,11 @@ appropriate mode name for @var{m}.
@item
When a @code{define_insn} defines several instruction patterns,
each instruction will often use a different assembler mnemonic.
+
+@item
+When a @code{define_insn} requires operands with different modes,
+using a macro for one of the operand modes usually requires a specific
+mode for the other operand(s).
@end itemize
GCC supports such variations through a system of ``mode attributes''.
@@ -6796,12 +6802,12 @@ upper case. You can define other attributes using:
where @var{name} is the name of the attribute and @var{valuei}
is the value associated with @var{modei}.
-When GCC replaces some @var{:macro} with @var{:mode}, it will
-scan each string in the pattern for sequences of the form
-@code{<@var{macro}:@var{attr}>}, where @var{attr} is the name of
-a mode attribute. If the attribute is defined for @var{mode}, the
-whole @code{<...>} sequence will be replaced by the appropriate
-attribute value.
+When GCC replaces some @var{:macro} with @var{:mode}, it will scan
+each string and mode in the pattern for sequences of the form
+@code{<@var{macro}:@var{attr}>}, where @var{attr} is the name of a
+mode attribute. If the attribute is defined for @var{mode}, the whole
+@code{<...>} sequence will be replaced by the appropriate attribute
+value.
For example, suppose an @file{.md} file has:
@@ -6815,6 +6821,15 @@ If one of the patterns that uses @code{:P} contains the string
will use @code{"lw\t%0,%1"} and the @code{DI} version will use
@code{"ld\t%0,%1"}.
+Here is an example of using an attribute for a mode:
+
+@smallexample
+(define_mode_macro LONG [SI DI])
+(define_mode_attr SHORT [(SI "HI") (DI "SI")])
+(define_insn ...
+ (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)
+@end smallexample
+
The @code{@var{macro}:} prefix may be omitted, in which case the
substitution will be attempted for every macro expansion.
OpenPOWER on IntegriCloud