aboutsummaryrefslogtreecommitdiff
path: root/opcodes/aarch64-dis-2.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2021-12-02 15:00:57 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2021-12-02 15:00:57 +0000
commit6327658ee73502ffb55dfb6b28a20d1dde15a4dc (patch)
tree13b1c36b6ded6afcde85d45b69971548bb22c37d /opcodes/aarch64-dis-2.c
parenta5e9beead8580777ea4886b06c493a6f79570f93 (diff)
downloadgdb-6327658ee73502ffb55dfb6b28a20d1dde15a4dc.zip
gdb-6327658ee73502ffb55dfb6b28a20d1dde15a4dc.tar.gz
gdb-6327658ee73502ffb55dfb6b28a20d1dde15a4dc.tar.bz2
aarch64: Add support for +mops
This patch adds support for FEAT_MOPS, an Armv8.8-A extension that provides memcpy and memset acceleration instructions. I took the perhaps controversial decision to generate the individual instruction forms using macros rather than list them out individually. This becomes useful with a follow-on patch to check that code follows the correct P/M/E sequence. [https://developer.arm.com/documentation/ddi0596/2021-09/Base-Instructions?lang=en] include/ * opcode/aarch64.h (AARCH64_FEATURE_MOPS): New macro. (AARCH64_ARCH_V8_8): Make armv8.8-a imply AARCH64_FEATURE_MOPS. (AARCH64_OPND_MOPS_ADDR_Rd): New aarch64_opnd. (AARCH64_OPND_MOPS_ADDR_Rs): Likewise. (AARCH64_OPND_MOPS_WB_Rn): Likewise. opcodes/ * aarch64-asm.h (ins_x0_to_x30): New inserter. * aarch64-asm.c (aarch64_ins_x0_to_x30): New function. * aarch64-dis.h (ext_x0_to_x30): New extractor. * aarch64-dis.c (aarch64_ext_x0_to_x30): New function. * aarch64-tbl.h (aarch64_feature_mops): New feature set. (aarch64_feature_mops_memtag): Likewise. (MOPS, MOPS_MEMTAG, MOPS_INSN, MOPS_MEMTAG_INSN) (MOPS_CPY_OP1_OP2_PME_INSN, MOPS_CPY_OP1_OP2_INSN, MOPS_CPY_OP1_INSN) (MOPS_CPY_INSN, MOPS_SET_OP1_OP2_PME_INSN, MOPS_SET_OP1_OP2_INSN) (MOPS_SET_INSN): New macros. (aarch64_opcode_table): Add MOPS instructions. (aarch64_opcode_table): Add entries for AARCH64_OPND_MOPS_ADDR_Rd, AARCH64_OPND_MOPS_ADDR_Rs and AARCH64_OPND_MOPS_WB_Rn. * aarch64-opc.c (aarch64_print_operand): Handle AARCH64_OPND_MOPS_ADDR_Rd, AARCH64_OPND_MOPS_ADDR_Rs and AARCH64_OPND_MOPS_WB_Rn. (verify_three_different_regs): New function. * aarch64-asm-2.c: Regenerate. * aarch64-dis-2.c: Likewise. * aarch64-opc-2.c: Likewise. gas/ * doc/c-aarch64.texi: Document +mops. * config/tc-aarch64.c (parse_x0_to_x30): New function. (parse_operands): Handle AARCH64_OPND_MOPS_ADDR_Rd, AARCH64_OPND_MOPS_ADDR_Rs and AARCH64_OPND_MOPS_WB_Rn. (aarch64_features): Add "mops". * testsuite/gas/aarch64/mops.s, testsuite/gas/aarch64/mops.d: New test. * testsuite/gas/aarch64/mops_invalid.s, * testsuite/gas/aarch64/mops_invalid.d, * testsuite/gas/aarch64/mops_invalid.l: Likewise.
Diffstat (limited to 'opcodes/aarch64-dis-2.c')
-rw-r--r--opcodes/aarch64-dis-2.c1386
1 files changed, 1355 insertions, 31 deletions
diff --git a/opcodes/aarch64-dis-2.c b/opcodes/aarch64-dis-2.c
index f9999ad..70cbf90 100644
--- a/opcodes/aarch64-dis-2.c
+++ b/opcodes/aarch64-dis-2.c
@@ -2947,11 +2947,187 @@ aarch64_opcode_lookup_1 (uint32_t word)
}
else
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- xx01100100xxxxxxxxxxx1xxxxxxxxxx
- stg. */
- return 885;
+ if (((word >> 21) & 0x1) == 0)
+ {
+ if (((word >> 12) & 0x1) == 0)
+ {
+ if (((word >> 13) & 0x1) == 0)
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx0000x1xxxxxxxxxx
+ cpyfp. */
+ return 2511;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx1000x1xxxxxxxxxx
+ cpyfprn. */
+ return 2517;
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx0100x1xxxxxxxxxx
+ cpyfpwn. */
+ return 2514;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx1100x1xxxxxxxxxx
+ cpyfpn. */
+ return 2520;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx0010x1xxxxxxxxxx
+ cpyfprt. */
+ return 2535;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx1010x1xxxxxxxxxx
+ cpyfprtrn. */
+ return 2541;
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx0110x1xxxxxxxxxx
+ cpyfprtwn. */
+ return 2538;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx1110x1xxxxxxxxxx
+ cpyfprtn. */
+ return 2544;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 13) & 0x1) == 0)
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx0001x1xxxxxxxxxx
+ cpyfpwt. */
+ return 2523;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx1001x1xxxxxxxxxx
+ cpyfpwtrn. */
+ return 2529;
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx0101x1xxxxxxxxxx
+ cpyfpwtwn. */
+ return 2526;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx1101x1xxxxxxxxxx
+ cpyfpwtn. */
+ return 2532;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx0011x1xxxxxxxxxx
+ cpyfpt. */
+ return 2547;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx1011x1xxxxxxxxxx
+ cpyfptrn. */
+ return 2553;
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx0111x1xxxxxxxxxx
+ cpyfptwn. */
+ return 2550;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001000xxxxx1111x1xxxxxxxxxx
+ cpyfptn. */
+ return 2556;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001001xxxxxxxxxx1xxxxxxxxxx
+ stg. */
+ return 885;
+ }
}
}
else
@@ -3054,11 +3230,187 @@ aarch64_opcode_lookup_1 (uint32_t word)
}
else
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- xx01100101xxxxxxxxxxx1xxxxxxxxxx
- stzg. */
- return 886;
+ if (((word >> 21) & 0x1) == 0)
+ {
+ if (((word >> 12) & 0x1) == 0)
+ {
+ if (((word >> 13) & 0x1) == 0)
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx0000x1xxxxxxxxxx
+ cpyfm. */
+ return 2512;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx1000x1xxxxxxxxxx
+ cpyfmrn. */
+ return 2518;
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx0100x1xxxxxxxxxx
+ cpyfmwn. */
+ return 2515;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx1100x1xxxxxxxxxx
+ cpyfmn. */
+ return 2521;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx0010x1xxxxxxxxxx
+ cpyfmrt. */
+ return 2536;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx1010x1xxxxxxxxxx
+ cpyfmrtrn. */
+ return 2542;
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx0110x1xxxxxxxxxx
+ cpyfmrtwn. */
+ return 2539;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx1110x1xxxxxxxxxx
+ cpyfmrtn. */
+ return 2545;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 13) & 0x1) == 0)
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx0001x1xxxxxxxxxx
+ cpyfmwt. */
+ return 2524;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx1001x1xxxxxxxxxx
+ cpyfmwtrn. */
+ return 2530;
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx0101x1xxxxxxxxxx
+ cpyfmwtwn. */
+ return 2527;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx1101x1xxxxxxxxxx
+ cpyfmwtn. */
+ return 2533;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx0011x1xxxxxxxxxx
+ cpyfmt. */
+ return 2548;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx1011x1xxxxxxxxxx
+ cpyfmtrn. */
+ return 2554;
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx0111x1xxxxxxxxxx
+ cpyfmtwn. */
+ return 2551;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001010xxxxx1111x1xxxxxxxxxx
+ cpyfmtn. */
+ return 2557;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001011xxxxxxxxxx1xxxxxxxxxx
+ stzg. */
+ return 886;
+ }
}
}
else
@@ -3195,21 +3547,329 @@ aarch64_opcode_lookup_1 (uint32_t word)
}
else
{
- if (((word >> 22) & 0x1) == 0)
+ if (((word >> 21) & 0x1) == 0)
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- xx01100110xxxxxxxxxxx1xxxxxxxxxx
- st2g. */
- return 887;
+ if (((word >> 12) & 0x1) == 0)
+ {
+ if (((word >> 13) & 0x1) == 0)
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx0000x1xxxxxxxxxx
+ cpyfe. */
+ return 2513;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx0000x1xxxxxxxxxx
+ setp. */
+ return 2607;
+ }
+ }
+ else
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx1000x1xxxxxxxxxx
+ cpyfern. */
+ return 2519;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx1000x1xxxxxxxxxx
+ sete. */
+ return 2609;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx0100x1xxxxxxxxxx
+ cpyfewn. */
+ return 2516;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx0100x1xxxxxxxxxx
+ setm. */
+ return 2608;
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx0110011x0xxxxx1100x1xxxxxxxxxx
+ cpyfen. */
+ return 2522;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx0010x1xxxxxxxxxx
+ cpyfert. */
+ return 2537;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx0010x1xxxxxxxxxx
+ setpn. */
+ return 2613;
+ }
+ }
+ else
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx1010x1xxxxxxxxxx
+ cpyfertrn. */
+ return 2543;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx1010x1xxxxxxxxxx
+ seten. */
+ return 2615;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx0110x1xxxxxxxxxx
+ cpyfertwn. */
+ return 2540;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx0110x1xxxxxxxxxx
+ setmn. */
+ return 2614;
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx0110011x0xxxxx1110x1xxxxxxxxxx
+ cpyfertn. */
+ return 2546;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 13) & 0x1) == 0)
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx0001x1xxxxxxxxxx
+ cpyfewt. */
+ return 2525;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx0001x1xxxxxxxxxx
+ setpt. */
+ return 2610;
+ }
+ }
+ else
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx1001x1xxxxxxxxxx
+ cpyfewtrn. */
+ return 2531;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx1001x1xxxxxxxxxx
+ setet. */
+ return 2612;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx0101x1xxxxxxxxxx
+ cpyfewtwn. */
+ return 2528;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx0101x1xxxxxxxxxx
+ setmt. */
+ return 2611;
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx0110011x0xxxxx1101x1xxxxxxxxxx
+ cpyfewtn. */
+ return 2534;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx0011x1xxxxxxxxxx
+ cpyfet. */
+ return 2549;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx0011x1xxxxxxxxxx
+ setptn. */
+ return 2616;
+ }
+ }
+ else
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx1011x1xxxxxxxxxx
+ cpyfetrn. */
+ return 2555;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx1011x1xxxxxxxxxx
+ setetn. */
+ return 2618;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001100xxxxx0111x1xxxxxxxxxx
+ cpyfetwn. */
+ return 2552;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001110xxxxx0111x1xxxxxxxxxx
+ setmtn. */
+ return 2617;
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx0110011x0xxxxx1111x1xxxxxxxxxx
+ cpyfetn. */
+ return 2558;
+ }
+ }
+ }
+ }
}
else
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- xx01100111xxxxxxxxxxx1xxxxxxxxxx
- stz2g. */
- return 888;
+ if (((word >> 22) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001101xxxxxxxxxx1xxxxxxxxxx
+ st2g. */
+ return 887;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011001111xxxxxxxxxx1xxxxxxxxxx
+ stz2g. */
+ return 888;
+ }
}
}
}
@@ -16812,19 +17472,679 @@ aarch64_opcode_lookup_1 (uint32_t word)
{
if (((word >> 22) & 0x1) == 0)
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- xxx11101x0xxxxxxxxxxxxxxxxxxxxxx
- str. */
- return 892;
+ if (((word >> 29) & 0x1) == 0)
+ {
+ if (((word >> 12) & 0x1) == 0)
+ {
+ if (((word >> 13) & 0x1) == 0)
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx0000xxxxxxxxxxxx
+ cpyp. */
+ return 2559;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx0000xxxxxxxxxxxx
+ cpye. */
+ return 2561;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx1000xxxxxxxxxxxx
+ cpyprn. */
+ return 2565;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx1000xxxxxxxxxxxx
+ cpyern. */
+ return 2567;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx0100xxxxxxxxxxxx
+ cpypwn. */
+ return 2562;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx0100xxxxxxxxxxxx
+ cpyewn. */
+ return 2564;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx1100xxxxxxxxxxxx
+ cpypn. */
+ return 2568;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx1100xxxxxxxxxxxx
+ cpyen. */
+ return 2570;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx0010xxxxxxxxxxxx
+ cpyprt. */
+ return 2583;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx0010xxxxxxxxxxxx
+ cpyert. */
+ return 2585;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx1010xxxxxxxxxxxx
+ cpyprtrn. */
+ return 2589;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx1010xxxxxxxxxxxx
+ cpyertrn. */
+ return 2591;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx0110xxxxxxxxxxxx
+ cpyprtwn. */
+ return 2586;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx0110xxxxxxxxxxxx
+ cpyertwn. */
+ return 2588;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx1110xxxxxxxxxxxx
+ cpyprtn. */
+ return 2592;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx1110xxxxxxxxxxxx
+ cpyertn. */
+ return 2594;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 13) & 0x1) == 0)
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx0001xxxxxxxxxxxx
+ cpypwt. */
+ return 2571;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx0001xxxxxxxxxxxx
+ cpyewt. */
+ return 2573;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx1001xxxxxxxxxxxx
+ cpypwtrn. */
+ return 2577;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx1001xxxxxxxxxxxx
+ cpyewtrn. */
+ return 2579;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx0101xxxxxxxxxxxx
+ cpypwtwn. */
+ return 2574;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx0101xxxxxxxxxxxx
+ cpyewtwn. */
+ return 2576;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx1101xxxxxxxxxxxx
+ cpypwtn. */
+ return 2580;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx1101xxxxxxxxxxxx
+ cpyewtn. */
+ return 2582;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx0011xxxxxxxxxxxx
+ cpypt. */
+ return 2595;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx0011xxxxxxxxxxxx
+ cpyet. */
+ return 2597;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx1011xxxxxxxxxxxx
+ cpyptrn. */
+ return 2601;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx1011xxxxxxxxxxxx
+ cpyetrn. */
+ return 2603;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx0111xxxxxxxxxxxx
+ cpyptwn. */
+ return 2598;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx0111xxxxxxxxxxxx
+ cpyetwn. */
+ return 2600;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110100xxxxxx1111xxxxxxxxxxxx
+ cpyptn. */
+ return 2604;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110110xxxxxx1111xxxxxxxxxxxx
+ cpyetn. */
+ return 2606;
+ }
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx111101x0xxxxxxxxxxxxxxxxxxxxxx
+ str. */
+ return 892;
+ }
}
else
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- xxx11101x1xxxxxxxxxxxxxxxxxxxxxx
- ldr. */
- return 893;
+ if (((word >> 29) & 0x1) == 0)
+ {
+ if (((word >> 12) & 0x1) == 0)
+ {
+ if (((word >> 13) & 0x1) == 0)
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx0000xxxxxxxxxxxx
+ cpym. */
+ return 2560;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx0000xxxxxxxxxxxx
+ setgp. */
+ return 2619;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx1000xxxxxxxxxxxx
+ cpymrn. */
+ return 2566;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx1000xxxxxxxxxxxx
+ setge. */
+ return 2621;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx0100xxxxxxxxxxxx
+ cpymwn. */
+ return 2563;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx0100xxxxxxxxxxxx
+ setgm. */
+ return 2620;
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011101x1xxxxxx1100xxxxxxxxxxxx
+ cpymn. */
+ return 2569;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx0010xxxxxxxxxxxx
+ cpymrt. */
+ return 2584;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx0010xxxxxxxxxxxx
+ setgpn. */
+ return 2625;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx1010xxxxxxxxxxxx
+ cpymrtrn. */
+ return 2590;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx1010xxxxxxxxxxxx
+ setgen. */
+ return 2627;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx0110xxxxxxxxxxxx
+ cpymrtwn. */
+ return 2587;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx0110xxxxxxxxxxxx
+ setgmn. */
+ return 2626;
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011101x1xxxxxx1110xxxxxxxxxxxx
+ cpymrtn. */
+ return 2593;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 13) & 0x1) == 0)
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx0001xxxxxxxxxxxx
+ cpymwt. */
+ return 2572;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx0001xxxxxxxxxxxx
+ setgpt. */
+ return 2622;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx1001xxxxxxxxxxxx
+ cpymwtrn. */
+ return 2578;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx1001xxxxxxxxxxxx
+ setget. */
+ return 2624;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx0101xxxxxxxxxxxx
+ cpymwtwn. */
+ return 2575;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx0101xxxxxxxxxxxx
+ setgmt. */
+ return 2623;
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011101x1xxxxxx1101xxxxxxxxxxxx
+ cpymwtn. */
+ return 2581;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 14) & 0x1) == 0)
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx0011xxxxxxxxxxxx
+ cpymt. */
+ return 2596;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx0011xxxxxxxxxxxx
+ setgptn. */
+ return 2628;
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx1011xxxxxxxxxxxx
+ cpymtrn. */
+ return 2602;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx1011xxxxxxxxxxxx
+ setgetn. */
+ return 2630;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 15) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110101xxxxxx0111xxxxxxxxxxxx
+ cpymtwn. */
+ return 2599;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx01110111xxxxxx0111xxxxxxxxxxxx
+ setgmtn. */
+ return 2629;
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx011101x1xxxxxx1111xxxxxxxxxxxx
+ cpymtn. */
+ return 2605;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx111101x1xxxxxxxxxxxxxxxxxxxxxx
+ ldr. */
+ return 893;
+ }
}
}
}
@@ -24638,6 +25958,10 @@ aarch64_extract_operand (const aarch64_operand *self,
return aarch64_ext_sme_sm_za (self, info, code, inst, errors);
case 220:
return aarch64_ext_sme_pred_reg_with_index (self, info, code, inst, errors);
+ case 223:
+ case 224:
+ case 225:
+ return aarch64_ext_x0_to_x30 (self, info, code, inst, errors);
default: assert (0); abort ();
}
}