diff options
author | DJ Delorie <dj@redhat.com> | 2001-11-19 17:37:12 -0500 |
---|---|---|
committer | DJ Delorie <dj@gcc.gnu.org> | 2001-11-19 17:37:12 -0500 |
commit | 53c98b1f0f371b87bb844d480b9cc963d30e3a5a (patch) | |
tree | 600d1a2fa45d18ede321e0380ab136ef1e727499 /gcc | |
parent | 8b97450d2127d14da7f544909ae73c823fefa242 (diff) | |
download | gcc-53c98b1f0f371b87bb844d480b9cc963d30e3a5a.zip gcc-53c98b1f0f371b87bb844d480b9cc963d30e3a5a.tar.gz gcc-53c98b1f0f371b87bb844d480b9cc963d30e3a5a.tar.bz2 |
read-rtl.c (ISDIGIT, ISSPACE): Make sure we have these.
* read-rtl.c (ISDIGIT, ISSPACE): Make sure we have these.
(validate_const_int): New.
(read_rtx): Validate constant integers.
* config/i386/i386.md (pmulhrwv4hi3): Use decimal constants.
From-SVN: r47187
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 8 | ||||
-rw-r--r-- | gcc/read-rtl.c | 31 |
3 files changed, 42 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eddad4d..68704ef 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2001-11-19 DJ Delorie <dj@redhat.com> + + * read-rtl.c (ISDIGIT, ISSPACE): Make sure we have these. + (validate_const_int): New. + (read_rtx): Validate constant integers. + * config/i386/i386.md (pmulhrwv4hi3): Use decimal constants. + 2001-11-19 Jakub Jelinek <jakub@redhat.com> * doc/hostconfig.texi (DUMPFILE_FORMAT): Move into the table. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 0fbb413..d7ab20f 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -19676,10 +19676,10 @@ (sign_extend:V4SI (match_operand:V4HI 2 "nonimmediate_operand" "ym"))) (vec_const:V4SI - (parallel [(const_int 0x8000) - (const_int 0x8000) - (const_int 0x8000) - (const_int 0x8000)]))) + (parallel [(const_int 32768) + (const_int 32768) + (const_int 32768) + (const_int 32768)]))) (const_int 16))))] "TARGET_3DNOW" "pmulhrw\\t{%2, %0|%0, %2}" diff --git a/gcc/read-rtl.c b/gcc/read-rtl.c index a366dc8..fd79176 100644 --- a/gcc/read-rtl.c +++ b/gcc/read-rtl.c @@ -25,6 +25,12 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "obstack.h" #include "hashtab.h" +#ifndef ISDIGIT +#include <ctype.h> +#define ISDIGIT isdigit +#define ISSPACE isspace +#endif + #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free @@ -41,6 +47,7 @@ static void read_escape PARAMS ((struct obstack *, FILE *)); static unsigned def_hash PARAMS ((const void *)); static int def_name_eq_p PARAMS ((const void *, const void *)); static void read_constants PARAMS ((FILE *infile, char *tmp_char)); +static void validate_const_int PARAMS ((FILE *, const char *)); /* Subroutines of read_rtx. */ @@ -494,6 +501,28 @@ traverse_md_constants (callback, info) htab_traverse (md_constants, callback, info); } +static void +validate_const_int (infile, string) + FILE *infile; + const char *string; +{ + const char *cp; + int valid = 1; + + cp = string; + while (*cp && ISSPACE(*cp)) + cp++; + if (*cp == '-' || *cp == '+') + cp++; + if (*cp == 0) + valid = 0; + for (; *cp; cp++) + if (! ISDIGIT (*cp)) + valid = 0; + if (!valid) + fatal_with_file_and_line (infile, "invalid decimal constant \"%s\"\n", string); +} + /* Read an rtx in printed representation from INFILE and return an actual rtx in core constructed accordingly. read_rtx is not used in the compiler proper, but rather in @@ -699,6 +728,7 @@ again: case 'w': read_name (tmp_char, infile); + validate_const_int(infile, tmp_char); #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT tmp_wide = atoi (tmp_char); #else @@ -720,6 +750,7 @@ again: case 'i': case 'n': read_name (tmp_char, infile); + validate_const_int(infile, tmp_char); tmp_int = atoi (tmp_char); XINT (return_rtx, i) = tmp_int; break; |