| Index: opcodes/ia64-gen.c
|
| diff --git a/opcodes/ia64-gen.c b/opcodes/ia64-gen.c
|
| index f6deca189e525631873efe7ac9cdb9d8a12e2017..bcb4e25ad2b562e5222e628b612b113de2ceb540 100644
|
| --- a/opcodes/ia64-gen.c
|
| +++ b/opcodes/ia64-gen.c
|
| @@ -69,6 +69,7 @@ int debug = 0;
|
| #define NELEMS(a) (sizeof (a) / sizeof ((a)[0]))
|
| #define tmalloc(X) (X *) xmalloc (sizeof (X))
|
|
|
| +typedef unsigned long long ci_t;
|
| /* The main opcode table entry. Each entry is a unique combination of
|
| name and flags (no two entries in the table compare as being equal
|
| via opcodes_eq). */
|
| @@ -146,7 +147,7 @@ struct disent
|
| int priority;
|
|
|
| /* The completer_index value for this entry. */
|
| - int completer_index;
|
| + ci_t completer_index;
|
|
|
| /* How many other entries share this decode. */
|
| int nextcnt;
|
| @@ -290,11 +291,11 @@ static void shrink (struct ia64_opcode *);
|
| static void print_version (void);
|
| static void usage (FILE *, int);
|
| static void finish_distable (void);
|
| -static void insert_bit_table_ent (struct bittree *, int, ia64_insn, ia64_insn, int, int, int);
|
| -static void add_dis_entry (struct bittree *, ia64_insn, ia64_insn, int, struct completer_entry *, int);
|
| +static void insert_bit_table_ent (struct bittree *, int, ia64_insn, ia64_insn, int, int, ci_t);
|
| +static void add_dis_entry (struct bittree *, ia64_insn, ia64_insn, int, struct completer_entry *, ci_t);
|
| static void compact_distree (struct bittree *);
|
| static struct bittree * make_bittree_entry (void);
|
| -static struct disent * add_dis_table_ent (struct disent *, int, int, int);
|
| +static struct disent * add_dis_table_ent (struct disent *, int, int, ci_t);
|
|
|
|
|
| static void
|
| @@ -569,7 +570,7 @@ fetch_insn_class (const char *full_name, int create)
|
|
|
| ics[ind]->nsubs = 1;
|
| ics[ind]->subs = tmalloc(int);
|
| - ics[ind]->subs[0] = fetch_insn_class (subname, 1);;
|
| + ics[ind]->subs[0] = fetch_insn_class (subname, 1);
|
| }
|
|
|
| while (xsect)
|
| @@ -902,12 +903,13 @@ irf_operand (int op, const char *field)
|
| || (op == IA64_OPND_PMC_R3 && strstr (field, "pmc"))
|
| || (op == IA64_OPND_PMD_R3 && strstr (field, "pmd"))
|
| || (op == IA64_OPND_MSR_R3 && strstr (field, "msr"))
|
| - || (op == IA64_OPND_CPUID_R3 && strstr (field, "cpuid")));
|
| + || (op == IA64_OPND_CPUID_R3 && strstr (field, "cpuid"))
|
| + || (op == IA64_OPND_DAHR_R3 && strstr (field, "dahr")));
|
| }
|
| }
|
|
|
| -/* Handle mov_ar, mov_br, mov_cr, mov_indirect, mov_ip, mov_pr, mov_psr, and
|
| - mov_um insn classes. */
|
| +/* Handle mov_ar, mov_br, mov_cr, move_dahr, mov_indirect, mov_ip, mov_pr,
|
| + * mov_psr, and mov_um insn classes. */
|
| static int
|
| in_iclass_mov_x (struct ia64_opcode *idesc, struct iclass *ic,
|
| const char *format, const char *field)
|
| @@ -965,6 +967,13 @@ in_iclass_mov_x (struct ia64_opcode *idesc, struct iclass *ic,
|
| return strstr (format, "M33") != NULL;
|
| }
|
| break;
|
| + case 'd':
|
| + {
|
| + int m50 = plain_mov && idesc->operands[0] == IA64_OPND_DAHR3;
|
| + if (m50)
|
| + return strstr (format, "M50") != NULL;
|
| + }
|
| + break;
|
| case 'i':
|
| if (ic->name[5] == 'n')
|
| {
|
| @@ -1441,6 +1450,8 @@ lookup_specifier (const char *name)
|
| return IA64_RS_CR_LRR;
|
| if (strstr (name, "CR%") != NULL)
|
| return IA64_RS_CR;
|
| + if (strstr (name, "DAHR%, % in 0") != NULL)
|
| + return IA64_RS_DAHR;
|
| if (strstr (name, "FR%, % in 0") != NULL)
|
| return IA64_RS_FR;
|
| if (strstr (name, "FR%, % in 2") != NULL)
|
| @@ -1723,7 +1734,7 @@ make_bittree_entry (void)
|
|
|
| static struct disent *
|
| add_dis_table_ent (struct disent *which, int insn, int order,
|
| - int completer_index)
|
| + ci_t completer_index)
|
| {
|
| int ci = 0;
|
| struct disent *ent;
|
| @@ -1776,7 +1787,7 @@ finish_distable (void)
|
| static void
|
| insert_bit_table_ent (struct bittree *curr_ent, int bit, ia64_insn opcode,
|
| ia64_insn mask, int opcodenum, int order,
|
| - int completer_index)
|
| + ci_t completer_index)
|
| {
|
| ia64_insn m;
|
| int b;
|
| @@ -1810,9 +1821,9 @@ insert_bit_table_ent (struct bittree *curr_ent, int bit, ia64_insn opcode,
|
|
|
| static void
|
| add_dis_entry (struct bittree *first, ia64_insn opcode, ia64_insn mask,
|
| - int opcodenum, struct completer_entry *ent, int completer_index)
|
| + int opcodenum, struct completer_entry *ent, ci_t completer_index)
|
| {
|
| - if (completer_index & (1 << 20))
|
| + if (completer_index & ((ci_t)1 << 32) )
|
| abort ();
|
|
|
| while (ent != NULL)
|
| @@ -2131,7 +2142,7 @@ print_dis_table (void)
|
|
|
| while (ent != NULL)
|
| {
|
| - printf ("{ 0x%x, %d, %d, %d },\n", ent->completer_index,
|
| + printf ("{ 0x%lx, %d, %d, %d },\n", ( long ) ent->completer_index,
|
| ent->insn, (ent->nexte != NULL ? 1 : 0),
|
| ent->priority);
|
| ent = ent->nexte;
|
|
|