This patch is large in lines of code, but it is a fairly regular
extension of the first patch as it converts the high-half patterns
to standard RTL codes in the same fashion as the first patch did for the
low-half ones.
This now allows us to remove the unspec codes for these instructions as
there are no more uses of them left.

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

gcc/ChangeLog:

        * config/aarch64/aarch64-simd-builtins.def (shrn2): Rename builtins 
to...
        (shrn2_n): ... This.
        (rshrn2): Rename builtins to...
        (rshrn2_n): ... This.
        * config/aarch64/arm_neon.h (vrshrn_high_n_s16): Adjust for the above.
        (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.
        (vshrn_high_n_s16): Likewise.
        (vshrn_high_n_s32): Likewise.
        (vshrn_high_n_s64): Likewise.
        (vshrn_high_n_u16): Likewise.
        (vshrn_high_n_u32): Likewise.
        (vshrn_high_n_u64): Likewise.
        * config/aarch64/aarch64-simd.md (*aarch64_<srn_op>shrn<mode>2_vect_le):
        Delete.
        (*aarch64_<srn_op>shrn<mode>2_vect_be): Likewise.
        (aarch64_shrn2<mode>_insn_le): Likewise.
        (aarch64_shrn2<mode>_insn_be): Likewise.
        (aarch64_shrn2<mode>): Likewise.
        (aarch64_rshrn2<mode>_insn_le): Likewise.
        (aarch64_rshrn2<mode>_insn_be): Likewise.
        (aarch64_rshrn2<mode>): Likewise.
        (aarch64_<sur>q<r>shr<u>n2_n<mode>_insn_le): Likewise.
        (aarch64_<shrn_op>shrn2_n<mode>_insn_le): New define_insn.
        (aarch64_<sur>q<r>shr<u>n2_n<mode>_insn_be): Delete.
        (aarch64_<shrn_op>shrn2_n<mode>_insn_be): New define_insn.
        (aarch64_<sur>q<r>shr<u>n2_n<mode>): Delete.
        (aarch64_<shrn_op>shrn2_n<mode>): New define_expand.
        (aarch64_<shrn_op>rshrn2_n<mode>_insn_le): New define_insn.
        (aarch64_<shrn_op>rshrn2_n<mode>_insn_be): New define_insn.
        (aarch64_<shrn_op>rshrn2_n<mode>): New define_expand.
        (aarch64_sqshrun2_n<mode>_insn_le): New define_insn.
        (aarch64_sqshrun2_n<mode>_insn_be): New define_insn.
        (aarch64_sqshrun2_n<mode>): New define_expand.
        (aarch64_sqrshrun2_n<mode>_insn_le): New define_insn.
        (aarch64_sqrshrun2_n<mode>_insn_be): New define_insn.
        (aarch64_sqrshrun2_n<mode>): New define_expand.
        * config/aarch64/iterators.md (UNSPEC_SQSHRUN, UNSPEC_SQRSHRUN,
        UNSPEC_SQSHRN, UNSPEC_UQSHRN, UNSPEC_SQRSHRN, UNSPEC_UQRSHRN):
        Delete unspec values.
        (VQSHRN_N): Delete int iterator.

Attachment: s4.patch
Description: s4.patch

Reply via email to