Commit 9ae60101 by Bernd Schmidt Committed by Bernd Schmidt

genattrtab.c (evaluate_eq_attr): Allow an attribute to be defined in terms of another.

	* genattrtab.c (evaluate_eq_attr): Allow an attribute to be defined
	in terms of another.
	(write_attr_value): Write a cast if necessary.

From-SVN: r176047
parent 329af3c7
2011-07-08 Bernd Schmidt <bernds@codesourcery.com>
* genattrtab.c (evaluate_eq_attr): Allow an attribute to be defined
in terms of another.
(write_attr_value): Write a cast if necessary.
2011-07-08 Richard Guenther <rguenther@suse.de> 2011-07-08 Richard Guenther <rguenther@suse.de>
* fold-const.c (fold_binary_loc): Remove index +p PTR -> PTR +p index * fold-const.c (fold_binary_loc): Remove index +p PTR -> PTR +p index
...@@ -19,7 +25,7 @@ ...@@ -19,7 +25,7 @@
overlapping when it is call to address. overlapping when it is call to address.
2011-07-08 Georg-Johann Lay <avr@gjlay.de> 2011-07-08 Georg-Johann Lay <avr@gjlay.de>
* config/avr/avr.c (output_reload_insisf): Use 'REG_Z+1' instead * config/avr/avr.c (output_reload_insisf): Use 'REG_Z+1' instead
of magic '31'. of magic '31'.
......
...@@ -1916,6 +1916,37 @@ evaluate_eq_attr (rtx exp, struct attr_desc *attr, rtx value, ...@@ -1916,6 +1916,37 @@ evaluate_eq_attr (rtx exp, struct attr_desc *attr, rtx value,
rtx newexp; rtx newexp;
int i; int i;
while (GET_CODE (value) == ATTR)
{
struct attr_value *av = NULL;
attr = find_attr (&XSTR (value, 0), 0);
if (insn_code_values)
{
struct attr_value_list *iv;
for (iv = insn_code_values[insn_code]; iv; iv = iv->next)
if (iv->attr == attr)
{
av = iv->av;
break;
}
}
else
{
struct insn_ent *ie;
for (av = attr->first_value; av; av = av->next)
for (ie = av->first_insn; ie; ie = ie->next)
if (ie->def->insn_code == insn_code)
goto got_av;
}
if (av)
{
got_av:
value = av->value;
}
}
switch (GET_CODE (value)) switch (GET_CODE (value))
{ {
case CONST_STRING: case CONST_STRING:
...@@ -4119,6 +4150,13 @@ write_attr_value (struct attr_desc *attr, rtx value) ...@@ -4119,6 +4150,13 @@ write_attr_value (struct attr_desc *attr, rtx value)
case ATTR: case ATTR:
{ {
struct attr_desc *attr2 = find_attr (&XSTR (value, 0), 0); struct attr_desc *attr2 = find_attr (&XSTR (value, 0), 0);
if (attr->enum_name)
printf ("(enum %s)", attr->enum_name);
else if (!attr->is_numeric)
printf ("(enum attr_%s)", attr->name);
else if (!attr2->is_numeric)
printf ("(int)");
printf ("get_attr_%s (%s)", attr2->name, printf ("get_attr_%s (%s)", attr2->name,
(attr2->is_const ? "" : "insn")); (attr2->is_const ? "" : "insn"));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment