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

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Spencer Abson <sab...@gcc.gnu.org>:

https://gcc.gnu.org/g:d52e9ef98bb30872482a46e7a2ec6a20c3ca4a4c

commit r16-2664-gd52e9ef98bb30872482a46e7a2ec6a20c3ca4a4c
Author: Spencer Abson <spencer.ab...@arm.com>
Date:   Tue Jul 29 12:23:32 2025 +0000

    aarch64: Prevent streaming-compatible code from assembler rejection
[PR121028]

    Streaming-compatible functions can be compiled without SME enabled, but
need
    to use "SMSTART SM" and "SMSTOP SM" to temporarily switch into the
streaming
    state of a callee.  These switches are conditional on the current mode
being
    opposite to the target mode, so no SME instructions are executed if SME is
not
    available.

    However, in GAS, "SMSTART SM" and "SMSTOP SM" always require +sme.  A call
    from a streaming-compatible function, compiled without SME enabled, to a
non
    -streaming function will be rejected as:

    Error: selected processor does not support `smstop sm'..

    To work around this, we make use of the .inst directive to insert the
literal
    encodings of "SMSTART SM" and "SMSTOP SM".

    gcc/ChangeLog:
            PR target/121028
            * config/aarch64/aarch64-sme.md (aarch64_smstart_sm): Use the .inst
            directive if !TARGET_SME.
            (aarch64_smstop_sm): Likewise.

    gcc/testsuite/ChangeLog:
            PR target/121028
            * gcc.target/aarch64/sme/call_sm_switch_1.c: Tell check-function
            -bodies not to ignore .inst directives, and replace the test for
            "smstart sm" with one for it's encoding.
            * gcc.target/aarch64/sme/call_sm_switch_11.c: Likewise.
            * gcc.target/aarch64/sme/pr121028.c: New test.

Reply via email to