https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118328

--- Comment #23 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Alfie Richards
<[email protected]>:

https://gcc.gnu.org/g:7197d8062fddc26c05c0da0bbfcd4128de788e34

commit r16-5076-g7197d8062fddc26c05c0da0bbfcd4128de788e34
Author: Alfie Richards <[email protected]>
Date:   Wed Oct 15 13:34:55 2025 +0000

    aarch64: Add support for preserve_none function attribute [PR
target/118328]

    When applied to a function preserve_none changes the procedure call
standard
    such that all registers except stack pointer, frame register, and link
register
    are caller saved. Additionally, it changes the argument passing registers.

            PR target/118328

    gcc/ChangeLog:

            * config/aarch64/aarch64.cc (handle_aarch64_vector_pcs_attribute):
            Add handling for ARM_PCS_PRESERVE_NONE.
            (aarch64_pcs_exclusions): New definition.
            (aarch64_gnu_attributes): Add entry for preserve_none and add
            aarch64_pcs_exclusions to aarch64_vector_pcs entry.
            (aarch64_preserve_none_abi): New function.
            (aarch64_fntype_abi): Add handling for preserve_none.
            (aarch64_reg_save_mode): Add handling for ARM_PCS_PRESERVE_NONE.
            (aarch64_hard_regno_call_part_clobbered): Add handling for
            ARM_PCS_PRESERVE_NONE.
            (num_pcs_arg_regs): New helper function.
            (get_pcs_arg_reg): New helper function.
            (aarch64_function_ok_for_sibcall): Add handling for
ARM_PCS_PRESERVE_NONE.
            (aarch64_layout_arg): Add preserve_none argument lauout..
            (function_arg_preserve_none_regno_p): New helper function.
            (aarch64_function_arg): Update to handle preserve_none.
            (function_arg_preserve_none_regno_p): Update logic for
preserve_none.
            (aarch64_expand_builtin_va_start): Add preserve_none layout.
            (aarch64_setup_incoming_varargs): Add preserve_none layout.
            (aarch64_is_variant_pcs): Update for case of ARM_PCS_PRESERVE_NONE.
            (aarch64_comp_type_attributes): Add preserve_none.
            * config/aarch64/aarch64.h (NUM_PRESERVE_NONE_ARG_REGS): New macro.
            (PRESERVE_NONE_REGISTERS): New macro.
            (enum arm_pcs): Add ARM_PCS_PRESERVE_NONE.
            * doc/extend.texi (preserve_none): Add docs for new attribute.

    gcc/testsuite/ChangeLog:

            * gcc.target/aarch64/preserve_none_1.c: New test.
            * gcc.target/aarch64/preserve_none_mingw_1.c: New test.
            * gcc.target/aarch64/preserve_none_2.c: New test.
            * gcc.target/aarch64/preserve_none_3.c: New test.
            * gcc.target/aarch64/preserve_none_4.c: New test.
            * gcc.target/aarch64/preserve_none_5.c: New test.
            * gcc.target/aarch64/preserve_none_6.c: New test.
  • [Bug target/118328] Implemen... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to