diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2016-09-21 16:54:53 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2016-09-21 16:54:53 +0100 |
commit | 245d2e3fe8d9ff35c65ed1329609fb7e59034877 (patch) | |
tree | b35423d664e70149dadbee4992d77506f8a8787c /opcodes/aarch64-asm-2.c | |
parent | d50c751e00b5336b4604b92271ab84615fdb0d27 (diff) | |
download | gdb-245d2e3fe8d9ff35c65ed1329609fb7e59034877.zip gdb-245d2e3fe8d9ff35c65ed1329609fb7e59034877.tar.gz gdb-245d2e3fe8d9ff35c65ed1329609fb7e59034877.tar.bz2 |
[AArch64][SVE 23/32] Add SVE pattern and prfop operands
The SVE instructions have two enumerated operands: one to select a
vector pattern and another to select a prefetch operation. The latter
is a cut-down version of the base AArch64 prefetch operation.
Both types of operand can also be specified as raw enum values such as #31.
Reserved values can only be specified this way.
If it hadn't been for the pattern operand, I would have been tempted
to use the existing parsing for prefetch operations and add extra
checks for SVE. However, since the patterns needed new enum parsing
code anyway, it seeemed cleaner to reuse it for the prefetches too.
Because of the small number of enum values, I don't think we'd gain
anything by using hash tables.
include/
* opcode/aarch64.h (AARCH64_OPND_SVE_PATTERN): New aarch64_opnd.
(AARCH64_OPND_SVE_PRFOP): Likewise.
(aarch64_sve_pattern_array): Declare.
(aarch64_sve_prfop_array): Likewise.
opcodes/
* aarch64-tbl.h (AARCH64_OPERANDS): Add entries for
AARCH64_OPND_SVE_PATTERN and AARCH64_OPND_SVE_PRFOP.
* aarch64-opc.h (FLD_SVE_pattern): New aarch64_field_kind.
(FLD_SVE_prfop): Likewise.
* aarch64-opc.c: Include libiberty.h.
(aarch64_sve_pattern_array): New variable.
(aarch64_sve_prfop_array): Likewise.
(fields): Add entries for FLD_SVE_pattern and FLD_SVE_prfop.
(aarch64_print_operand): Handle AARCH64_OPND_SVE_PATTERN and
AARCH64_OPND_SVE_PRFOP.
* aarch64-asm-2.c: Regenerate.
* aarch64-dis-2.c: Likewise.
* aarch64-opc-2.c: Likewise.
gas/
* config/tc-aarch64.c (parse_enum_string): New function.
(po_enum_or_fail): New macro.
(parse_operands): Handle AARCH64_OPND_SVE_PATTERN and
AARCH64_OPND_SVE_PRFOP.
Diffstat (limited to 'opcodes/aarch64-asm-2.c')
-rw-r--r-- | opcodes/aarch64-asm-2.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/opcodes/aarch64-asm-2.c b/opcodes/aarch64-asm-2.c index 9c797b2..0a6e476 100644 --- a/opcodes/aarch64-asm-2.c +++ b/opcodes/aarch64-asm-2.c @@ -480,8 +480,6 @@ aarch64_insert_operand (const aarch64_operand *self, case 27: case 35: case 36: - case 89: - case 90: case 91: case 92: case 93: @@ -494,7 +492,9 @@ aarch64_insert_operand (const aarch64_operand *self, case 100: case 101: case 102: - case 105: + case 103: + case 104: + case 107: return aarch64_ins_regno (self, info, code, inst); case 12: return aarch64_ins_reg_extended (self, info, code, inst); @@ -531,6 +531,8 @@ aarch64_insert_operand (const aarch64_operand *self, case 68: case 69: case 70: + case 89: + case 90: return aarch64_ins_imm (self, info, code, inst); case 38: case 39: @@ -581,10 +583,10 @@ aarch64_insert_operand (const aarch64_operand *self, return aarch64_ins_prfop (self, info, code, inst); case 88: return aarch64_ins_hint (self, info, code, inst); - case 103: + case 105: return aarch64_ins_sve_index (self, info, code, inst); - case 104: case 106: + case 108: return aarch64_ins_sve_reglist (self, info, code, inst); default: assert (0); abort (); } |