v3 updates: 1. In the absence of the `HWCAP_LSE128' feature bit in the current Linux Kernel release, the feature check continues to rely on a user space-issued `mrs' instruction. Since the the ABI for exporting the AArch64 CPU ID/feature registers to userspace relies on FEAT_IDST [1], we make the ID_AA64ISAR0_EL1-mediated feature check contingent on having the HWCAP_CPUID bit set, ensuring FEAT_IDST support, avoiding potential runtime errors.
2. It is established that, given LSE2 is mandatory from Armv8.4 onward, LSE128 as introduced from Armv9.4 necessarily implies LSE2, such that a separate check for LSE2 is not necessary. 3. Given that the infrastructure for exposing `mrs' to userspace hooks into the exception handler, the feature-register read is relatively expensive and ought to be avoided where possible. Consequently, where we can ascertain whether prerequisites are met via HWCAPS, we query these as a way of returning early where we known unequivocally that a given feature cannot be implemented due to unmet dependencies. Such checks are added to both `has_lse2' and `has_lse128'. Regression-tested on aarch64-none-linux-gnu on Cortex-A72 and LSE128-enabled Armv-A Base RevC AEM FVP. [1] https://www.kernel.org/doc/html/v6.6/arch/arm64/cpu-feature-registers.html --- Building upon Wilco Dijkstra's work on AArch64 128-bit atomics for Libatomic, namely the patches from [1] and [2], this patch series extends the library's capabilities to dynamically select and emit Armv9.4-a LSE128 implementations of atomic operations via ifuncs at run-time whenever architectural support is present. Regression tested on aarch64-linux-gnu target with LSE128-support. [1] https://gcc.gnu.org/pipermail/gcc-patches/2023-June/620529.html [2] https://gcc.gnu.org/pipermail/gcc-patches/2023-August/626358.html Victor Do Nascimento (3): libatomic: atomic_16.S: Improve ENTRY, END and ALIAS macro interface libatomic: Enable LSE128 128-bit atomics for armv9.4-a aarch64: Add explicit checks for implicit LSE/LSE2 requirements. libatomic/Makefile.am | 3 + libatomic/Makefile.in | 1 + libatomic/acinclude.m4 | 19 ++ libatomic/auto-config.h.in | 3 + libatomic/config/linux/aarch64/atomic_16.S | 251 ++++++++++++++++--- libatomic/config/linux/aarch64/host-config.h | 36 ++- libatomic/configure | 59 ++++- libatomic/configure.ac | 1 + 8 files changed, 331 insertions(+), 42 deletions(-) -- 2.42.0