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
This commit is contained in:
DJ Delorie 2001-11-19 17:37:12 -05:00 committed by DJ Delorie
parent 8b97450d21
commit 53c98b1f0f
3 changed files with 42 additions and 4 deletions

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

View File

@ -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}"

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