varasm.c (constant_descriptor): Make contents unsigned char.

* varasm.c (constant_descriptor): Make contents unsigned char.
	(mark_const_hash_entry): Adjust.
	(const_hash): Just hash the code of unknown nodes.
	(compare_constant_1): Adjust for unsigned char.
	Use language specific expander on unknown nodes.
	(record_constant_1): Likewise.

From-SVN: r34647
This commit is contained in:
Nathan Sidwell 2000-06-22 09:42:10 +00:00 committed by Nathan Sidwell
parent dc2a68d785
commit 990e895418
2 changed files with 40 additions and 20 deletions

View File

@ -1,3 +1,12 @@
2000-06-22 Nathan Sidwell <nathan@codesourcery.com>
* varasm.c (constant_descriptor): Make contents unsigned char.
(mark_const_hash_entry): Adjust.
(const_hash): Just hash the code of unknown nodes.
(compare_constant_1): Adjust for unsigned char.
Use language specific expander on unknown nodes.
(record_constant_1): Likewise.
2000-06-21 Zack Weinberg <zack@wolery.cumb.org>
* cppfiles.c (cpp_make_system_header): New function.

View File

@ -156,7 +156,7 @@ static void decode_addr_const PARAMS ((tree, struct addr_const *));
static int const_hash PARAMS ((tree));
static int compare_constant PARAMS ((tree,
struct constant_descriptor *));
static char *compare_constant_1 PARAMS ((tree, char *));
static const unsigned char *compare_constant_1 PARAMS ((tree, const unsigned char *));
static struct constant_descriptor *record_constant PARAMS ((tree));
static void record_constant_1 PARAMS ((tree));
static tree copy_constant PARAMS ((tree));
@ -2329,7 +2329,7 @@ struct constant_descriptor
struct constant_descriptor *next;
char *label;
rtx rtl;
char contents[1];
unsigned char contents[1];
};
#define HASHBITS 30
@ -2346,7 +2346,7 @@ mark_const_hash_entry (ptr)
while (desc)
{
ggc_mark_string (desc->label);
ggc_mark_string ((const char *)desc->label);
ggc_mark_rtx (desc->rtl);
desc = desc->next;
}
@ -2457,7 +2457,8 @@ const_hash (exp)
return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2;
default:
abort ();
/* A language specific constant. Just hash the code. */
return code % MAX_HASH_TABLE;
}
/* Compute hashing function */
@ -2490,12 +2491,12 @@ compare_constant (exp, desc)
against a subdescriptor, and if it succeeds it returns the
address of the subdescriptor for the next operand. */
static char *
static const unsigned char *
compare_constant_1 (exp, p)
tree exp;
char *p;
const unsigned char *p;
{
register const char *strp;
register const unsigned char *strp;
register int len;
register enum tree_code code = TREE_CODE (exp);
@ -2512,7 +2513,7 @@ compare_constant_1 (exp, p)
if (*p++ != TYPE_PRECISION (TREE_TYPE (exp)))
return 0;
strp = (char *) &TREE_INT_CST_LOW (exp);
strp = (unsigned char *) &TREE_INT_CST_LOW (exp);
len = 2 * sizeof TREE_INT_CST_LOW (exp);
break;
@ -2521,7 +2522,7 @@ compare_constant_1 (exp, p)
if (*p++ != TYPE_PRECISION (TREE_TYPE (exp)))
return 0;
strp = (char *) &TREE_REAL_CST (exp);
strp = (unsigned char *) &TREE_REAL_CST (exp);
len = sizeof TREE_REAL_CST (exp);
break;
@ -2532,7 +2533,7 @@ compare_constant_1 (exp, p)
if ((enum machine_mode) *p++ != TYPE_MODE (TREE_TYPE (exp)))
return 0;
strp = TREE_STRING_POINTER (exp);
strp = (unsigned char *)TREE_STRING_POINTER (exp);
len = TREE_STRING_LENGTH (exp);
if (bcmp ((char *) &TREE_STRING_LENGTH (exp), p,
sizeof TREE_STRING_LENGTH (exp)))
@ -2555,7 +2556,7 @@ compare_constant_1 (exp, p)
unsigned char *tmp = (unsigned char *) alloca (len);
get_set_constructor_bytes (exp, tmp, len);
strp = (char *) tmp;
strp = (unsigned char *) tmp;
if (bcmp ((char *) &xlen, p, sizeof xlen))
return 0;
@ -2667,7 +2668,7 @@ compare_constant_1 (exp, p)
struct addr_const value;
decode_addr_const (exp, &value);
strp = (char *) &value.offset;
strp = (unsigned char *) &value.offset;
len = sizeof value.offset;
/* Compare the offset. */
while (--len >= 0)
@ -2675,8 +2676,8 @@ compare_constant_1 (exp, p)
return 0;
/* Compare symbol name. */
strp = XSTR (value.base, 0);
len = strlen (strp) + 1;
strp = (unsigned char *) XSTR (value.base, 0);
len = strlen ((char *) strp) + 1;
}
break;
@ -2695,7 +2696,12 @@ compare_constant_1 (exp, p)
return compare_constant_1 (TREE_OPERAND (exp, 0), p);
default:
abort ();
if (lang_expand_constant)
{
exp = (*lang_expand_constant) (exp);
return compare_constant_1 (exp, p);
}
return 0;
}
/* Compare constant contents. */
@ -2736,7 +2742,7 @@ static void
record_constant_1 (exp)
tree exp;
{
register char *strp;
register unsigned char *strp;
register int len;
register enum tree_code code = TREE_CODE (exp);
@ -2746,13 +2752,13 @@ record_constant_1 (exp)
{
case INTEGER_CST:
obstack_1grow (&permanent_obstack, TYPE_PRECISION (TREE_TYPE (exp)));
strp = (char *) &TREE_INT_CST_LOW (exp);
strp = (unsigned char *) &TREE_INT_CST_LOW (exp);
len = 2 * sizeof TREE_INT_CST_LOW (exp);
break;
case REAL_CST:
obstack_1grow (&permanent_obstack, TYPE_PRECISION (TREE_TYPE (exp)));
strp = (char *) &TREE_REAL_CST (exp);
strp = (unsigned char *) &TREE_REAL_CST (exp);
len = sizeof TREE_REAL_CST (exp);
break;
@ -2761,7 +2767,7 @@ record_constant_1 (exp)
return;
obstack_1grow (&permanent_obstack, TYPE_MODE (TREE_TYPE (exp)));
strp = TREE_STRING_POINTER (exp);
strp = (unsigned char *) TREE_STRING_POINTER (exp);
len = TREE_STRING_LENGTH (exp);
obstack_grow (&permanent_obstack, (char *) &TREE_STRING_LENGTH (exp),
sizeof TREE_STRING_LENGTH (exp));
@ -2893,7 +2899,12 @@ record_constant_1 (exp)
return;
default:
abort ();
if (lang_expand_constant)
{
exp = (*lang_expand_constant) (exp);
record_constant_1 (exp);
}
return;
}
/* Record constant contents. */