From: Ezra Sitorus Date: Thu, 5 Jun 2025 14:27:15 +0000 (+0100) Subject: aarch64: Add occmo flag for FEAT_OCCMO X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=78155cbb35f4c7806293d3bc04ccc802b66eadca;p=thirdparty%2Fbinutils-gdb.git aarch64: Add occmo flag for FEAT_OCCMO FEAT_OCCMO support was introduced, but the feature flags were missing. This patch adds these flags, as well as splitting up the tests to test occmo vs occmo+memtag operands. --- diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index 42a3115102d..b4bd1bcb4bb 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -10691,6 +10691,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = { {"rng", AARCH64_FEATURE (RNG), AARCH64_NO_FEATURES}, {"ssbs", AARCH64_FEATURE (SSBS), AARCH64_NO_FEATURES}, {"memtag", AARCH64_FEATURE (MEMTAG), AARCH64_NO_FEATURES}, + {"occmo", AARCH64_FEATURE (OCCMO), AARCH64_NO_FEATURES}, {"sve2", AARCH64_FEATURE (SVE2), AARCH64_FEATURE (SVE)}, {"sve2-sm4", AARCH64_FEATURE (SVE2_SM4), AARCH64_FEATURES (2, SVE2, SM4)}, diff --git a/gas/doc/c-aarch64.texi b/gas/doc/c-aarch64.texi index 1d5fac1adcd..a1075a29e6c 100644 --- a/gas/doc/c-aarch64.texi +++ b/gas/doc/c-aarch64.texi @@ -233,6 +233,8 @@ automatically cause those extensions to be disabled. @tab Enable Armv8.5-A Memory Tagging Extensions. @item @code{mops} @tab @tab Enable Armv8.8-A memcpy and memset acceleration instructions +@item @code{occmo} @tab + @tab Enable Outer Cacheable Cache Maintenance Operations. @item @code{pan} @tab @tab Enable Privileged Access Never support. @item @code{pauth} @tab diff --git a/gas/testsuite/gas/aarch64/occmo-memtag.d b/gas/testsuite/gas/aarch64/occmo-memtag.d new file mode 100644 index 00000000000..0dbbab03565 --- /dev/null +++ b/gas/testsuite/gas/aarch64/occmo-memtag.d @@ -0,0 +1,13 @@ +#name: FEAT_OCCMO + MEMTAG Test +#as: -march=armv8-a+occmo+memtag +#objdump: -dr + +.*: file format .* + +Disassembly of section .text: + +0+ <.*>: +[^:]*: d50b7be0 dc cgdvaoc, x0 +[^:]*: d50b7bff dc cgdvaoc, xzr +[^:]*: d50b7fe0 dc cigdvaoc, x0 +[^:]*: d50b7fff dc cigdvaoc, xzr diff --git a/gas/testsuite/gas/aarch64/occmo-memtag.s b/gas/testsuite/gas/aarch64/occmo-memtag.s new file mode 100644 index 00000000000..2426dfbf7f3 --- /dev/null +++ b/gas/testsuite/gas/aarch64/occmo-memtag.s @@ -0,0 +1,4 @@ + dc cgdvaoc, x0 + dc cgdvaoc, xzr + dc cigdvaoc, x0 + dc cigdvaoc, xzr diff --git a/gas/testsuite/gas/aarch64/occmo.d b/gas/testsuite/gas/aarch64/occmo.d index 388d8f4ca0a..0ec68e85086 100644 --- a/gas/testsuite/gas/aarch64/occmo.d +++ b/gas/testsuite/gas/aarch64/occmo.d @@ -1,5 +1,5 @@ #name: FEAT_OCCMO Test -#as: -march=armv9.5-a+memtag +#as: -march=armv8-a+occmo #objdump: -dr .*: file format .* @@ -7,12 +7,7 @@ Disassembly of section .text: 0+ <.*>: - [^:]*: d50b7b00 dc cvaoc, x0 -[^:]*: d50b7b1e dc cvaoc, x30 -[^:]*: d50b7be0 dc cgdvaoc, x0 -[^:]*: d50b7bfe dc cgdvaoc, x30 +[^:]*: d50b7b1f dc cvaoc, xzr [^:]*: d50b7f00 dc civaoc, x0 -[^:]*: d50b7f1e dc civaoc, x30 -[^:]*: d50b7fe0 dc cigdvaoc, x0 -[^:]*: d50b7ffe dc cigdvaoc, x30 +[^:]*: d50b7f1f dc civaoc, xzr diff --git a/gas/testsuite/gas/aarch64/occmo.s b/gas/testsuite/gas/aarch64/occmo.s index 92cfaf006fc..750341d14de 100644 --- a/gas/testsuite/gas/aarch64/occmo.s +++ b/gas/testsuite/gas/aarch64/occmo.s @@ -1,8 +1,4 @@ dc cvaoc, x0 - dc cvaoc, x30 - dc cgdvaoc, x0 - dc cgdvaoc, x30 + dc cvaoc, xzr dc civaoc, x0 - dc civaoc, x30 - dc cigdvaoc, x0 - dc cigdvaoc, x30 + dc civaoc, xzr diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h index 3efd0b24db4..1c7d6f1c1b7 100644 --- a/include/opcode/aarch64.h +++ b/include/opcode/aarch64.h @@ -137,6 +137,8 @@ enum aarch64_feature_bit { AARCH64_FEATURE_SSBS, /* Memory Tagging Extension. */ AARCH64_FEATURE_MEMTAG, + /* Outer Cacheable Cache Maintenance Operation. */ + AARCH64_FEATURE_OCCMO, /* Transactional Memory Extension. */ AARCH64_FEATURE_TME, /* XS memory attribute. */ diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c index e075214ea37..b31f663358a 100644 --- a/opcodes/aarch64-opc.c +++ b/opcodes/aarch64-opc.c @@ -5216,8 +5216,8 @@ const aarch64_sys_ins_reg aarch64_sys_regs_dc[] = { "cvac", CPENS (3, C7, C10, 1), F_HASXT, AARCH64_NO_FEATURES }, { "cgvac", CPENS (3, C7, C10, 3), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) }, { "cgdvac", CPENS (3, C7, C10, 5), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) }, - { "cvaoc", CPENS (3, C7, C11, 0), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (V9_5A) }, - { "cgdvaoc", CPENS (3, C7, C11, 7), F_HASXT | F_ARCHEXT, AARCH64_FEATURES (2, V9_5A, MEMTAG) }, + { "cvaoc", CPENS (3, C7, C11, 0), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (OCCMO) }, + { "cgdvaoc", CPENS (3, C7, C11, 7), F_HASXT | F_ARCHEXT, AARCH64_FEATURES (2, OCCMO, MEMTAG) }, { "csw", CPENS (0, C7, C10, 2), F_HASXT, AARCH64_NO_FEATURES }, { "cgsw", CPENS (0, C7, C10, 4), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) }, { "cgdsw", CPENS (0, C7, C10, 6), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) }, @@ -5234,8 +5234,8 @@ const aarch64_sys_ins_reg aarch64_sys_regs_dc[] = { "cisw", CPENS (0, C7, C14, 2), F_HASXT, AARCH64_NO_FEATURES }, { "cigsw", CPENS (0, C7, C14, 4), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) }, { "cigdsw", CPENS (0, C7, C14, 6), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (MEMTAG) }, - { "civaoc", CPENS (3, C7, C15, 0), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (V9_5A) }, - { "cigdvaoc", CPENS (3, C7, C15, 7), F_HASXT | F_ARCHEXT, AARCH64_FEATURES (2, V9_5A, MEMTAG) }, + { "civaoc", CPENS (3, C7, C15, 0), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (OCCMO) }, + { "cigdvaoc", CPENS (3, C7, C15, 7), F_HASXT | F_ARCHEXT, AARCH64_FEATURES (2, OCCMO, MEMTAG) }, { "cipae", CPENS (4, C7, C14, 0), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (V8_7A) }, { "cigdpae", CPENS (4, C7, C14, 7), F_HASXT | F_ARCHEXT, AARCH64_FEATURE (V8_7A) }, { "cipapa", CPENS (6, C7, C14, 1), F_HASXT, AARCH64_NO_FEATURES },