Hello, This patch enables the use of LDAPR for load-acquire semantics. After some internal investigation based on the work published by Podkopaev et al. (https://dl.acm.org/doi/10.1145/3290382) we can confirm that using LDAPR for the C++ load-acquire semantics is a correct relaxation. Bootstrapped and regression tested on aarch64-none-linux-gnu. OK for trunk? 2022-11-09  Andre Vieira              Kyrylo Tkachov  gcc/ChangeLog:         * config/aarch64/aarch64.h (AARCH64_ISA_RCPC): New Macro.         (TARGET_RCPC): New Macro.         * config/aarch64/atomics.md (atomic_load): Change into         an expand.         (aarch64_atomic_load_rcpc): New define_insn for ldapr.         (aarch64_atomic_load): Rename of old define_insn for ldar.         * config/aarch64/iterators.md (UNSPEC_LDAP): New unspec enum value.         * doc/gcc/gcc-command-options/machine-dependent-options/aarch64-options.rst         (rcpc): Ammend documentation to mention the effects on code generation. gcc/testsuite/ChangeLog:         * gcc.target/aarch64/ldapr.c: New test.         * lib/target-supports.exp (add_options_for_aarch64_rcpc): New options procedure.         (check_effective_target_aarch64_rcpc_ok_nocache): New check-effective-target.         (check_effective_target_aarch64_rcpc_ok): Likewise.