Hi all,

This patch implements a number of scalar data processing intrinsics from ACLE
that were requested by some users. Some of these have fast single-instruction
sequences for Armv6 and later, but even for earlier versions they can still emit
an inline sequence or a call to libgcc (and ACLE recommends them being 
unconditionally
available).

Chris Sidebottom wrote most of the patch, I just cleaned it up, wired up some 
builtins
and adjusted the tests.

Bootstrapped and tested on arm-none-linux-gnueabihf.
Pushing to trunk.
Thanks,
Kyrill

Co-authored-by: Chris Sidebottom <chris.sidebot...@arm.com>

gcc/ChangeLog:

2023-05-24  Chris Sidebottom  <chris.sidebot...@arm.com>
            Kyrylo Tkachov  <kyrylo.tkac...@arm.com>

        * config/arm/arm.md (rbitsi2): Rename to...
        (arm_rbit): ... This.
        (ctzsi2): Adjust for the above.
        (arm_rev16si2): Convert to define_expand.
        (arm_rev16si2_alt1): New pattern.
        (arm_rev16si2_alt): Rename to...
        (*arm_rev16si2_alt2): ... This.
        * config/arm/arm_acle.h (__ror, __rorl, __rorll, __clz, __clzl, __clzll,
        __cls, __clsl, __clsll, __revsh, __rev, __revl, __revll, __rev16,
        __rev16l, __rev16ll, __rbit, __rbitl, __rbitll): Define intrinsics.
        * config/arm/arm_acle_builtins.def (rbit, rev16si2): Define builtins.

gcc/testsuite/ChangeLog:

        * gcc.target/arm/acle/data-intrinsics-armv6.c: New test.
        * gcc.target/arm/acle/data-intrinsics-assembly.c: New test.
        * gcc.target/arm/acle/data-intrinsics-rbit.c: New test.
        * gcc.target/arm/acle/data-intrinsics.c: New test.

Attachment: arm-acle.patch
Description: arm-acle.patch

Reply via email to