Hi all,

This patch moves the vrshrn* intrinsics to builtins away from inline asm.
It's a bit of code, but it's very similar to the recent vsrhn* reimplementation
except that we use an unspec rather than standard RTL codes for the 
functionality.

Bootstrapped and tested on aarch64-none-linux-gnu and aarch64_be-none-elf.

Pushing to trunk.
Thanks,
Kyrill

gcc/ChangeLog:

        * config/aarch64/aarch64-simd-builtins.def (rshrn, rshrn2): Define
        builtins.
        * config/aarch64/aarch64-simd.md (aarch64_rshrn<mode>_insn_le): Define.
        (aarch64_rshrn<mode>_insn_be): Likewise.
        (aarch64_rshrn<mode>): Likewise.
        (aarch64_rshrn2<mode>_insn_le): Likewise.
        (aarch64_rshrn2<mode>_insn_be): Likewise.
        (aarch64_rshrn2<mode>): Likewise.
        * config/aarch64/aarch64.md (unspec): Add UNSPEC_RSHRN.
        * config/aarch64/arm_neon.h (vrshrn_high_n_s16): Reimplement using 
builtin.
        (vrshrn_high_n_s32): Likewise.
        (vrshrn_high_n_s64): Likewise.
        (vrshrn_high_n_u16): Likewise.
        (vrshrn_high_n_u32): Likewise.
        (vrshrn_high_n_u64): Likewise.
        (vrshrn_n_s16): Likewise.
        (vrshrn_n_s32): Likewise.
        (vrshrn_n_s64): Likewise.
        (vrshrn_n_u16): Likewise.
        (vrshrn_n_u32): Likewise.
        (vrshrn_n_u64): Likewise.

gcc/testsuite/ChangeLog:

        * gcc.target/aarch64/narrow_high-intrinsics.c: Adjust rshrn2 assembly
        scan.

Attachment: vrshrn.patch
Description: vrshrn.patch

Reply via email to