-
- Downloads
aarch64: Add ZT0
SME2 adds a 512-bit lookup table called ZT0. It is enabled and disabled by PSTATE.ZA, just like ZA itself. This patch adds support for the register, including saving and restoring contents. The code reuses the V8DI that was added for LS64, including the associated memory classification rules. (The ZT0 range is more restricted than the LS64 range, but that's enforced by predicates and constraints.) gcc/ * config/aarch64/aarch64.md (ZT0_REGNUM): New constant. (LAST_FAKE_REGNUM): Bump to include it. * config/aarch64/aarch64.h (FIXED_REGISTERS): Add an entry for ZT0. (CALL_REALLY_USED_REGISTERS, REGISTER_NAMES): Likewise. (REG_CLASS_CONTENTS): Likewise. (machine_function): Add zt0_save_buffer. (CUMULATIVE_ARGS): Add shared_zt0_flags; * config/aarch64/aarch64.cc (aarch64_check_state_string): Handle zt0. (aarch64_fntype_pstate_za, aarch64_fndecl_pstate_za): Likewise. (aarch64_function_arg): Add the shared ZT0 flags as an extra limb of the parallel. (aarch64_init_cumulative_args): Initialize shared_zt0_flags. (aarch64_extra_live_on_entry): Handle ZT0_REGNUM. (aarch64_epilogue_uses): Likewise. (aarch64_get_zt0_save_buffer, aarch64_save_zt0): New functions. (aarch64_restore_zt0): Likewise. (aarch64_start_call_args): Reject calls to functions that share ZT0 from functions that have no ZT0 state. Save ZT0 around shared-ZA calls that do not share ZT0. (aarch64_expand_call): Handle ZT0. Reject calls to functions that share ZT0 but not ZA from functions with ZA state. (aarch64_end_call_args): Restore ZT0 after calls to shared-ZA functions that do not share ZT0. (aarch64_set_current_function): Require +sme2 for functions that have ZT0 state. (aarch64_function_attribute_inlinable_p): Don't allow functions to be inlined if they have local zt0 state. (AARCH64_IPA_CLOBBERS_ZT0): New constant. (aarch64_update_ipa_fn_target_info): Record asms that clobber ZT0. (aarch64_can_inline_p): Don't inline callees that clobber ZT0 into functions that have ZT0 state. (aarch64_comp_type_attributes): Check for compatible ZT0 sharing. (aarch64_optimize_mode_switching): Use mode switching if the function has ZT0 state. (aarch64_mode_emit_local_sme_state): Save and restore ZT0 around calls to private-ZA functions. (aarch64_mode_needed_local_sme_state): Require ZA to be active for instructions that access ZT0. (aarch64_mode_entry): Mark ZA as dead on entry if the function only shares state other than "za" itself. (aarch64_mode_exit): Likewise mark ZA as dead on return. (aarch64_md_asm_adjust): Extend handling of ZA clobbers to ZT0. * config/aarch64/aarch64-c.cc (aarch64_define_unconditional_macros): Define __ARM_STATE_ZT0. * config/aarch64/aarch64-sme.md (UNSPECV_ASM_UPDATE_ZT0): New unspecv. (aarch64_asm_update_zt0): New insn. (UNSPEC_RESTORE_ZT0): New unspec. (aarch64_sme_ldr_zt0, aarch64_restore_zt0): New insns. (aarch64_sme_str_zt0): Likewise. gcc/testsuite/ * gcc.target/aarch64/sme/zt0_state_1.c: New test. * gcc.target/aarch64/sme/zt0_state_2.c: Likewise. * gcc.target/aarch64/sme/zt0_state_3.c: Likewise. * gcc.target/aarch64/sme/zt0_state_4.c: Likewise. * gcc.target/aarch64/sme/zt0_state_5.c: Likewise. * gcc.target/aarch64/sme/zt0_state_6.c: Likewise.
Showing
- gcc/config/aarch64/aarch64-c.cc 1 addition, 0 deletionsgcc/config/aarch64/aarch64-c.cc
- gcc/config/aarch64/aarch64-sme.md 63 additions, 0 deletionsgcc/config/aarch64/aarch64-sme.md
- gcc/config/aarch64/aarch64.cc 181 additions, 28 deletionsgcc/config/aarch64/aarch64.cc
- gcc/config/aarch64/aarch64.h 9 additions, 5 deletionsgcc/config/aarch64/aarch64.h
- gcc/config/aarch64/aarch64.md 5 additions, 2 deletionsgcc/config/aarch64/aarch64.md
- gcc/testsuite/gcc.target/aarch64/sme/zt0_state_1.c 65 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/sme/zt0_state_1.c
- gcc/testsuite/gcc.target/aarch64/sme/zt0_state_2.c 31 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/sme/zt0_state_2.c
- gcc/testsuite/gcc.target/aarch64/sme/zt0_state_3.c 6 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/sme/zt0_state_3.c
- gcc/testsuite/gcc.target/aarch64/sme/zt0_state_4.c 53 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/sme/zt0_state_4.c
- gcc/testsuite/gcc.target/aarch64/sme/zt0_state_5.c 260 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/sme/zt0_state_5.c
- gcc/testsuite/gcc.target/aarch64/sme/zt0_state_6.c 54 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/sme/zt0_state_6.c
Loading
Please register or sign in to comment