mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-24 12:39:59 +00:00
Misc assembly/disassembly fixes.
This commit is contained in:
parent
dc8d251e9c
commit
aa170a07eb
@ -1,3 +1,20 @@
|
||||
2000-04-22 Timothy Wall <twall@cygnus.com>
|
||||
|
||||
* ia64-gen.c (general): Add an ordered table of primary
|
||||
opcode names, as well as priority fields to disassembly data
|
||||
structures to enforce a preferred disassembly format based on the
|
||||
ordering of the opcode tables.
|
||||
(load_insn_classes): Show a useful message if IC tables are missing.
|
||||
(load_depfile): Ditto.
|
||||
* ia64-asmtab.h (struct ia64_dis_names ): Add priority flag to
|
||||
distinguish preferred disassembly.
|
||||
* ia64-opc-f.c: Reorder some insn for preferred disassembly
|
||||
format. Fix incorrect flag on fma.s/fma.s.s0.
|
||||
* ia64-opc.c: Scan *all* disassembly matches and use the one with
|
||||
the highest priority.
|
||||
* ia64-opc-b.c: Use more abbreviations.
|
||||
* ia64-asmtab.c: Regenerate.
|
||||
|
||||
Fri Apr 21 16:03:39 2000 Jason Eckhardt <jle@cygnus.com>
|
||||
|
||||
* hppa-dis.c (extract_16): New function.
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -140,6 +140,9 @@ struct ia64_dis_names
|
||||
for this instruction encoding. Which one to use is determined by
|
||||
the instruction type and other factors (see opcode_verify ()). */
|
||||
unsigned int next_flag : 1;
|
||||
|
||||
/* The disassembly priority of this entry among instructions. */
|
||||
unsigned short priority;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -68,7 +68,12 @@ struct main_entry
|
||||
struct completer_entry *completers;
|
||||
/* Next entry in the chain. */
|
||||
struct main_entry *next;
|
||||
} *maintable;
|
||||
/* Index in the main table. */
|
||||
int main_index;
|
||||
} *maintable, **ordered_table;
|
||||
int otlen = 0;
|
||||
int ottotlen = 0;
|
||||
int opcode_count = 0;
|
||||
|
||||
/* The set of possible completers for an opcode. */
|
||||
struct completer_entry
|
||||
@ -104,8 +109,11 @@ struct completer_entry
|
||||
list). This field is filled in by compute_completer_bits (). */
|
||||
ia64_insn mask;
|
||||
|
||||
/* Index into the opcode dependency list, or -1 if none */
|
||||
/* Index into the opcode dependency list, or -1 if none. */
|
||||
int dependencies;
|
||||
|
||||
/* Remember the order encountered in the opcode tables. */
|
||||
int order;
|
||||
};
|
||||
|
||||
/* One entry in the disassembler name table. */
|
||||
@ -117,6 +125,9 @@ struct disent
|
||||
/* The index into the main_table[] array. */
|
||||
int insn;
|
||||
|
||||
/* The disassmbly priority of this entry. */
|
||||
int priority;
|
||||
|
||||
/* The completer_index value for this entry. */
|
||||
int completer_index;
|
||||
|
||||
@ -135,7 +146,7 @@ struct disent
|
||||
struct bittree
|
||||
{
|
||||
struct disent *disent;
|
||||
struct bittree *bits[3];
|
||||
struct bittree *bits[3]; /* 0, 1, and X (don't care) */
|
||||
int bits_to_skip;
|
||||
int skip_flag;
|
||||
} *bittree;
|
||||
@ -502,6 +513,11 @@ load_insn_classes()
|
||||
FILE *fp = fopen("ia64-ic.tbl", "r");
|
||||
char buf[2048];
|
||||
|
||||
if (fp == NULL){
|
||||
fprintf (stderr, "Can't find ia64-ic.tbl for reading\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* discard first line */
|
||||
fgets (buf, sizeof(buf), fp);
|
||||
|
||||
@ -707,6 +723,11 @@ load_depfile (const char *filename, enum ia64_dependency_mode mode)
|
||||
FILE *fp = fopen(filename, "r");
|
||||
char buf[1024];
|
||||
|
||||
if (fp == NULL){
|
||||
fprintf (stderr, "Can't find %s for reading\n", filename);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fgets(buf, sizeof(buf), fp);
|
||||
while (!feof(fp))
|
||||
{
|
||||
@ -1577,9 +1598,10 @@ make_bittree_entry ()
|
||||
}
|
||||
|
||||
struct disent *
|
||||
add_dis_table_ent (which, insn, completer_index)
|
||||
add_dis_table_ent (which, insn, order, completer_index)
|
||||
struct disent *which;
|
||||
int insn;
|
||||
int order;
|
||||
int completer_index;
|
||||
{
|
||||
int ci = 0;
|
||||
@ -1606,6 +1628,8 @@ add_dis_table_ent (which, insn, completer_index)
|
||||
ent->nextcnt = 0;
|
||||
ent->nexte = NULL;
|
||||
ent->insn = insn;
|
||||
ent->priority = order;
|
||||
|
||||
while (completer_index != 1)
|
||||
{
|
||||
ci = (ci << 1) | (completer_index & 1);
|
||||
@ -1630,12 +1654,14 @@ finish_distable ()
|
||||
}
|
||||
|
||||
void
|
||||
insert_bit_table_ent (curr_ent, bit, opcode, mask, opcodenum, completer_index)
|
||||
insert_bit_table_ent (curr_ent, bit, opcode, mask,
|
||||
opcodenum, order, completer_index)
|
||||
struct bittree *curr_ent;
|
||||
int bit;
|
||||
ia64_insn opcode;
|
||||
ia64_insn mask;
|
||||
int opcodenum;
|
||||
int order;
|
||||
int completer_index;
|
||||
{
|
||||
ia64_insn m;
|
||||
@ -1644,7 +1670,8 @@ insert_bit_table_ent (curr_ent, bit, opcode, mask, opcodenum, completer_index)
|
||||
|
||||
if (bit == -1)
|
||||
{
|
||||
struct disent *nent = add_dis_table_ent (curr_ent->disent, opcodenum,
|
||||
struct disent *nent = add_dis_table_ent (curr_ent->disent,
|
||||
opcodenum, order,
|
||||
completer_index);
|
||||
curr_ent->disent = nent;
|
||||
return;
|
||||
@ -1666,13 +1693,13 @@ insert_bit_table_ent (curr_ent, bit, opcode, mask, opcodenum, completer_index)
|
||||
next = make_bittree_entry ();
|
||||
curr_ent->bits[b] = next;
|
||||
}
|
||||
insert_bit_table_ent (next, bit - 1, opcode, mask, opcodenum,
|
||||
insert_bit_table_ent (next, bit - 1, opcode, mask, opcodenum, order,
|
||||
completer_index);
|
||||
}
|
||||
|
||||
void
|
||||
add_dis_entry (first, opcode, mask, opcodenum, ent, completer_index)
|
||||
int first;
|
||||
struct bittree *first;
|
||||
ia64_insn opcode;
|
||||
ia64_insn mask;
|
||||
int opcodenum;
|
||||
@ -1690,7 +1717,8 @@ add_dis_entry (first, opcode, mask, opcodenum, ent, completer_index)
|
||||
(completer_index << 1) | 1);
|
||||
if (ent->is_terminal)
|
||||
{
|
||||
insert_bit_table_ent (bittree, 40, newopcode, mask, opcodenum,
|
||||
insert_bit_table_ent (bittree, 40, newopcode, mask,
|
||||
opcodenum, opcode_count - ent->order - 1,
|
||||
(completer_index << 1) | 1);
|
||||
}
|
||||
completer_index <<= 1;
|
||||
@ -2035,9 +2063,9 @@ print_dis_table ()
|
||||
|
||||
while (ent != NULL)
|
||||
{
|
||||
printf ("{ 0x%x, %d, %d },\n", ent->completer_index,
|
||||
ent->insn,
|
||||
(ent->nexte != NULL ? 1 : 0));
|
||||
printf ("{ 0x%x, %d, %d, %d },\n", ent->completer_index,
|
||||
ent->insn, (ent->nexte != NULL ? 1 : 0),
|
||||
ent->priority);
|
||||
ent = ent->nexte;
|
||||
}
|
||||
cent = cent->next_ent;
|
||||
@ -2048,21 +2076,21 @@ print_dis_table ()
|
||||
void
|
||||
generate_disassembler ()
|
||||
{
|
||||
int mainnum = 0;
|
||||
struct main_entry *ptr = maintable;
|
||||
int i;
|
||||
|
||||
bittree = make_bittree_entry ();
|
||||
|
||||
while (ptr != NULL)
|
||||
for (i=0; i < otlen;i++)
|
||||
{
|
||||
struct main_entry *ptr = ordered_table[i];
|
||||
|
||||
if (ptr->opcode->type != IA64_TYPE_DYN)
|
||||
{
|
||||
add_dis_entry (bittree,
|
||||
ptr->opcode->opcode, ptr->opcode->mask, mainnum,
|
||||
ptr->opcode->opcode, ptr->opcode->mask,
|
||||
ptr->main_index,
|
||||
ptr->completers, 1);
|
||||
}
|
||||
mainnum++;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
|
||||
compact_distree (bittree);
|
||||
@ -2123,7 +2151,8 @@ completer_entries_eq (ent1, ent2)
|
||||
|| ent1->bits != ent2->bits
|
||||
|| ent1->mask != ent2->mask
|
||||
|| ent1->is_terminal != ent2->is_terminal
|
||||
|| ent1->dependencies != ent2->dependencies)
|
||||
|| ent1->dependencies != ent2->dependencies
|
||||
|| ent1->order != ent2->order)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@ -2448,9 +2477,10 @@ insert_opcode_dependencies (opc, cmp)
|
||||
}
|
||||
|
||||
void
|
||||
insert_completer_entry (opc, tabent)
|
||||
insert_completer_entry (opc, tabent, order)
|
||||
struct ia64_opcode *opc;
|
||||
struct main_entry *tabent;
|
||||
int order;
|
||||
{
|
||||
struct completer_entry **ptr = &tabent->completers;
|
||||
struct completer_entry *parent = NULL;
|
||||
@ -2487,10 +2517,6 @@ insert_completer_entry (opc, tabent)
|
||||
need_new_ent = 0;
|
||||
break;
|
||||
}
|
||||
else if (cmpres < 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr = &((*ptr)->alternative);
|
||||
@ -2526,6 +2552,7 @@ insert_completer_entry (opc, tabent)
|
||||
(*ptr)->bits = opc->opcode;
|
||||
|
||||
(*ptr)->dependencies = insert_opcode_dependencies (opc, *ptr);
|
||||
(*ptr)->order = order;
|
||||
}
|
||||
|
||||
void
|
||||
@ -2622,7 +2649,8 @@ add_opcode_entry (opc)
|
||||
name = insert_string (prefix);
|
||||
|
||||
/* Walk the list of opcode table entries. If it's a new
|
||||
instruction, allocate and fill in a new entry. */
|
||||
instruction, allocate and fill in a new entry. Note
|
||||
the main table is alphabetical by opcode name. */
|
||||
|
||||
while (*place != NULL)
|
||||
{
|
||||
@ -2647,14 +2675,23 @@ add_opcode_entry (opc)
|
||||
nent->next = *place;
|
||||
nent->completers = 0;
|
||||
*place = nent;
|
||||
|
||||
if (otlen == ottotlen)
|
||||
{
|
||||
ottotlen += 20;
|
||||
ordered_table = (struct main_entry **)
|
||||
xrealloc (ordered_table, sizeof (struct main_entry *) * ottotlen);
|
||||
}
|
||||
ordered_table[otlen++] = nent;
|
||||
}
|
||||
insert_completer_entry (opc, *place);
|
||||
insert_completer_entry (opc, *place, opcode_count++);
|
||||
}
|
||||
|
||||
void
|
||||
print_main_table ()
|
||||
{
|
||||
struct main_entry *ptr = maintable;
|
||||
int index = 0;
|
||||
|
||||
printf ("static const struct ia64_main_table\nmain_table[] = {\n");
|
||||
while (ptr != NULL)
|
||||
@ -2673,6 +2710,8 @@ print_main_table ()
|
||||
ptr->opcode->flags,
|
||||
ptr->completers->num);
|
||||
|
||||
ptr->main_index = index++;
|
||||
|
||||
ptr = ptr->next;
|
||||
}
|
||||
printf ("};\n\n");
|
||||
|
@ -237,54 +237,57 @@ struct ia64_opcode ia64_opcodes_b[] =
|
||||
{"br.many.clr", BR (1, 1)},
|
||||
#undef BR
|
||||
|
||||
{"br.cond.sptk.few", B0, OpBtypePaWhaD (4, 0, 0, 0, 0), {TGT25c}},
|
||||
{"br.cond.sptk", B0, OpBtypePaWhaD (4, 0, 0, 0, 0), {TGT25c}, PSEUDO},
|
||||
{"br.cond.sptk.few.clr", B0, OpBtypePaWhaD (4, 0, 0, 0, 1), {TGT25c}},
|
||||
{"br.cond.sptk.clr", B0, OpBtypePaWhaD (4, 0, 0, 0, 1), {TGT25c}, PSEUDO},
|
||||
{"br.cond.spnt.few", B0, OpBtypePaWhaD (4, 0, 0, 1, 0), {TGT25c}},
|
||||
{"br.cond.spnt", B0, OpBtypePaWhaD (4, 0, 0, 1, 0), {TGT25c}, PSEUDO},
|
||||
{"br.cond.spnt.few.clr", B0, OpBtypePaWhaD (4, 0, 0, 1, 1), {TGT25c}},
|
||||
{"br.cond.spnt.clr", B0, OpBtypePaWhaD (4, 0, 0, 1, 1), {TGT25c}, PSEUDO},
|
||||
{"br.cond.dptk.few", B0, OpBtypePaWhaD (4, 0, 0, 2, 0), {TGT25c}},
|
||||
{"br.cond.dptk", B0, OpBtypePaWhaD (4, 0, 0, 2, 0), {TGT25c}, PSEUDO},
|
||||
{"br.cond.dptk.few.clr", B0, OpBtypePaWhaD (4, 0, 0, 2, 1), {TGT25c}},
|
||||
{"br.cond.dptk.clr", B0, OpBtypePaWhaD (4, 0, 0, 2, 1), {TGT25c}, PSEUDO},
|
||||
{"br.cond.dpnt.few", B0, OpBtypePaWhaD (4, 0, 0, 3, 0), {TGT25c}},
|
||||
{"br.cond.dpnt", B0, OpBtypePaWhaD (4, 0, 0, 3, 0), {TGT25c}, PSEUDO},
|
||||
{"br.cond.dpnt.few.clr", B0, OpBtypePaWhaD (4, 0, 0, 3, 1), {TGT25c}},
|
||||
{"br.cond.dpnt.clr", B0, OpBtypePaWhaD (4, 0, 0, 3, 1), {TGT25c}, PSEUDO},
|
||||
{"br.cond.sptk.many", B0, OpBtypePaWhaD (4, 0, 1, 0, 0), {TGT25c}},
|
||||
{"br.cond.sptk.many.clr", B0, OpBtypePaWhaD (4, 0, 1, 0, 1), {TGT25c}},
|
||||
{"br.cond.spnt.many", B0, OpBtypePaWhaD (4, 0, 1, 1, 0), {TGT25c}},
|
||||
{"br.cond.spnt.many.clr", B0, OpBtypePaWhaD (4, 0, 1, 1, 1), {TGT25c}},
|
||||
{"br.cond.dptk.many", B0, OpBtypePaWhaD (4, 0, 1, 2, 0), {TGT25c}},
|
||||
{"br.cond.dptk.many.clr", B0, OpBtypePaWhaD (4, 0, 1, 2, 1), {TGT25c}},
|
||||
{"br.cond.dpnt.many", B0, OpBtypePaWhaD (4, 0, 1, 3, 0), {TGT25c}},
|
||||
{"br.cond.dpnt.many.clr", B0, OpBtypePaWhaD (4, 0, 1, 3, 1), {TGT25c}},
|
||||
{"br.sptk.few", B0, OpBtypePaWhaD (4, 0, 0, 0, 0), {TGT25c}},
|
||||
{"br.sptk", B0, OpBtypePaWhaD (4, 0, 0, 0, 0), {TGT25c}, PSEUDO},
|
||||
{"br.sptk.few.clr", B0, OpBtypePaWhaD (4, 0, 0, 0, 1), {TGT25c}},
|
||||
{"br.sptk.clr", B0, OpBtypePaWhaD (4, 0, 0, 0, 1), {TGT25c}, PSEUDO},
|
||||
{"br.spnt.few", B0, OpBtypePaWhaD (4, 0, 0, 1, 0), {TGT25c}},
|
||||
{"br.spnt", B0, OpBtypePaWhaD (4, 0, 0, 1, 0), {TGT25c}, PSEUDO},
|
||||
{"br.spnt.few.clr", B0, OpBtypePaWhaD (4, 0, 0, 1, 1), {TGT25c}},
|
||||
{"br.spnt.clr", B0, OpBtypePaWhaD (4, 0, 0, 1, 1), {TGT25c}, PSEUDO},
|
||||
{"br.dptk.few", B0, OpBtypePaWhaD (4, 0, 0, 2, 0), {TGT25c}},
|
||||
{"br.dptk", B0, OpBtypePaWhaD (4, 0, 0, 2, 0), {TGT25c}, PSEUDO},
|
||||
{"br.dptk.few.clr", B0, OpBtypePaWhaD (4, 0, 0, 2, 1), {TGT25c}},
|
||||
{"br.dptk.clr", B0, OpBtypePaWhaD (4, 0, 0, 2, 1), {TGT25c}, PSEUDO},
|
||||
{"br.dpnt.few", B0, OpBtypePaWhaD (4, 0, 0, 3, 0), {TGT25c}},
|
||||
{"br.dpnt", B0, OpBtypePaWhaD (4, 0, 0, 3, 0), {TGT25c}, PSEUDO},
|
||||
{"br.dpnt.few.clr", B0, OpBtypePaWhaD (4, 0, 0, 3, 1), {TGT25c}},
|
||||
{"br.dpnt.clr", B0, OpBtypePaWhaD (4, 0, 0, 3, 1), {TGT25c}, PSEUDO},
|
||||
{"br.sptk.many", B0, OpBtypePaWhaD (4, 0, 1, 0, 0), {TGT25c}},
|
||||
{"br.sptk.many.clr", B0, OpBtypePaWhaD (4, 0, 1, 0, 1), {TGT25c}},
|
||||
{"br.spnt.many", B0, OpBtypePaWhaD (4, 0, 1, 1, 0), {TGT25c}},
|
||||
{"br.spnt.many.clr", B0, OpBtypePaWhaD (4, 0, 1, 1, 1), {TGT25c}},
|
||||
{"br.dptk.many", B0, OpBtypePaWhaD (4, 0, 1, 2, 0), {TGT25c}},
|
||||
{"br.dptk.many.clr", B0, OpBtypePaWhaD (4, 0, 1, 2, 1), {TGT25c}},
|
||||
{"br.dpnt.many", B0, OpBtypePaWhaD (4, 0, 1, 3, 0), {TGT25c}},
|
||||
{"br.dpnt.many.clr", B0, OpBtypePaWhaD (4, 0, 1, 3, 1), {TGT25c}},
|
||||
#define BR(a,b,c) \
|
||||
B0, OpBtypePaWhaD (4, 0, a, b, c), {TGT25c}
|
||||
{"br.cond.sptk.few", BR (0, 0, 0)},
|
||||
{"br.cond.sptk", BR (0, 0, 0), PSEUDO},
|
||||
{"br.cond.sptk.few.clr", BR (0, 0, 1)},
|
||||
{"br.cond.sptk.clr", BR (0, 0, 1), PSEUDO},
|
||||
{"br.cond.spnt.few", BR (0, 1, 0)},
|
||||
{"br.cond.spnt", BR (0, 1, 0), PSEUDO},
|
||||
{"br.cond.spnt.few.clr", BR (0, 1, 1)},
|
||||
{"br.cond.spnt.clr", BR (0, 1, 1), PSEUDO},
|
||||
{"br.cond.dptk.few", BR (0, 2, 0)},
|
||||
{"br.cond.dptk", BR (0, 2, 0), PSEUDO},
|
||||
{"br.cond.dptk.few.clr", BR (0, 2, 1)},
|
||||
{"br.cond.dptk.clr", BR (0, 2, 1), PSEUDO},
|
||||
{"br.cond.dpnt.few", BR (0, 3, 0)},
|
||||
{"br.cond.dpnt", BR (0, 3, 0), PSEUDO},
|
||||
{"br.cond.dpnt.few.clr", BR (0, 3, 1)},
|
||||
{"br.cond.dpnt.clr", BR (0, 3, 1), PSEUDO},
|
||||
{"br.cond.sptk.many", BR (1, 0, 0)},
|
||||
{"br.cond.sptk.many.clr", BR (1, 0, 1)},
|
||||
{"br.cond.spnt.many", BR (1, 1, 0)},
|
||||
{"br.cond.spnt.many.clr", BR (1, 1, 1)},
|
||||
{"br.cond.dptk.many", BR (1, 2, 0)},
|
||||
{"br.cond.dptk.many.clr", BR (1, 2, 1)},
|
||||
{"br.cond.dpnt.many", BR (1, 3, 0)},
|
||||
{"br.cond.dpnt.many.clr", BR (1, 3, 1)},
|
||||
{"br.sptk.few", BR (0, 0, 0)},
|
||||
{"br.sptk", BR (0, 0, 0), PSEUDO},
|
||||
{"br.sptk.few.clr", BR (0, 0, 1)},
|
||||
{"br.sptk.clr", BR (0, 0, 1), PSEUDO},
|
||||
{"br.spnt.few", BR (0, 1, 0)},
|
||||
{"br.spnt", BR (0, 1, 0), PSEUDO},
|
||||
{"br.spnt.few.clr", BR (0, 1, 1)},
|
||||
{"br.spnt.clr", BR (0, 1, 1), PSEUDO},
|
||||
{"br.dptk.few", BR (0, 2, 0)},
|
||||
{"br.dptk", BR (0, 2, 0), PSEUDO},
|
||||
{"br.dptk.few.clr", BR (0, 2, 1)},
|
||||
{"br.dptk.clr", BR (0, 2, 1), PSEUDO},
|
||||
{"br.dpnt.few", BR (0, 3, 0)},
|
||||
{"br.dpnt", BR (0, 3, 0), PSEUDO},
|
||||
{"br.dpnt.few.clr", BR (0, 3, 1)},
|
||||
{"br.dpnt.clr", BR (0, 3, 1), PSEUDO},
|
||||
{"br.sptk.many", BR (1, 0, 0)},
|
||||
{"br.sptk.many.clr", BR (1, 0, 1)},
|
||||
{"br.spnt.many", BR (1, 1, 0)},
|
||||
{"br.spnt.many.clr", BR (1, 1, 1)},
|
||||
{"br.dptk.many", BR (1, 2, 0)},
|
||||
{"br.dptk.many.clr", BR (1, 2, 1)},
|
||||
{"br.dpnt.many", BR (1, 3, 0)},
|
||||
{"br.dpnt.many.clr", BR (1, 3, 1)},
|
||||
#undef BR
|
||||
|
||||
#define BR(a,b,c,d) \
|
||||
B0, OpBtypePaWhaD (4, a, b, c, d), {TGT25c}, SLOT2
|
||||
|
@ -113,9 +113,9 @@ struct ia64_opcode ia64_opcodes_f[] =
|
||||
|
||||
{"mov", f, OpXbX6 (0, 0, 0x10), {F1, F3}, PSEUDO | F2_EQ_F3},
|
||||
{"fabs", f, OpXbX6F2 (0, 0, 0x10, 0), {F1, F3}, PSEUDO},
|
||||
{"fmerge.s", f, OpXbX6 (0, 0, 0x10), {F1, F2, F3}},
|
||||
{"fneg", f, OpXbX6 (0, 0, 0x11), {F1, F3}, PSEUDO | F2_EQ_F3},
|
||||
{"fnegabs", f, OpXbX6F2 (0, 0, 0x11, 0), {F1, F3}, PSEUDO},
|
||||
{"fmerge.s", f, OpXbX6 (0, 0, 0x10), {F1, F2, F3}},
|
||||
{"fmerge.ns", f, OpXbX6 (0, 0, 0x11), {F1, F2, F3}},
|
||||
|
||||
{"fmerge.se", f, OpXbX6 (0, 0, 0x12), {F1, F2, F3}},
|
||||
@ -249,9 +249,9 @@ struct ia64_opcode ia64_opcodes_f[] =
|
||||
{"fpcmp.ord.s3", f, OpXbX6Sf (1, 0, 0x37, 3), {F1, F2, F3}},
|
||||
|
||||
{"fpabs", f, OpXbX6F2 (1, 0, 0x10, 0), {F1, F3}, PSEUDO},
|
||||
{"fpmerge.s", f, OpXbX6 (1, 0, 0x10), {F1, F2, F3}},
|
||||
{"fpneg", f, OpXbX6 (1, 0, 0x11), {F1, F3}, PSEUDO | F2_EQ_F3},
|
||||
{"fpnegabs", f, OpXbX6F2 (1, 0, 0x11, 0), {F1, F3}, PSEUDO},
|
||||
{"fpmerge.s", f, OpXbX6 (1, 0, 0x10), {F1, F2, F3}},
|
||||
{"fpmerge.ns", f, OpXbX6 (1, 0, 0x11), {F1, F2, F3}},
|
||||
{"fpmerge.se", f, OpXbX6 (1, 0, 0x12), {F1, F2, F3}},
|
||||
|
||||
@ -450,8 +450,8 @@ struct ia64_opcode ia64_opcodes_f[] =
|
||||
{"fma.s1", f, OpXaSf (0x8, 0, 1), {F1, F3, F4, F2}},
|
||||
{"fma.s2", f, OpXaSf (0x8, 0, 2), {F1, F3, F4, F2}},
|
||||
{"fma.s3", f, OpXaSf (0x8, 0, 3), {F1, F3, F4, F2}},
|
||||
{"fma.s.s0", f, OpXaSf (0x8, 1, 0), {F1, F3, F4, F2}, PSEUDO},
|
||||
{"fma.s", f, OpXaSf (0x8, 1, 0), {F1, F3, F4, F2}},
|
||||
{"fma.s.s0", f, OpXaSf (0x8, 1, 0), {F1, F3, F4, F2}},
|
||||
{"fma.s", f, OpXaSf (0x8, 1, 0), {F1, F3, F4, F2}, PSEUDO},
|
||||
{"fma.s.s1", f, OpXaSf (0x8, 1, 1), {F1, F3, F4, F2}},
|
||||
{"fma.s.s2", f, OpXaSf (0x8, 1, 2), {F1, F3, F4, F2}},
|
||||
{"fma.s.s3", f, OpXaSf (0x8, 1, 3), {F1, F3, F4, F2}},
|
||||
@ -530,6 +530,12 @@ struct ia64_opcode ia64_opcodes_f[] =
|
||||
{"fpms.s2", f, OpXaSf (0xb, 1, 2), {F1, F3, F4, F2}},
|
||||
{"fpms.s3", f, OpXaSf (0xb, 1, 3), {F1, F3, F4, F2}},
|
||||
|
||||
{"fpsub.s0", f, OpXaSfF4 (0xb, 1, 0, 1), {F1, F3, F2}, PSEUDO},
|
||||
{"fpsub", f, OpXaSfF4 (0xb, 1, 0, 1), {F1, F3, F2}, PSEUDO},
|
||||
{"fpsub.s1", f, OpXaSfF4 (0xb, 1, 1, 1), {F1, F3, F2}, PSEUDO},
|
||||
{"fpsub.s2", f, OpXaSfF4 (0xb, 1, 2, 1), {F1, F3, F2}, PSEUDO},
|
||||
{"fpsub.s3", f, OpXaSfF4 (0xb, 1, 3, 1), {F1, F3, F2}, PSEUDO},
|
||||
|
||||
{"fnmpy.s0", f, OpXaSfF2 (0xc, 0, 0, 0), {F1, F3, F4}, PSEUDO},
|
||||
{"fnmpy", f, OpXaSfF2 (0xc, 0, 0, 0), {F1, F3, F4}, PSEUDO},
|
||||
{"fnmpy.s1", f, OpXaSfF2 (0xc, 0, 1, 0), {F1, F3, F4}, PSEUDO},
|
||||
|
@ -346,7 +346,8 @@ opcode_verify (opcode, place, type)
|
||||
/* Find an instruction entry in the ia64_dis_names array that matches
|
||||
opcode OPCODE and is of type TYPE. Returns either a positive index
|
||||
into the array, or a negative value if an entry for OPCODE could
|
||||
not be found. */
|
||||
not be found. Checks all matches and returns the one with the highest
|
||||
priority. */
|
||||
|
||||
static int
|
||||
locate_opcode_ent (opcode, type)
|
||||
@ -357,6 +358,8 @@ locate_opcode_ent (opcode, type)
|
||||
int bitpos[41];
|
||||
int op_ptr[41];
|
||||
int currstatenum = 0;
|
||||
short found_disent = -1;
|
||||
short found_priority = -1;
|
||||
|
||||
currtest[currstatenum] = 0;
|
||||
op_ptr[currstatenum] = 0;
|
||||
@ -463,6 +466,7 @@ locate_opcode_ent (opcode, type)
|
||||
if ((next_op >= 0) && (next_op & 32768))
|
||||
{
|
||||
short disent = next_op & 32767;
|
||||
short priority = -1;
|
||||
|
||||
if (next_op > 65535)
|
||||
{
|
||||
@ -475,7 +479,10 @@ locate_opcode_ent (opcode, type)
|
||||
{
|
||||
int place = ia64_dis_names[disent].insn_index;
|
||||
|
||||
if (opcode_verify (opcode, place, type))
|
||||
priority = ia64_dis_names[disent].priority;
|
||||
|
||||
if (opcode_verify (opcode, place, type)
|
||||
&& priority > found_priority)
|
||||
{
|
||||
break;
|
||||
}
|
||||
@ -491,13 +498,12 @@ locate_opcode_ent (opcode, type)
|
||||
|
||||
if (disent >= 0)
|
||||
{
|
||||
return disent;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Failed to match; try the next test in this state. */
|
||||
next_op = -2;
|
||||
found_disent = disent;
|
||||
found_priority = priority;
|
||||
}
|
||||
/* Try the next test in this state, regardless of whether a match
|
||||
was found. */
|
||||
next_op = -2;
|
||||
}
|
||||
|
||||
/* next_op == -1 is "back up to the previous state".
|
||||
@ -509,7 +515,7 @@ locate_opcode_ent (opcode, type)
|
||||
currstatenum--;
|
||||
if (currstatenum < 0)
|
||||
{
|
||||
return -1;
|
||||
return found_disent;
|
||||
}
|
||||
}
|
||||
else if (next_op >= 0)
|
||||
|
Loading…
Reference in New Issue
Block a user