diff options
author | saurabh.jha@arm.com <saurabh.jha@arm.com> | 2024-06-21 16:30:59 +0100 |
---|---|---|
committer | Richard Earnshaw <rearnsha@arm.com> | 2024-06-24 15:00:40 +0100 |
commit | adea87e275802fb7afe7acefae1477f692c48969 (patch) | |
tree | 8b7ef7d13df4366cfb917425a09bb3e95cd14ce9 /opcodes/aarch64-dis.c | |
parent | c702f1ad8a6a51b9c74445c77e1f6e822ba9293b (diff) | |
download | binutils-adea87e275802fb7afe7acefae1477f692c48969.zip binutils-adea87e275802fb7afe7acefae1477f692c48969.tar.gz binutils-adea87e275802fb7afe7acefae1477f692c48969.tar.bz2 |
gas, aarch64: Add SME2 lutv2 extension
Introduces instructions for the SME2 lutv2 extension for AArch64. They
are documented in the following document:
* ARM DDI0602
For both luti4 instructions, we introduced an operand called
SME_Znx2_BIT_INDEX. We use the existing function parse_vector_reg_list
for parsing but modified that function so that it can accept operands
without qualifiers and rejects instructions that have operands with
qualifiers but are not supposed to have operands with qualifiers.
For disassembly, we modified print_register_list so that it could
accept register lists without qualifiers.
For one luti4 instruction, we introduced a SME_Zdnx4_STRIDED. It is
similar to SME_Ztx4_STRIDED and we could use existing code for parsing,
encoding, and disassembly.
For movt instruction, we introduced an operand called SME_ZT0_INDEX2_12.
This is a ZT0 register with a bit index encoded in [13:12]. It is
similar to SME_ZT0_INDEX.
We also introduced an iclass named sme_size_12_b so that we can encode
size bits [13:12] correctly when only 'b' is allowed as qualifier.
Diffstat (limited to 'opcodes/aarch64-dis.c')
-rw-r--r-- | opcodes/aarch64-dis.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/opcodes/aarch64-dis.c b/opcodes/aarch64-dis.c index 213df61..045af49 100644 --- a/opcodes/aarch64-dis.c +++ b/opcodes/aarch64-dis.c @@ -3415,6 +3415,12 @@ aarch64_decode_variant_using_iclass (aarch64_inst *inst) variant -= 1; break; + case sme_size_12_b: + variant = extract_field (FLD_SME_size_12, inst->value, 0); + if (variant != 0) + return false; + break; + case sme_size_22: variant = extract_field (FLD_SME_size_22, inst->value, 0); break; |