Hi gcc-patches mailing list,
Christophe Lyon <[email protected]> has requested that the following forgejo 
pull request
be published on the mailing list.

Created on: 2025-10-06 16:12:29+00:00
Latest update: 2025-10-15 12:36:35+00:00
Changes: 8 changed files, 121 additions, 28 deletions
Head revision: clyon/gcc-TEST ref MVE-vadcq-carry commit 
948553c3ffe2da3574a3886ddd0ae581dfd19306
Base revision: gcc/gcc-TEST ref trunk commit 
0088e4a419eb5cc3563a8b4b90fe71f0e33a9a84 r16-4080-g0088e4a419eb5c
Merge base: 0088e4a419eb5cc3563a8b4b90fe71f0e33a9a84
Full diff url: https://forge.sourceware.org/gcc/gcc-TEST/pulls/91.diff
Discussion:  https://forge.sourceware.org/gcc/gcc-TEST/pulls/91
Requested Reviewers: rearnsha

The vadcq and vsbcq patterns had two problems:
- the adc / sbc part of the pattern did not mention the use of vfpcc
- the carry calcultation part should use a different unspec code

In addtion, the get_fpscr_nzcvqc and set_fpscr_nzcvqc were
over-cautious by using unspec_volatile when unspec is really what they
need.  Making them unspec enables to remove redundant accesses to
FPSCR_nzcvqc.

gcc/ChangeLog:
        * config/arm/iterators.md (VxCIQ_carry, VxCIQ_M_carry, VxCQ_carry)
        (VxCQ_M_carry): New iterators.
        * config/arm/mve.md (get_fpscr_nzcvqc, set_fpscr_nzcvqc): Use
        unspec instead of unspec_volatile.
        (vadciq, vadciq_m, vadcq, vadcq_m): Use vfpcc in operation.  Use a
        different unspec code for carry calcultation.
        * config/arm/unspecs.md (VADCQ_U_carry, VADCQ_M_U_carry)
        (VADCQ_S_carry, VADCQ_M_S_carry, VSBCIQ_U_carry ,VSBCIQ_S_carry
        ,VSBCIQ_M_U_carry ,VSBCIQ_M_S_carry ,VSBCQ_U_carry ,VSBCQ_S_carry
        ,VSBCQ_M_U_carry ,VSBCQ_M_S_carry ,VADCIQ_U_carry
        ,VADCIQ_M_U_carry ,VADCIQ_S_carry ,VADCIQ_M_S_carry): New unspec
        codes.

gcc/testsuite/ChangeLog:
        * gcc.target/arm/mve/intrinsics/vadcq-check-carry.c: New test.
        * gcc.target/arm/mve/intrinsics/vadcq_m_s32.c: Adjust instructions
        order.
        * gcc.target/arm/mve/intrinsics/vadcq_m_u32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vsbcq_m_s32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vsbcq_m_u32.c: Likewise.


Changed files:
- A: gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq-check-carry.c
- M: gcc/config/arm/iterators.md
- M: gcc/config/arm/mve.md
- M: gcc/config/arm/unspecs.md
- M: gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_s32.c
- M: gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq_m_u32.c
- M: gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_s32.c
- M: gcc/testsuite/gcc.target/arm/mve/intrinsics/vsbcq_m_u32.c


Christophe Lyon (1):
  arm: [MVE] Fix carry-in support for vadcq / vsbcq [PR122189]

 gcc/config/arm/iterators.md                   | 17 +++++++
 gcc/config/arm/mve.md                         | 36 +++++++++-----
 gcc/config/arm/unspecs.md                     | 16 +++++++
 .../arm/mve/intrinsics/vadcq-check-carry.c    | 48 +++++++++++++++++++
 .../arm/mve/intrinsics/vadcq_m_s32.c          |  8 ++--
 .../arm/mve/intrinsics/vadcq_m_u32.c          |  8 ++--
 .../arm/mve/intrinsics/vsbcq_m_s32.c          |  8 ++--
 .../arm/mve/intrinsics/vsbcq_m_u32.c          |  8 ++--
 8 files changed, 121 insertions(+), 28 deletions(-)
 create mode 100644 
gcc/testsuite/gcc.target/arm/mve/intrinsics/vadcq-check-carry.c

-- 
2.50.1

Reply via email to