diff options
author | saurabh.jha@arm.com <saurabh.jha@arm.com> | 2024-05-28 15:45:50 +0100 |
---|---|---|
committer | Richard Earnshaw <rearnsha@arm.com> | 2024-05-28 17:28:29 +0100 |
commit | c3bb4211d972e681eadbdb8d800530323d98060f (patch) | |
tree | 264912c9a034da0d112001904aab13d2812bd986 /opcodes/aarch64-opc.h | |
parent | 2db17c87bd67099921ae78f90f839122041f284a (diff) | |
download | binutils-c3bb4211d972e681eadbdb8d800530323d98060f.zip binutils-c3bb4211d972e681eadbdb8d800530323d98060f.tar.gz binutils-c3bb4211d972e681eadbdb8d800530323d98060f.tar.bz2 |
gas, aarch64: Add AdvSIMD lut extension
Introduces instructions for the Advanced SIMD lut extension for AArch64. They are documented in the following links:
* luti2: https://developer.arm.com/documentation/ddi0602/2024-03/SIMD-FP-Instructions/LUTI2--Lookup-table-read-with-2-bit-indices-?lang=en
* luti4: https://developer.arm.com/documentation/ddi0602/2024-03/SIMD-FP-Instructions/LUTI4--Lookup-table-read-with-4-bit-indices-?lang=en
These instructions needed definition of some new operands. We will first
discuss operands for the third operand of the instructions and then
discuss a vector register list operand needed for the second operand.
The third operands are vectors with bit indices and without type
qualifiers. They are called Em_INDEX1_14, Em_INDEX2_13, and Em_INDEX3_12
and they have 1 bit, 2 bit, and 3 bit indices respectively. For these
new operands, we defined new parsing case branch. The lsb and width of
these operands are the same as many existing but the convention is to
give different names to fields that serve different purpose so we
introduced new fields in aarch64-opc.c and aarch64-opc.h for these new
operands.
For the second operand of these instructions, we introduced a new
operand called LVn_LUT. This represents a vector register list with
stride 1. We defined new inserter and extractor for this new operand and
it is encoded in FLD_Rn. We are enforcing the number of registers in the
reglist using opcode flag rather than operand flag as this is what other
SIMD vector register list operands are doing. The disassembly also uses
opcode flag to print the correct number of registers.
Diffstat (limited to 'opcodes/aarch64-opc.h')
-rw-r--r-- | opcodes/aarch64-opc.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/opcodes/aarch64-opc.h b/opcodes/aarch64-opc.h index 4e781f0..23e634f 100644 --- a/opcodes/aarch64-opc.h +++ b/opcodes/aarch64-opc.h @@ -147,6 +147,7 @@ enum aarch64_field_kind FLD_imm1_2, FLD_imm1_8, FLD_imm1_10, + FLD_imm1_14, FLD_imm1_15, FLD_imm1_16, FLD_imm2_0, @@ -154,6 +155,7 @@ enum aarch64_field_kind FLD_imm2_8, FLD_imm2_10, FLD_imm2_12, + FLD_imm2_13, FLD_imm2_15, FLD_imm2_16, FLD_imm2_19, |