aboutsummaryrefslogtreecommitdiff
path: root/opcodes/aarch64-dis.c
diff options
context:
space:
mode:
authorsaurabh.jha@arm.com <saurabh.jha@arm.com>2024-06-21 16:30:59 +0100
committerRichard Earnshaw <rearnsha@arm.com>2024-06-24 15:00:40 +0100
commitadea87e275802fb7afe7acefae1477f692c48969 (patch)
tree8b7ef7d13df4366cfb917425a09bb3e95cd14ce9 /opcodes/aarch64-dis.c
parentc702f1ad8a6a51b9c74445c77e1f6e822ba9293b (diff)
downloadbinutils-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.c6
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;