| 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" },
 | 
|    };
 | 
| 
 |