2002-11-22 Andrew Cagney <cagney@redhat.com>

* gen.c (name_cmp): Rename format_name_cmp.
	(insn_list_insert): When a merge, compare the format name and
	instruction name.  Add trace messages.
This commit is contained in:
Andrew Cagney 2002-11-22 23:20:46 +00:00
parent 3f4147632f
commit 1fdb3c684d
2 changed files with 52 additions and 14 deletions

View File

@ -1,3 +1,9 @@
2002-11-22 Andrew Cagney <cagney@redhat.com>
* gen.c (name_cmp): Rename format_name_cmp.
(insn_list_insert): When a merge, compare the format name and
instruction name. Add trace messages.
2002-11-21 Andrew Cagney <ac131313@redhat.com>
* filter.c: Re-indent.

View File

@ -296,7 +296,7 @@ new_opcode_bits (opcode_bits *old_bits,
/* Same as strcmp(). */
static int
format_name_cmp (const char *l, const char *r)
name_cmp (const char *l, const char *r)
{
if (l == NULL && r == NULL)
return 0;
@ -350,19 +350,35 @@ insn_list_insert (insn_list **cur_insn_ptr,
else if (cmp > 0)
continue;
/* key#4 sort according to the format-name. If two apparently
identical instructions have unique format-names, then the
instructions are different. This is because the
format-name's use is overloaded, it not only indicates the
format name but also provides a unique semantic name for the
function. */
cmp =
format_name_cmp (insn->format_name,
(*cur_insn_ptr)->insn->format_name);
if (cmp < 0)
break;
else if (cmp > 0)
continue;
if (duplicate_action == merge_duplicate_insns)
{
/* key#4: If we're going to merge duplicates, also sort
according to the format_name. Two instructions with
identical decode patterns, but different names, are
considered different when merging. Duplicates are only
important when creating a decode table (implied by
report_duplicate_insns) as such a table only has the
instruction's bit code as a way of differentiating
between instructions. */
int cmp = name_cmp (insn->format_name,
(*cur_insn_ptr)->insn->format_name);
if (cmp < 0)
break;
else if (cmp > 0)
continue;
}
if (duplicate_action == merge_duplicate_insns)
{
/* key#5: If we're going to merge duplicates, also sort
according to the name. See comment above for
format_name. */
int cmp = name_cmp (insn->name, (*cur_insn_ptr)->insn->name);
if (cmp < 0)
break;
else if (cmp > 0)
continue;
}
/* duplicate keys, report problem */
switch (duplicate_action)
@ -379,6 +395,15 @@ insn_list_insert (insn_list **cur_insn_ptr,
"Location of duplicate instruction\n");
case merge_duplicate_insns:
/* Add the opcode path to the instructions list */
if (options.trace.insn_insertion)
{
notify ((*cur_insn_ptr)->insn->line,
"%s.%s: insert merge %s.%s\n",
(*cur_insn_ptr)->insn->format_name,
(*cur_insn_ptr)->insn->name,
insn->format_name,
insn->name);
}
if (opcodes != NULL)
{
insn_opcodes **last = &(*cur_insn_ptr)->opcodes;
@ -400,6 +425,13 @@ insn_list_insert (insn_list **cur_insn_ptr,
/* create a new list entry and insert it */
{
insn_list *new_insn = ZALLOC (insn_list);
if (options.trace.insn_insertion)
{
notify (insn->line,
"%s.%s: insert new\n",
insn->format_name,
insn->name);
}
new_insn->insn = insn;
new_insn->expanded_bits = expanded_bits;
new_insn->next = (*cur_insn_ptr);