This revision of the patch series addresses the following key pieces of upstream feedback:
* `aarch64-sys-regs.def', being identical in content to the file with the same name in Binutils, now retains the copyright header from Binutils. * We migrate away from the binary search handling of system-register lookups in favour of a hashmap approach, relaxing the requirement that all entries in `aarch64-sys-reg.def' be kept in alphabetical order. * A static selftest is added for sanity-checking of the contents of `aarch64-sys-regs.def'. Given the move to a hashmap lookup mechanism, no testing is needed for the preservation of alphabetical order, but a test is added to detect spurious duplicate register definitions. --- This patch series adds support for reading and writing to and from system registers via the relevant ACLE-defined builtins [1]. The patch series makes a series of additions to the aarch64-specific areas of the compiler to make this possible. Firstly, a mechanism for defining system registers is established via a new .def file and the new SYSREG macro. This macro is the same as is used in Binutils and system register entries are compatible with either code-base. Given the information contained in this system register definition file, a compile-time validation mechanism is implemented, such that any system register name passed as a string literal argument to these builtins can be checked against known system registers and its use for a given target architecture validated. Finally, patterns for each of these builtins are added to the back-end such that, if all validation criteria are met, the correct assembly is emitted. Thus, the following example of system register access is now valid for GCC: long long old = __arm_rsr("trcseqstr"); __arm_wsr("trcseqstr", new); Testing: - Bootstrap/regtest on aarch64-linux-gnu done. [1] https://arm-software.github.io/acle/main/acle.html Victor Do Nascimento (7): aarch64: Sync system register information with Binutils aarch64: Add support for aarch64-sys-regs.def aarch64: Implement system register validation tools aarch64: Add basic target_print_operand support for CONST_STRING aarch64: Implement system register r/w arm ACLE intrinsic functions aarch64: Add front-end argument type checking for target builtins aarch64: Add system register duplication check selftest gcc/config/aarch64/aarch64-builtins.cc | 233 ++++ gcc/config/aarch64/aarch64-c.cc | 4 +- gcc/config/aarch64/aarch64-protos.h | 5 + gcc/config/aarch64/aarch64-sys-regs.def | 1064 +++++++++++++++++ gcc/config/aarch64/aarch64.cc | 243 ++++ gcc/config/aarch64/aarch64.h | 36 + gcc/config/aarch64/aarch64.md | 17 + gcc/config/aarch64/arm_acle.h | 30 + gcc/config/aarch64/predicates.md | 4 + .../gcc.target/aarch64/acle/rwsr-1.c | 20 + .../gcc.target/aarch64/acle/rwsr-2.c | 15 + gcc/testsuite/gcc.target/aarch64/acle/rwsr.c | 144 +++ 12 files changed, 1813 insertions(+), 2 deletions(-) create mode 100644 gcc/config/aarch64/aarch64-sys-regs.def create mode 100644 gcc/testsuite/gcc.target/aarch64/acle/rwsr-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/acle/rwsr-2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/acle/rwsr.c -- 2.41.0