read-rtl.c (ISDIGIT, ISSPACE): Make sure we have these.
authorDJ Delorie <dj@redhat.com>
Mon, 19 Nov 2001 22:37:12 +0000 (17:37 -0500)
committerDJ Delorie <dj@gcc.gnu.org>
Mon, 19 Nov 2001 22:37:12 +0000 (17:37 -0500)
* 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
gcc/config/i386/i386.md
gcc/read-rtl.c

index eddad4d..68704ef 100644 (file)
@@ -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.
index 0fbb413..d7ab20f 100644 (file)
                    (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}"
index a366dc8..fd79176 100644 (file)
@@ -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;