diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2012-09-04 13:52:06 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2012-09-04 13:52:06 +0000 |
commit | b3e14edafcdc558d724452ee5b803ff096c32d0f (patch) | |
tree | 44a3814f838c0bdf05c27616bfc7828962d33eb9 /bfd/cpu-ia64-opc.c | |
parent | c6d8cab4ac5c906937dcd4f884e65fb4d1052381 (diff) | |
download | gdb-b3e14edafcdc558d724452ee5b803ff096c32d0f.zip gdb-b3e14edafcdc558d724452ee5b803ff096c32d0f.tar.gz gdb-b3e14edafcdc558d724452ee5b803ff096c32d0f.tar.bz2 |
Add Intel Itanium Series 9500 support
bfd/
2012-09-04 Sergey A. Guriev <sergey.a.guriev@intel.com>
* cpu-ia64-opc.c (ins_cnt6a): New function.
(ext_cnt6a): Ditto.
(ins_strd5b): Ditto.
(ext_strd5b): Ditto.
(elf64_ia64_operands): Add new operand types.
gas/
2012-09-04 Sergey A. Guriev <sergey.a.guriev@intel.com>
* config/tc-ia64.c (reg_symbol): Add a new register.
(indirect_reg): Ditto.
(pseudo_func): Add new symbolic constants.
(operand_match): Add new operand types recognition.
(operand_insn): Add new register recognition.
(md_begin): Add new register definition.
(specify_resource): Add new register recognition.
gas/testsuite/
2012-09-04 Sergey A. Guriev <sergey.a.guriev@intel.com>
* gas/testsuite/gas/ia64/psn.d: New file.
* gas/testsuite/gas/ia64/psn.s: New file.
* gas/testsuite/gas/ia64/ia64.exp: Add new testcase.
* gas/testsuite/gas/ia64/opc-i.d: Fixed failing tests.
* gas/testsuite/gas/ia64/opc-m.d: Ditto.
include/opcode/
2012-09-04 Sergey A. Guriev <sergey.a.guriev@intel.com>
* ia64.h (ia64_opnd): Add new operand types.
opcodes/
2012-09-04 Sergey A. Guriev <sergey.a.guriev@intel.com>
* ia64-asmtab.h (completer_index): Extend bitfield to full uint.
* ia64-gen.c: Promote completer index type to longlong.
(irf_operand): Add new register recognition.
(in_iclass_mov_x): Add an entry for the new mov_* instruction type.
(lookup_specifier): Add new resource recognition.
(insert_bit_table_ent): Relax abort condition according to the
changed completer index type.
(print_dis_table): Fix printf format for completer index.
* ia64-ic.tbl: Add a new instruction class.
* ia64-opc-i.c (ia64_opcodes_i): Define new I-instructions.
* ia64-opc-m.c (ia64_opcodes_m): Define new M-instructions.
* ia64-opc.h: Define short names for new operand types.
* ia64-raw.tbl: Add new RAW resource for DAHR register.
* ia64-waw.tbl: Add new WAW resource for DAHR register.
* ia64-asmtab.c: Regenerate.
Diffstat (limited to 'bfd/cpu-ia64-opc.c')
-rw-r--r-- | bfd/cpu-ia64-opc.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/bfd/cpu-ia64-opc.c b/bfd/cpu-ia64-opc.c index b797e44..dcc318e 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" }, }; |