OSDN Git Service

* md.texi (Simple Constraints): Add item about whitespace.
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Feb 2000 14:44:19 +0000 (14:44 +0000)
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Feb 2000 14:44:19 +0000 (14:44 +0000)
* genoutput.c (strip_whitespace): New.
(scan_operands) [MATCH_OPERAND, MATCH_SCRATCH]: Call
strip_whitespace for constraints.
Test pointer using NULL, not 0.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32008 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/genoutput.c
gcc/md.texi

index 7db972f..9b9dd6e 100644 (file)
@@ -1,3 +1,12 @@
+Wed Feb 16 15:04:49 2000  Hans-Peter Nilsson  <hp@bitrange.com>
+                         Michael Meissner  <meissner@cygnus.com>
+
+       * md.texi (Simple Constraints): Add item about whitespace.
+       * genoutput.c (strip_whitespace): New.
+       (scan_operands) [MATCH_OPERAND, MATCH_SCRATCH]: Call
+       strip_whitespace for constraints.
+       Test pointer using NULL, not 0.
+
 2000-02-16  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
 
        * cpplib.c (do_line): Pedwarn for #line > 32767.
index ecac9c9..022d676 100644 (file)
@@ -104,6 +104,7 @@ struct obstack *rtl_obstack = &obstack;
 #define obstack_chunk_free free
 
 static int n_occurrences PARAMS ((int, char *));
+static void strip_whitespace PARAMS ((char *));
 
 /* insns in the machine description are assigned sequential code numbers
    that are used by insn-recog.c (produced by genrecog) to communicate
@@ -439,9 +440,12 @@ scan_operands (d, part, this_address_p, this_strict_low)
       d->operand[opno].strict_low = this_strict_low;
       d->operand[opno].predicate = XSTR (part, 1);
       d->operand[opno].constraint = XSTR (part, 2);
-      if (XSTR (part, 2) != 0 && *XSTR (part, 2) != 0)
-       d->operand[opno].n_alternatives
-         = n_occurrences (',', XSTR (part, 2)) + 1;
+      if (XSTR (part, 2) != NULL && *XSTR (part, 2) != 0)
+       {
+         strip_whitespace (XSTR (part, 2));
+         d->operand[opno].n_alternatives
+           = n_occurrences (',', XSTR (part, 2)) + 1;
+       }
       d->operand[opno].address_p = this_address_p;
       d->operand[opno].eliminable = 1;
       return;
@@ -464,9 +468,12 @@ scan_operands (d, part, this_address_p, this_strict_low)
       d->operand[opno].strict_low = 0;
       d->operand[opno].predicate = "scratch_operand";
       d->operand[opno].constraint = XSTR (part, 1);
-      if (XSTR (part, 1) != 0 && *XSTR (part, 1) != 0)
-       d->operand[opno].n_alternatives
-         = n_occurrences (',', XSTR (part, 1)) + 1;
+      if (XSTR (part, 1) != NULL && *XSTR (part, 1) != 0)
+       {
+         strip_whitespace (XSTR (part, 1));
+         d->operand[opno].n_alternatives
+           = n_occurrences (',', XSTR (part, 1)) + 1;
+       }
       d->operand[opno].address_p = 0;
       d->operand[opno].eliminable = 0;
       return;
@@ -969,3 +976,18 @@ n_occurrences (c, s)
     n += (*s++ == c);
   return n;
 }
+
+/* Remove whitespace in `s' by moving up characters until the end.  */
+static void
+strip_whitespace (s)
+     char *s;
+{
+  char *p = s;
+  int ch;
+
+  while ((ch = *s++) != '\0')
+    if (! ISSPACE (ch))
+      *p++ = ch;
+
+  *p = '\0';
+}
index bd706a3..faec112 100644 (file)
@@ -665,6 +665,12 @@ which describes one kind of operand that is permitted.  Here are
 the letters that are allowed:
 
 @table @asis
+@item whitespace
+Whitespace characters are ignored and can be inserted at any position
+except the first.  This enables each alternative for different operands to
+be visually aligned in the machine description even if they have different
+number of constraints and modifiers.
+
 @cindex @samp{m} in constraint
 @cindex memory references in constraints
 @item @samp{m}