From 53c98b1f0f371b87bb844d480b9cc963d30e3a5a Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Mon, 19 Nov 2001 17:37:12 -0500 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/config/i386/i386.md | 8 ++++---- gcc/read-rtl.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eddad4d10ce..68704ef0264 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2001-11-19 DJ Delorie + + * 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 * doc/hostconfig.texi (DUMPFILE_FORMAT): Move into the table. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 0fbb4136143..d7ab20f26b7 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 a366dc8c6c2..fd79176c755 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 +#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; -- 2.30.2