This patch series adds support for reading and writing to and from system registers via the relevant ACLE-defined builtins [1], making 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 (6): 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 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 | 1059 +++++++++++++++++ gcc/config/aarch64/aarch64.cc | 182 +++ 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, 1747 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