* ld-insn.c (print_insn_words): For fields, print conditionals.

This commit is contained in:
Hans-Peter Nilsson 2011-07-08 08:37:27 +00:00
parent f72344f7a1
commit ae9cd41118
2 changed files with 32 additions and 0 deletions

View File

@ -1,5 +1,7 @@
2011-07-08 Hans-Peter Nilsson <hp@axis.com>
* ld-insn.c (print_insn_words): For fields, print conditionals.
Correct handling of constant named fields.
* gen.c (insn_field_cmp): Tweak comment about neither field
being an insn_field_string with a cond_eq-to-value condition.

View File

@ -1289,6 +1289,8 @@ print_insn_words (lf *file, insn_entry * insn)
insn_field_entry *field = word->first;
while (1)
{
insn_field_cond *cond;
if (options.insn_specifying_widths)
lf_printf (file, "%d.", field->width);
else
@ -1310,6 +1312,34 @@ print_insn_words (lf *file, insn_entry * insn)
break;
case insn_field_string:
lf_printf (file, "%s", field->val_string);
if (field->conditions == NULL)
break;
if (field->conditions->test == insn_field_cond_eq)
{
if (field->conditions->type == insn_field_cond_value)
lf_printf (file, "=%ld",
(long) field->conditions->value);
else
lf_printf (file, "=%s", field->conditions->string);
/* There can be only one equality condition. */
ASSERT (field->conditions->next == NULL);
break;
}
for (cond = field->conditions;
cond != NULL;
cond = cond->next)
{
ASSERT (cond->test == insn_field_cond_ne);
if (cond->type == insn_field_cond_value)
lf_printf (file, "!%ld", (long) cond->value);
else
lf_printf (file, "!%s", cond->string);
}
break;
}
if (field == word->last)