From 88a56c2eb1cf04cb828c6c19187a8f9b672e9d26 Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Wed, 16 Feb 2000 14:44:19 +0000 Subject: [PATCH] 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 From-SVN: r32008 --- gcc/ChangeLog | 9 +++++++++ gcc/genoutput.c | 34 ++++++++++++++++++++++++++++------ gcc/md.texi | 6 ++++++ 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7db972f075c..9b9dd6ea123 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +Wed Feb 16 15:04:49 2000 Hans-Peter Nilsson + Michael Meissner + + * 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 * cpplib.c (do_line): Pedwarn for #line > 32767. diff --git a/gcc/genoutput.c b/gcc/genoutput.c index ecac9c96fa0..022d67637e7 100644 --- a/gcc/genoutput.c +++ b/gcc/genoutput.c @@ -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'; +} diff --git a/gcc/md.texi b/gcc/md.texi index bd706a36e62..faec1126ca3 100644 --- a/gcc/md.texi +++ b/gcc/md.texi @@ -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} -- 2.30.2