md.texi (Simple Constraints): Add item about whitespace.

* 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.

Co-Authored-By: Michael Meissner <meissner@cygnus.com>

From-SVN: r32008
This commit is contained in:
Hans-Peter Nilsson 2000-02-16 14:44:19 +00:00 committed by Hans-Peter Nilsson
parent 1efa676d95
commit 88a56c2eb1
3 changed files with 43 additions and 6 deletions

View 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.

View 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';
}

View 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}