diff options
author | Srinath Parvathaneni <srinath.parvathaneni@arm.com> | 2024-01-15 09:37:32 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2024-01-15 11:45:41 +0000 |
commit | 39092c7a1fb0927fbbdb40e1142de816d6f3f097 (patch) | |
tree | 39c066e97256ea52262332db3601294caf5708b6 /opcodes/aarch64-dis.c | |
parent | 88601c2d941b004b443dc4bfdf3b93ea1983d136 (diff) | |
download | gdb-39092c7a1fb0927fbbdb40e1142de816d6f3f097.zip gdb-39092c7a1fb0927fbbdb40e1142de816d6f3f097.tar.gz gdb-39092c7a1fb0927fbbdb40e1142de816d6f3f097.tar.bz2 |
aarch64: Add SVE2.1 dupq, eorqv and extq instructions.
Hi,
This patch add support for SVE2.1 instruction dupq, eorqv and extq.
Regression testing for aarch64-none-elf target and found no regressions.
Ok for binutils-master?
Regards,
Srinath.
Diffstat (limited to 'opcodes/aarch64-dis.c')
-rw-r--r-- | opcodes/aarch64-dis.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/opcodes/aarch64-dis.c b/opcodes/aarch64-dis.c index d395438..bffa760 100644 --- a/opcodes/aarch64-dis.c +++ b/opcodes/aarch64-dis.c @@ -2097,6 +2097,26 @@ aarch64_ext_sve_index (const aarch64_operand *self, return true; } +/* Decode Zn.<T>[<imm>], where <imm> is an immediate with range of 0 to one less + than the number of elements in 128 bit, which can encode il:tsz. */ +bool +aarch64_ext_sve_index_imm (const aarch64_operand *self, + aarch64_opnd_info *info, aarch64_insn code, + const aarch64_inst *inst ATTRIBUTE_UNUSED, + aarch64_operand_error *errors ATTRIBUTE_UNUSED) +{ + int val; + + info->reglane.regno = extract_field (self->fields[0], code, 0); + val = extract_fields (code, 0, 2, self->fields[2], self->fields[1]); + if ((val & 15) == 0) + return 0; + while ((val & 1) == 0) + val /= 2; + info->reglane.index = val / 2; + return true; +} + /* Decode a logical immediate for the MOV alias of SVE DUPM. */ bool aarch64_ext_sve_limm_mov (const aarch64_operand *self, @@ -3231,6 +3251,17 @@ aarch64_decode_variant_using_iclass (aarch64_inst *inst) } break; + case sve_index1: + i = extract_fields (inst->value, 0, 2, FLD_SVE_tsz, FLD_SVE_i2h); + if ((i & 15) == 0) + return false; + while ((i & 1) == 0) + { + i >>= 1; + variant += 1; + } + break; + case sve_limm: /* Pick the smallest applicable element size. */ if ((inst->value & 0x20600) == 0x600) |