diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2022-11-15 14:08:55 +0000 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2023-12-08 11:29:06 +0000 |
commit | 328c17af772207cb03740809c05ba2c3abfb86be (patch) | |
tree | 308520ab2f13ae0b4c6ec7e72b512b4914bccd96 /gcc/tree.cc | |
parent | dbbfb52b0e9c66ee9d05b8fd17c4f44655e48463 (diff) | |
download | gcc-328c17af772207cb03740809c05ba2c3abfb86be.zip gcc-328c17af772207cb03740809c05ba2c3abfb86be.tar.gz gcc-328c17af772207cb03740809c05ba2c3abfb86be.tar.bz2 |
libgcc: aarch64: Add SME runtime support
The call ABI for SME (Scalable Matrix Extension) requires a number of
helper routines which are added to libgcc so they are tied to the
compiler version instead of the libc version. See
https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst#sme-support-routines
The routines are in shared libgcc and static libgcc eh, even though
they are not related to exception handling. This is to avoid linking
a copy of the routines into dynamic linked binaries, because TPIDR2_EL0
block can be extended in the future which is better to handle in a
single place per process.
The support routines have to decide if SME is accessible or not. Linux
tells userspace if SME is accessible via AT_HWCAP2, otherwise a new
__aarch64_sme_accessible symbol was introduced that a libc can define.
Due to libgcc and libc build order, the symbol availability cannot be
checked so for __aarch64_sme_accessible an unistd.h feature test macro
is used while such detection mechanism is not available for __getauxval
so we rely on configure checks based on the target triplet.
Asm helper code is added to make writing the routines easier.
libgcc/ChangeLog:
* config/aarch64/t-aarch64: Add sources to the build.
* config/aarch64/__aarch64_have_sme.c: New file.
* config/aarch64/__arm_sme_state.S: New file.
* config/aarch64/__arm_tpidr2_restore.S: New file.
* config/aarch64/__arm_tpidr2_save.S: New file.
* config/aarch64/__arm_za_disable.S: New file.
* config/aarch64/aarch64-asm.h: New file.
* config/aarch64/libgcc-sme.ver: New file.
Diffstat (limited to 'gcc/tree.cc')
0 files changed, 0 insertions, 0 deletions