| Index: bfd/cpu-ia64-opc.c
|
| diff --git a/bfd/cpu-ia64-opc.c b/bfd/cpu-ia64-opc.c
|
| index b797e4413ec514d5e91cd66f4f6e3f058e1bb117..dcc318e679d57ed506e20146f2cc0d42c0de20ec 100644
|
| --- a/bfd/cpu-ia64-opc.c
|
| +++ b/bfd/cpu-ia64-opc.c
|
| @@ -380,6 +380,46 @@ ext_cnt2c (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep)
|
| }
|
|
|
| static const char*
|
| +ins_cnt6a (const struct ia64_operand *self, ia64_insn value,
|
| + ia64_insn *code)
|
| +{
|
| + if (value < 1 || value > 64)
|
| + return "value must be between 1 and 64";
|
| + return ins_immu (self, value - 1, code);
|
| +}
|
| +
|
| +static const char*
|
| +ext_cnt6a (const struct ia64_operand *self, ia64_insn code,
|
| + ia64_insn *valuep)
|
| +{
|
| + const char *result;
|
| +
|
| + result = ext_immu (self, code, valuep);
|
| + if (result)
|
| + return result;
|
| +
|
| + *valuep = *valuep + 1;
|
| + return 0;
|
| +}
|
| +
|
| +static const char*
|
| +ins_strd5b (const struct ia64_operand *self, ia64_insn value,
|
| + ia64_insn *code)
|
| +{
|
| + if ( value & 0x3f )
|
| + return "value must be a multiple of 64";
|
| + return ins_imms_scaled (self, value, code, 6);
|
| +}
|
| +
|
| +static const char*
|
| +ext_strd5b (const struct ia64_operand *self, ia64_insn code,
|
| + ia64_insn *valuep)
|
| +{
|
| + return ext_imms_scaled (self, code, valuep, 6);
|
| +}
|
| +
|
| +
|
| +static const char*
|
| ins_inc3 (const struct ia64_operand *self, ia64_insn value, ia64_insn *code)
|
| {
|
| BFD_HOST_64_BIT val = value;
|
| @@ -480,6 +520,8 @@ const struct ia64_operand elf64_ia64_operands[IA64_OPND_COUNT] =
|
| "a general register" },
|
| { REG, ins_reg, ext_reg, "r", {{ 2, 20}}, 0, /* R3_2 */
|
| "a general register r0-r3" },
|
| + { REG, ins_reg, ext_reg, "dahr", {{ 3, 23}}, 0, /* DAHR */
|
| + "a dahr register dahr0-7" },
|
|
|
| /* memory operands: */
|
| { IND, ins_reg, ext_reg, "", {{7, 20}}, 0, /* MR3 */
|
| @@ -504,6 +546,8 @@ const struct ia64_operand elf64_ia64_operands[IA64_OPND_COUNT] =
|
| "a pmc register" },
|
| { IND, ins_reg, ext_reg, "pmd", {{7, 20}}, 0, /* PMD_R3 */
|
| "a pmd register" },
|
| + { IND, ins_reg, ext_reg, "dahr", {{7, 20}}, 0, /* DAHR_R3 */
|
| + "a dahr register" },
|
| { IND, ins_reg, ext_reg, "rr", {{7, 20}}, 0, /* RR_R3 */
|
| "an rr register" },
|
|
|
| @@ -568,9 +612,15 @@ const struct ia64_operand elf64_ia64_operands[IA64_OPND_COUNT] =
|
| { ABS, ins_imms, ext_imms, 0, /* IMM14 */
|
| {{ 7, 13}, { 6, 27}, { 1, 36}}, SDEC,
|
| "a 14-bit integer (-8192-8191)" },
|
| + { ABS, ins_immu, ext_immu, 0, /* IMMU16 */
|
| + {{4, 6}, {11, 12}, { 1, 36}}, UDEC,
|
| + "a 16-bit unsigned" },
|
| { ABS, ins_imms1, ext_imms1, 0, /* IMM17 */
|
| {{ 7, 6}, { 8, 24}, { 1, 36}}, 0,
|
| "a 17-bit integer (-65536-65535)" },
|
| + { ABS, ins_immu, ext_immu, 0, /* IMMU19 */
|
| + {{4, 6}, {14, 12}, { 1, 36}}, UDEC,
|
| + "a 19-bit unsigned" },
|
| { ABS, ins_immu, ext_immu, 0, {{20, 6}, { 1, 36}}, 0, /* IMMU21 */
|
| "a 21-bit unsigned" },
|
| { ABS, ins_imms, ext_imms, 0, /* IMM22 */
|
| @@ -613,4 +663,8 @@ const struct ia64_operand elf64_ia64_operands[IA64_OPND_COUNT] =
|
|
|
| { ABS, ins_const, ext_const, 0, {{0, 0}}, 0, /* LDXMOV */
|
| "ldxmov target" },
|
| + { ABS, ins_cnt6a, ext_cnt6a, 0, {{6, 6}}, UDEC, /* CNT6a */
|
| + "lfetch count" },
|
| + { ABS, ins_strd5b, ext_strd5b, 0, {{5, 13}}, SDEC, /* STRD5b*/
|
| + "lfetch stride" },
|
| };
|
|
|