[PATCH] aarch64: Add occmo flag for FEAT_OCCMO
Alice Carlotti
alice.carlotti@arm.com
Wed Jun 11 17:03:49 GMT 2025
On Thu, Jun 05, 2025 at 03:27:15PM +0100, Ezra.Sitorus@arm.com wrote:
> From: Ezra Sitorus <ezra.sitorus@arm.com>
>
> 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.
>
> Regression tested on aarch64-none-linux-gnu.
>
> Ezra
Thanks, this is ok
Alice
> ---
> gas/config/tc-aarch64.c | 1 +
> gas/doc/c-aarch64.texi | 2 ++
> gas/testsuite/gas/aarch64/occmo-memtag.d | 13 +++++++++++++
> gas/testsuite/gas/aarch64/occmo-memtag.s | 4 ++++
> gas/testsuite/gas/aarch64/occmo.d | 11 +++--------
> gas/testsuite/gas/aarch64/occmo.s | 8 ++------
> include/opcode/aarch64.h | 2 ++
> opcodes/aarch64-opc.c | 8 ++++----
> 8 files changed, 31 insertions(+), 18 deletions(-)
> create mode 100644 gas/testsuite/gas/aarch64/occmo-memtag.d
> create mode 100644 gas/testsuite/gas/aarch64/occmo-memtag.s
>
> diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
> index acb56044fb5..597b5a29f0d 100644
> --- a/gas/config/tc-aarch64.c
> +++ b/gas/config/tc-aarch64.c
> @@ -10672,6 +10672,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 10888d1e78f..186a6ca9ec0 100644
> --- a/gas/doc/c-aarch64.texi
> +++ b/gas/doc/c-aarch64.texi
> @@ -231,6 +231,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 dfe3f05820a..9db2163f278 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 8bd99a131e7..5aeca2e5d11 100644
> --- a/opcodes/aarch64-opc.c
> +++ b/opcodes/aarch64-opc.c
> @@ -5206,8 +5206,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) },
> @@ -5224,8 +5224,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 },
> --
> 2.45.2
>
More information about the Binutils
mailing list