genattrtab.c (strcmp_check, [...]): New macros.
* genattrtab.c (strcmp_check, DEF_ATTR_STRING): New macros. (length_str, delay_type_str, delay_1_0_str, num_delay_slots_str): New variables. (main): Initialize them. (find_attr): Canonicalize the attribute name string. (attr_rtx_1, copy_boolean, expand_delays, gen_unit): Always canonicalize string arguments. (attr_printf, attr_eq): Use DEF_ATTR_STRING. (check_attr_test, check_attr_value, make_length_attrs, write_length_unit_log, simplify_by_exploding, gen_attr, write_test_expr, write_attr_value, write_eligible_delay, write_complex_function, make_internal_attr, write_const_num_delay_slots): Changed due to change of type of find_attr. (fill_attr, evaluate_eq_attr, simplify_and_tree, attr_rtx_cost, simplify_by_exploding, walk_attr_value): Use strcmp_check. From-SVN: r73869
This commit is contained in:
parent
5069daefc3
commit
75669493dc
@ -1,3 +1,23 @@
|
||||
2003-11-23 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
|
||||
|
||||
* genattrtab.c (strcmp_check, DEF_ATTR_STRING): New macros.
|
||||
(length_str, delay_type_str, delay_1_0_str, num_delay_slots_str):
|
||||
New variables.
|
||||
(main): Initialize them.
|
||||
(find_attr): Canonicalize the attribute name string.
|
||||
(attr_rtx_1, copy_boolean, expand_delays, gen_unit): Always canonicalize
|
||||
string arguments.
|
||||
(attr_printf, attr_eq): Use DEF_ATTR_STRING.
|
||||
(check_attr_test, check_attr_value, make_length_attrs,
|
||||
write_length_unit_log, simplify_by_exploding, gen_attr,
|
||||
write_test_expr, write_attr_value, write_eligible_delay,
|
||||
write_complex_function, make_internal_attr,
|
||||
write_const_num_delay_slots): Changed due to change of type of
|
||||
find_attr.
|
||||
(fill_attr, evaluate_eq_attr, simplify_and_tree,
|
||||
attr_rtx_cost, simplify_by_exploding, walk_attr_value): Use
|
||||
strcmp_check.
|
||||
|
||||
2003-11-23 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
PR target/13122
|
||||
|
144
gcc/genattrtab.c
144
gcc/genattrtab.c
@ -100,6 +100,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||
#define ATTR_PERMANENT_P(RTX) (RTX_FLAG((RTX), integrated))
|
||||
#define ATTR_EQ_ATTR_P(RTX) (RTX_FLAG((RTX), volatil))
|
||||
|
||||
#if 1
|
||||
#define strcmp_check(S1, S2) ((S1) == (S2) \
|
||||
? 0 \
|
||||
: (strcmp ((S1), (S2)) \
|
||||
? 1 \
|
||||
: (abort (), 0)))
|
||||
#else
|
||||
#define strcmp_check(S1, S2) ((S1) != (S2))
|
||||
#endif
|
||||
|
||||
#include "bconfig.h"
|
||||
#include "system.h"
|
||||
#include "coretypes.h"
|
||||
@ -339,6 +349,10 @@ static rtx true_rtx, false_rtx;
|
||||
/* Used to reduce calls to `strcmp' */
|
||||
|
||||
static char *alternative_name;
|
||||
static const char *length_str;
|
||||
static const char *delay_type_str;
|
||||
static const char *delay_1_0_str;
|
||||
static const char *num_delay_slots_str;
|
||||
|
||||
/* Indicate that REG_DEAD notes are valid if dead_or_set_p is ever
|
||||
called. */
|
||||
@ -365,6 +379,8 @@ int optimize = 0;
|
||||
(EXP) = (XSTR ((EXP), 1) == current_alternative_string \
|
||||
? true_rtx : false_rtx);
|
||||
|
||||
#define DEF_ATTR_STRING(S) (attr_string ((S), strlen (S)))
|
||||
|
||||
/* These are referenced by rtlanal.c and hence need to be defined somewhere.
|
||||
They won't actually be used. */
|
||||
|
||||
@ -449,7 +465,7 @@ static int write_expr_attr_cache (rtx, struct attr_desc *);
|
||||
static void write_toplevel_expr (rtx);
|
||||
static void write_const_num_delay_slots (void);
|
||||
static char *next_comma_elt (const char **);
|
||||
static struct attr_desc *find_attr (const char *, int);
|
||||
static struct attr_desc *find_attr (const char **, int);
|
||||
static struct attr_value *find_most_used (struct attr_desc *);
|
||||
static rtx find_single_value (struct attr_desc *);
|
||||
static void extend_range (struct range *, int, int);
|
||||
@ -605,8 +621,7 @@ attr_rtx_1 (enum rtx_code code, va_list p)
|
||||
{
|
||||
char *arg0 = va_arg (p, char *);
|
||||
|
||||
if (code == SYMBOL_REF)
|
||||
arg0 = attr_string (arg0, strlen (arg0));
|
||||
arg0 = DEF_ATTR_STRING (arg0);
|
||||
|
||||
hashcode = ((HOST_WIDE_INT) code + RTL_HASH (arg0));
|
||||
for (h = attr_hash_table[hashcode % RTL_HASH_SIZE]; h; h = h->next)
|
||||
@ -735,14 +750,13 @@ attr_printf (unsigned int len, const char *fmt, ...)
|
||||
vsprintf (str, fmt, p);
|
||||
va_end (p);
|
||||
|
||||
return attr_string (str, strlen (str));
|
||||
return DEF_ATTR_STRING (str);
|
||||
}
|
||||
|
||||
static rtx
|
||||
attr_eq (const char *name, const char *value)
|
||||
{
|
||||
return attr_rtx (EQ_ATTR, attr_string (name, strlen (name)),
|
||||
attr_string (value, strlen (value)));
|
||||
return attr_rtx (EQ_ATTR, DEF_ATTR_STRING (name), DEF_ATTR_STRING (value));
|
||||
}
|
||||
|
||||
static const char *
|
||||
@ -915,7 +929,7 @@ check_attr_test (rtx exp, int is_const, int lineno)
|
||||
|
||||
else if (n_comma_elts (XSTR (exp, 1)) == 1)
|
||||
{
|
||||
attr = find_attr (XSTR (exp, 0), 0);
|
||||
attr = find_attr (&XSTR (exp, 0), 0);
|
||||
if (attr == NULL)
|
||||
{
|
||||
if (! strcmp (XSTR (exp, 0), "alternative"))
|
||||
@ -1165,7 +1179,7 @@ check_attr_value (rtx exp, struct attr_desc *attr)
|
||||
|
||||
case ATTR:
|
||||
{
|
||||
struct attr_desc *attr2 = find_attr (XSTR (exp, 0), 0);
|
||||
struct attr_desc *attr2 = find_attr (&XSTR (exp, 0), 0);
|
||||
if (attr2 == NULL)
|
||||
{
|
||||
message_with_line (attr ? attr->lineno : 0,
|
||||
@ -1325,7 +1339,7 @@ check_defs (void)
|
||||
if (value == NULL_RTX)
|
||||
continue;
|
||||
|
||||
if ((attr = find_attr (XSTR (XEXP (value, 0), 0), 0)) == NULL)
|
||||
if ((attr = find_attr (&XSTR (XEXP (value, 0), 0), 0)) == NULL)
|
||||
{
|
||||
message_with_line (id->lineno, "unknown attribute %s",
|
||||
XSTR (XEXP (value, 0), 0));
|
||||
@ -1363,6 +1377,8 @@ make_canonical (struct attr_desc *attr, rtx exp)
|
||||
fatal ("(attr_value \"*\") used in invalid context");
|
||||
exp = attr->default_val->value;
|
||||
}
|
||||
else
|
||||
XSTR (exp, 0) = DEF_ATTR_STRING (XSTR (exp, 0));
|
||||
|
||||
break;
|
||||
|
||||
@ -1423,6 +1439,17 @@ copy_boolean (rtx exp)
|
||||
if (GET_CODE (exp) == AND || GET_CODE (exp) == IOR)
|
||||
return attr_rtx (GET_CODE (exp), copy_boolean (XEXP (exp, 0)),
|
||||
copy_boolean (XEXP (exp, 1)));
|
||||
if (GET_CODE (exp) == MATCH_OPERAND)
|
||||
{
|
||||
XSTR (exp, 1) = DEF_ATTR_STRING (XSTR (exp, 1));
|
||||
XSTR (exp, 2) = DEF_ATTR_STRING (XSTR (exp, 2));
|
||||
}
|
||||
else if (GET_CODE (exp) == EQ_ATTR)
|
||||
{
|
||||
XSTR (exp, 0) = DEF_ATTR_STRING (XSTR (exp, 0));
|
||||
XSTR (exp, 1) = DEF_ATTR_STRING (XSTR (exp, 1));
|
||||
}
|
||||
|
||||
return exp;
|
||||
}
|
||||
|
||||
@ -1503,7 +1530,7 @@ expand_delays (void)
|
||||
= make_numeric_value (XVECLEN (delay->def, 1) / 3);
|
||||
}
|
||||
|
||||
make_internal_attr ("*num_delay_slots", condexp, ATTR_NONE);
|
||||
make_internal_attr (num_delay_slots_str, condexp, ATTR_NONE);
|
||||
|
||||
/* If more than one delay type, do the same for computing the delay type. */
|
||||
if (num_delays > 1)
|
||||
@ -1518,7 +1545,7 @@ expand_delays (void)
|
||||
XVECEXP (condexp, 0, i + 1) = make_numeric_value (delay->num);
|
||||
}
|
||||
|
||||
make_internal_attr ("*delay_type", condexp, ATTR_SPECIAL);
|
||||
make_internal_attr (delay_type_str, condexp, ATTR_SPECIAL);
|
||||
}
|
||||
|
||||
/* For each delay possibility and delay slot, compute an eligibility
|
||||
@ -2238,8 +2265,8 @@ fill_attr (struct attr_desc *attr)
|
||||
value = NULL;
|
||||
if (XVEC (id->def, id->vec_idx))
|
||||
for (i = 0; i < XVECLEN (id->def, id->vec_idx); i++)
|
||||
if (! strcmp (XSTR (XEXP (XVECEXP (id->def, id->vec_idx, i), 0), 0),
|
||||
attr->name))
|
||||
if (! strcmp_check (XSTR (XEXP (XVECEXP (id->def, id->vec_idx, i), 0), 0),
|
||||
attr->name))
|
||||
value = XEXP (XVECEXP (id->def, id->vec_idx, i), 1);
|
||||
|
||||
if (value == NULL)
|
||||
@ -2336,9 +2363,12 @@ substitute_address (rtx exp, rtx (*no_address_fn) (rtx),
|
||||
static void
|
||||
make_length_attrs (void)
|
||||
{
|
||||
static const char *const new_names[] = {"*insn_default_length",
|
||||
"*insn_variable_length_p",
|
||||
"*insn_current_length"};
|
||||
static const char *new_names[] =
|
||||
{
|
||||
"*insn_default_length",
|
||||
"*insn_variable_length_p",
|
||||
"*insn_current_length"
|
||||
};
|
||||
static rtx (*const no_address_fn[]) (rtx) = {identity_fn, zero_fn, zero_fn};
|
||||
static rtx (*const address_fn[]) (rtx) = {max_fn, one_fn, identity_fn};
|
||||
size_t i;
|
||||
@ -2348,7 +2378,7 @@ make_length_attrs (void)
|
||||
|
||||
/* See if length attribute is defined. If so, it must be numeric. Make
|
||||
it special so we don't output anything for it. */
|
||||
length_attr = find_attr ("length", 0);
|
||||
length_attr = find_attr (&length_str, 0);
|
||||
if (length_attr == 0)
|
||||
return;
|
||||
|
||||
@ -2365,7 +2395,7 @@ make_length_attrs (void)
|
||||
substitute_address (length_attr->default_val->value,
|
||||
no_address_fn[i], address_fn[i]),
|
||||
ATTR_NONE);
|
||||
new_attr = find_attr (new_names[i], 0);
|
||||
new_attr = find_attr (&new_names[i], 0);
|
||||
for (av = length_attr->first_value; av; av = av->next)
|
||||
for (ie = av->first_insn; ie; ie = ie->next)
|
||||
{
|
||||
@ -2411,7 +2441,7 @@ max_fn (rtx exp)
|
||||
static void
|
||||
write_length_unit_log (void)
|
||||
{
|
||||
struct attr_desc *length_attr = find_attr ("length", 0);
|
||||
struct attr_desc *length_attr = find_attr (&length_str, 0);
|
||||
struct attr_value *av;
|
||||
struct insn_ent *ie;
|
||||
unsigned int length_unit_log, length_or;
|
||||
@ -2727,7 +2757,7 @@ evaluate_eq_attr (rtx exp, rtx value, int insn_code, int insn_index)
|
||||
|
||||
if (GET_CODE (value) == CONST_STRING)
|
||||
{
|
||||
if (! strcmp (XSTR (value, 0), XSTR (exp, 1)))
|
||||
if (! strcmp_check (XSTR (value, 0), XSTR (exp, 1)))
|
||||
newexp = true_rtx;
|
||||
else
|
||||
newexp = false_rtx;
|
||||
@ -2751,7 +2781,7 @@ evaluate_eq_attr (rtx exp, rtx value, int insn_code, int insn_index)
|
||||
|
||||
newexp = attr_rtx (EQ, value,
|
||||
attr_rtx (SYMBOL_REF,
|
||||
attr_string (string, strlen (string))));
|
||||
DEF_ATTR_STRING (string)));
|
||||
}
|
||||
else if (GET_CODE (value) == COND)
|
||||
{
|
||||
@ -2898,7 +2928,7 @@ simplify_and_tree (rtx exp, rtx *pterm, int insn_code, int insn_index)
|
||||
if (XSTR (exp, 0) != XSTR (*pterm, 0))
|
||||
return exp;
|
||||
|
||||
if (! strcmp (XSTR (exp, 1), XSTR (*pterm, 1)))
|
||||
if (! strcmp_check (XSTR (exp, 1), XSTR (*pterm, 1)))
|
||||
return true_rtx;
|
||||
else
|
||||
return false_rtx;
|
||||
@ -2910,7 +2940,7 @@ simplify_and_tree (rtx exp, rtx *pterm, int insn_code, int insn_index)
|
||||
if (XSTR (*pterm, 0) != XSTR (XEXP (exp, 0), 0))
|
||||
return exp;
|
||||
|
||||
if (! strcmp (XSTR (*pterm, 1), XSTR (XEXP (exp, 0), 1)))
|
||||
if (! strcmp_check (XSTR (*pterm, 1), XSTR (XEXP (exp, 0), 1)))
|
||||
return false_rtx;
|
||||
else
|
||||
return true_rtx;
|
||||
@ -2922,7 +2952,7 @@ simplify_and_tree (rtx exp, rtx *pterm, int insn_code, int insn_index)
|
||||
if (XSTR (exp, 0) != XSTR (XEXP (*pterm, 0), 0))
|
||||
return exp;
|
||||
|
||||
if (! strcmp (XSTR (exp, 1), XSTR (XEXP (*pterm, 0), 1)))
|
||||
if (! strcmp_check (XSTR (exp, 1), XSTR (XEXP (*pterm, 0), 1)))
|
||||
return false_rtx;
|
||||
else
|
||||
*pterm = true_rtx;
|
||||
@ -3036,9 +3066,10 @@ attr_rtx_cost (rtx x)
|
||||
return 10;
|
||||
else
|
||||
return 0;
|
||||
|
||||
case EQ_ATTR:
|
||||
/* Alternatives don't result into function call. */
|
||||
if (!strcmp (XSTR (x, 0), "alternative"))
|
||||
if (!strcmp_check (XSTR (x, 0), alternative_name))
|
||||
return 0;
|
||||
else
|
||||
return 5;
|
||||
@ -3335,7 +3366,7 @@ simplify_test_exp (rtx exp, int insn_code, int insn_index)
|
||||
We normally can replace this comparison with the condition that
|
||||
would give this insn the values being tested for. */
|
||||
if (XSTR (exp, 0) != alternative_name
|
||||
&& (attr = find_attr (XSTR (exp, 0), 0)) != NULL)
|
||||
&& (attr = find_attr (&XSTR (exp, 0), 0)) != NULL)
|
||||
for (av = attr->first_value; av; av = av->next)
|
||||
for (ie = av->first_insn; ie; ie = ie->next)
|
||||
if (ie->insn_code == insn_code)
|
||||
@ -3499,7 +3530,10 @@ simplify_by_exploding (rtx exp)
|
||||
const char *name = XSTR (XEXP (list, 0), 0);
|
||||
rtx *prev;
|
||||
|
||||
if ((space[ndim].attr = find_attr (name, 0)) == 0
|
||||
space[ndim].attr = find_attr (&name, 0);
|
||||
XSTR (XEXP (list, 0), 0) = name;
|
||||
|
||||
if (space[ndim].attr == 0
|
||||
|| space[ndim].attr->is_numeric)
|
||||
{
|
||||
unmark_used_attributes (list, space, ndim);
|
||||
@ -3511,7 +3545,7 @@ simplify_by_exploding (rtx exp)
|
||||
space[ndim].values = 0;
|
||||
prev = &list;
|
||||
for (link = list; link; link = *prev)
|
||||
if (! strcmp (XSTR (XEXP (link, 0), 0), name))
|
||||
if (! strcmp_check (XSTR (XEXP (link, 0), 0), name))
|
||||
{
|
||||
space[ndim].num_values++;
|
||||
*prev = XEXP (link, 1);
|
||||
@ -3965,7 +3999,7 @@ gen_attr (rtx exp, int lineno)
|
||||
|
||||
/* Make a new attribute structure. Check for duplicate by looking at
|
||||
attr->default_val, since it is initialized by this routine. */
|
||||
attr = find_attr (XSTR (exp, 0), 1);
|
||||
attr = find_attr (&XSTR (exp, 0), 1);
|
||||
if (attr->default_val)
|
||||
{
|
||||
message_with_line (lineno, "duplicate definition for attribute %s",
|
||||
@ -4007,7 +4041,7 @@ gen_attr (rtx exp, int lineno)
|
||||
XEXP (exp, 2) = XEXP (XEXP (exp, 2), 0);
|
||||
}
|
||||
|
||||
if (! strcmp (attr->name, "length") && ! attr->is_numeric)
|
||||
if (! strcmp_check (attr->name, length_str) && ! attr->is_numeric)
|
||||
{
|
||||
message_with_line (lineno,
|
||||
"`length' attribute must take numeric values");
|
||||
@ -4251,6 +4285,8 @@ gen_unit (rtx def, int lineno)
|
||||
unit->first_lineno = lineno;
|
||||
units = unit;
|
||||
}
|
||||
else
|
||||
XSTR (def, 0) = unit->name;
|
||||
|
||||
/* Make a new operation class structure entry and initialize it. */
|
||||
op = oballoc (sizeof (struct function_unit_op));
|
||||
@ -4443,7 +4479,7 @@ write_test_expr (rtx exp, int flags)
|
||||
break;
|
||||
}
|
||||
|
||||
attr = find_attr (XSTR (exp, 0), 0);
|
||||
attr = find_attr (&XSTR (exp, 0), 0);
|
||||
if (! attr)
|
||||
abort ();
|
||||
|
||||
@ -4653,7 +4689,7 @@ walk_attr_value (rtx exp)
|
||||
case EQ_ATTR:
|
||||
if (XSTR (exp, 0) == alternative_name)
|
||||
must_extract = must_constrain = 1;
|
||||
else if (strcmp (XSTR (exp, 0), "length") == 0)
|
||||
else if (strcmp_check (XSTR (exp, 0), length_str) == 0)
|
||||
length_used = 1;
|
||||
return;
|
||||
|
||||
@ -5116,7 +5152,7 @@ write_attr_value (struct attr_desc *attr, rtx value)
|
||||
|
||||
case ATTR:
|
||||
{
|
||||
struct attr_desc *attr2 = find_attr (XSTR (value, 0), 0);
|
||||
struct attr_desc *attr2 = find_attr (&XSTR (value, 0), 0);
|
||||
printf ("get_attr_%s (%s)", attr2->name,
|
||||
(attr2->is_const ? "" : "insn"));
|
||||
}
|
||||
@ -5190,6 +5226,7 @@ write_eligible_delay (const char *kind)
|
||||
struct delay_desc *delay;
|
||||
int max_slots;
|
||||
char str[50];
|
||||
const char *pstr;
|
||||
struct attr_desc *attr;
|
||||
struct attr_value *av, *common_av;
|
||||
int i;
|
||||
@ -5218,7 +5255,7 @@ write_eligible_delay (const char *kind)
|
||||
|
||||
if (num_delays > 1)
|
||||
{
|
||||
attr = find_attr ("*delay_type", 0);
|
||||
attr = find_attr (&delay_type_str, 0);
|
||||
if (! attr)
|
||||
abort ();
|
||||
common_av = find_most_used (attr);
|
||||
@ -5247,7 +5284,7 @@ write_eligible_delay (const char *kind)
|
||||
printf (" switch (recog_memoized (insn))\n");
|
||||
printf (" {\n");
|
||||
|
||||
attr = find_attr ("*delay_1_0", 0);
|
||||
attr = find_attr (&delay_1_0_str, 0);
|
||||
if (! attr)
|
||||
abort ();
|
||||
common_av = find_most_used (attr);
|
||||
@ -5277,7 +5314,8 @@ write_eligible_delay (const char *kind)
|
||||
printf ("\t{\n");
|
||||
|
||||
sprintf (str, "*%s_%d_%d", kind, delay->num, i / 3);
|
||||
attr = find_attr (str, 0);
|
||||
pstr = str;
|
||||
attr = find_attr (&pstr, 0);
|
||||
if (! attr)
|
||||
abort ();
|
||||
common_av = find_most_used (attr);
|
||||
@ -5381,6 +5419,7 @@ write_complex_function (struct function_unit *unit,
|
||||
struct attr_value *av, *common_av;
|
||||
rtx value;
|
||||
char str[256];
|
||||
const char *pstr;
|
||||
int using_case;
|
||||
int i;
|
||||
|
||||
@ -5398,7 +5437,8 @@ write_complex_function (struct function_unit *unit,
|
||||
if (strlen (unit->name) + sizeof "*_cases" > 256)
|
||||
abort ();
|
||||
sprintf (str, "*%s_cases", unit->name);
|
||||
case_attr = find_attr (str, 0);
|
||||
pstr = str;
|
||||
case_attr = find_attr (&pstr, 0);
|
||||
if (! case_attr)
|
||||
abort ();
|
||||
common_av = find_most_used (case_attr);
|
||||
@ -5432,7 +5472,8 @@ write_complex_function (struct function_unit *unit,
|
||||
|
||||
printf (" case %d:\n", i);
|
||||
sprintf (str, "*%s_%s_%d", unit->name, connection, i);
|
||||
attr = find_attr (str, 0);
|
||||
pstr = str;
|
||||
attr = find_attr (&pstr, 0);
|
||||
if (! attr)
|
||||
abort ();
|
||||
|
||||
@ -5484,13 +5525,15 @@ next_comma_elt (const char **pstr)
|
||||
}
|
||||
|
||||
/* Return a `struct attr_desc' pointer for a given named attribute. If CREATE
|
||||
is nonzero, build a new attribute, if one does not exist. */
|
||||
is nonzero, build a new attribute, if one does not exist. *NAME_P is
|
||||
replaced by a pointer to a canonical copy of the string. */
|
||||
|
||||
static struct attr_desc *
|
||||
find_attr (const char *name, int create)
|
||||
find_attr (const char **name_p, int create)
|
||||
{
|
||||
struct attr_desc *attr;
|
||||
int index;
|
||||
const char *name = *name_p;
|
||||
|
||||
/* Before we resort to using `strcmp', see if the string address matches
|
||||
anywhere. In most cases, it should have been canonicalized to do so. */
|
||||
@ -5505,19 +5548,24 @@ find_attr (const char *name, int create)
|
||||
/* Otherwise, do it the slow way. */
|
||||
for (attr = attrs[index]; attr; attr = attr->next)
|
||||
if (name[0] == attr->name[0] && ! strcmp (name, attr->name))
|
||||
return attr;
|
||||
{
|
||||
*name_p = attr->name;
|
||||
return attr;
|
||||
}
|
||||
|
||||
if (! create)
|
||||
return NULL;
|
||||
|
||||
attr = oballoc (sizeof (struct attr_desc));
|
||||
attr->name = attr_string (name, strlen (name));
|
||||
attr->name = DEF_ATTR_STRING (name);
|
||||
attr->first_value = attr->default_val = NULL;
|
||||
attr->is_numeric = attr->negative_ok = attr->is_const = attr->is_special = 0;
|
||||
attr->unsigned_p = attr->func_units_p = attr->blockage_p = attr->static_p = 0;
|
||||
attr->next = attrs[index];
|
||||
attrs[index] = attr;
|
||||
|
||||
*name_p = attr->name;
|
||||
|
||||
return attr;
|
||||
}
|
||||
|
||||
@ -5528,7 +5576,7 @@ make_internal_attr (const char *name, rtx value, int special)
|
||||
{
|
||||
struct attr_desc *attr;
|
||||
|
||||
attr = find_attr (name, 1);
|
||||
attr = find_attr (&name, 1);
|
||||
if (attr->default_val)
|
||||
abort ();
|
||||
|
||||
@ -5633,7 +5681,7 @@ copy_rtx_unchanging (rtx orig)
|
||||
static void
|
||||
write_const_num_delay_slots (void)
|
||||
{
|
||||
struct attr_desc *attr = find_attr ("*num_delay_slots", 0);
|
||||
struct attr_desc *attr = find_attr (&num_delay_slots_str, 0);
|
||||
struct attr_value *av;
|
||||
struct insn_ent *ie;
|
||||
|
||||
@ -5691,7 +5739,11 @@ main (int argc, char **argv)
|
||||
ATTR_IND_SIMPLIFIED_P (true_rtx) = ATTR_IND_SIMPLIFIED_P (false_rtx) = 1;
|
||||
ATTR_PERMANENT_P (true_rtx) = ATTR_PERMANENT_P (false_rtx) = 1;
|
||||
|
||||
alternative_name = attr_string ("alternative", strlen ("alternative"));
|
||||
alternative_name = DEF_ATTR_STRING ("alternative");
|
||||
length_str = DEF_ATTR_STRING ("length");
|
||||
delay_type_str = DEF_ATTR_STRING ("*delay_type");
|
||||
delay_1_0_str = DEF_ATTR_STRING ("*delay_1_0");
|
||||
num_delay_slots_str = DEF_ATTR_STRING ("*num_delay_slots");
|
||||
|
||||
printf ("/* Generated automatically by the program `genattrtab'\n\
|
||||
from the machine description file `md'. */\n\n");
|
||||
@ -5874,7 +5926,7 @@ from the machine description file `md'. */\n\n");
|
||||
|
||||
insn_alts_p
|
||||
= (attr->name [0] == '*'
|
||||
&& strcmp (&attr->name [1], INSN_ALTS_FUNC_NAME) == 0);
|
||||
&& strcmp (&attr->name[1], INSN_ALTS_FUNC_NAME) == 0);
|
||||
if (insn_alts_p)
|
||||
printf ("\n#if AUTOMATON_ALTS\n");
|
||||
write_attr_get (attr);
|
||||
|
Loading…
x
Reference in New Issue
Block a user