diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2023-12-05 10:11:30 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2023-12-05 10:11:30 +0000 |
commit | 0e7fee57c00ae17611651e0b057dc03b6e276b82 (patch) | |
tree | 916d58942dd9d5e925e1232d95a9545c0c431880 /libgcc | |
parent | 0e9aa05df6c643610a3821af52eda642a525a886 (diff) | |
download | gcc-0e7fee57c00ae17611651e0b057dc03b6e276b82.zip gcc-0e7fee57c00ae17611651e0b057dc03b6e276b82.tar.gz gcc-0e7fee57c00ae17611651e0b057dc03b6e276b82.tar.bz2 |
aarch64: Update sibcall handling for SME
We only support tail calls between functions with the same PSTATE.ZA
setting ("private-ZA" to "private-ZA" and "shared-ZA" to "shared-ZA").
Only a normal non-streaming function can tail-call another non-streaming
function, and only a streaming function can tail-call another streaming
function. Any function can tail-call a streaming-compatible function.
gcc/
* config/aarch64/aarch64.cc (aarch64_function_ok_for_sibcall):
Enforce PSTATE.SM and PSTATE.ZA restrictions.
(aarch64_expand_epilogue): Save and restore the arguments
to a sibcall around any change to PSTATE.SM.
gcc/testsuite/
* gcc.target/aarch64/sme/sibcall_1.c: New test.
* gcc.target/aarch64/sme/sibcall_2.c: Likewise.
* gcc.target/aarch64/sme/sibcall_3.c: Likewise.
* gcc.target/aarch64/sme/sibcall_4.c: Likewise.
* gcc.target/aarch64/sme/sibcall_5.c: Likewise.
* gcc.target/aarch64/sme/sibcall_6.c: Likewise.
* gcc.target/aarch64/sme/sibcall_7.c: Likewise.
* gcc.target/aarch64/sme/sibcall_8.c: Likewise.
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions