Hi Kyrill,

This patches was already committed.
I have resend this by mistake.
Sorry, please ignore this.

Regards
SRI.
________________________________
From: Gcc-patches <gcc-patches-boun...@gcc.gnu.org> on behalf of Srinath 
Parvathaneni <srinath.parvathan...@arm.com>
Sent: 18 March 2020 11:18
To: gcc-patches@gcc.gnu.org <gcc-patches@gcc.gnu.org>
Subject: [PATCH v3][ARM][GCC][1/3x]: MVE intrinsics with ternary operands.

Hello Kyrill,

Following patch is the rebased version of v2.
(version v2) https://gcc.gnu.org/pipermail/gcc-patches/2020-March/542068.html

####

Hello,

This patch supports following MVE ACLE intrinsics with ternary operands.

vabavq_s8, vabavq_s16, vabavq_s32, vbicq_m_n_s16, vbicq_m_n_s32,
vbicq_m_n_u16, vbicq_m_n_u32, vcmpeqq_m_f16, vcmpeqq_m_f32,
vcvtaq_m_s16_f16, vcvtaq_m_u16_f16, vcvtaq_m_s32_f32, vcvtaq_m_u32_f32,
vcvtq_m_f16_s16, vcvtq_m_f16_u16, vcvtq_m_f32_s32, vcvtq_m_f32_u32,
vqrshrnbq_n_s16, vqrshrnbq_n_u16, vqrshrnbq_n_s32, vqrshrnbq_n_u32,
vqrshrunbq_n_s16, vqrshrunbq_n_s32, vrmlaldavhaq_s32, vrmlaldavhaq_u32,
vshlcq_s8, vshlcq_u8, vshlcq_s16, vshlcq_u16, vshlcq_s32, vshlcq_u32,
vabavq_s8, vabavq_s16, vabavq_s32.

Please refer to M-profile Vector Extension (MVE) intrinsics [1]  for more 
details.
[1] 
https://developer.arm.com/architectures/instruction-sets/simd-isas/helium/mve-intrinsics

Regression tested on arm-none-eabi and found no regressions.

Ok for trunk?

Thanks,
Srinath.

gcc/ChangeLog:

2019-10-23  Andre Vieira  <andre.simoesdiasvie...@arm.com>
            Mihail Ionescu  <mihail.ione...@arm.com>
            Srinath Parvathaneni  <srinath.parvathan...@arm.com>

        * config/arm/arm-builtins.c (TERNOP_UNONE_UNONE_UNONE_IMM_QUALIFIERS):
        Define qualifier for ternary operands.
        (TERNOP_UNONE_UNONE_NONE_NONE_QUALIFIERS): Likewise.
        (TERNOP_UNONE_NONE_UNONE_IMM_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_UNONE_IMM_QUALIFIERS): Likewise.
        (TERNOP_UNONE_UNONE_NONE_IMM_QUALIFIERS): Likewise.
        (TERNOP_UNONE_UNONE_NONE_UNONE_QUALIFIERS): Likewise.
        (TERNOP_UNONE_UNONE_IMM_UNONE_QUALIFIERS): Likewise.
        (TERNOP_UNONE_NONE_NONE_UNONE_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_NONE_IMM_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_NONE_UNONE_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_IMM_UNONE_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_UNONE_UNONE_QUALIFIERS): Likewise.
        (TERNOP_UNONE_UNONE_UNONE_UNONE_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_NONE_NONE_QUALIFIERS): Likewise.
        * config/arm/arm_mve.h (vabavq_s8): Define macro.
        (vabavq_s16): Likewise.
        (vabavq_s32): Likewise.
        (vbicq_m_n_s16): Likewise.
        (vbicq_m_n_s32): Likewise.
        (vbicq_m_n_u16): Likewise.
        (vbicq_m_n_u32): Likewise.
        (vcmpeqq_m_f16): Likewise.
        (vcmpeqq_m_f32): Likewise.
        (vcvtaq_m_s16_f16): Likewise.
        (vcvtaq_m_u16_f16): Likewise.
        (vcvtaq_m_s32_f32): Likewise.
        (vcvtaq_m_u32_f32): Likewise.
        (vcvtq_m_f16_s16): Likewise.
        (vcvtq_m_f16_u16): Likewise.
        (vcvtq_m_f32_s32): Likewise.
        (vcvtq_m_f32_u32): Likewise.
        (vqrshrnbq_n_s16): Likewise.
        (vqrshrnbq_n_u16): Likewise.
        (vqrshrnbq_n_s32): Likewise.
        (vqrshrnbq_n_u32): Likewise.
        (vqrshrunbq_n_s16): Likewise.
        (vqrshrunbq_n_s32): Likewise.
        (vrmlaldavhaq_s32): Likewise.
        (vrmlaldavhaq_u32): Likewise.
        (vshlcq_s8): Likewise.
        (vshlcq_u8): Likewise.
        (vshlcq_s16): Likewise.
        (vshlcq_u16): Likewise.
        (vshlcq_s32): Likewise.
        (vshlcq_u32): Likewise.
        (vabavq_u8): Likewise.
        (vabavq_u16): Likewise.
        (vabavq_u32): Likewise.
        (__arm_vabavq_s8): Define intrinsic.
        (__arm_vabavq_s16): Likewise.
        (__arm_vabavq_s32): Likewise.
        (__arm_vabavq_u8): Likewise.
        (__arm_vabavq_u16): Likewise.
        (__arm_vabavq_u32): Likewise.
        (__arm_vbicq_m_n_s16): Likewise.
        (__arm_vbicq_m_n_s32): Likewise.
        (__arm_vbicq_m_n_u16): Likewise.
        (__arm_vbicq_m_n_u32): Likewise.
        (__arm_vqrshrnbq_n_s16): Likewise.
        (__arm_vqrshrnbq_n_u16): Likewise.
        (__arm_vqrshrnbq_n_s32): Likewise.
        (__arm_vqrshrnbq_n_u32): Likewise.
        (__arm_vqrshrunbq_n_s16): Likewise.
        (__arm_vqrshrunbq_n_s32): Likewise.
        (__arm_vrmlaldavhaq_s32): Likewise.
        (__arm_vrmlaldavhaq_u32): Likewise.
        (__arm_vshlcq_s8): Likewise.
        (__arm_vshlcq_u8): Likewise.
        (__arm_vshlcq_s16): Likewise.
        (__arm_vshlcq_u16): Likewise.
        (__arm_vshlcq_s32): Likewise.
        (__arm_vshlcq_u32): Likewise.
        (__arm_vcmpeqq_m_f16): Likewise.
        (__arm_vcmpeqq_m_f32): Likewise.
        (__arm_vcvtaq_m_s16_f16): Likewise.
        (__arm_vcvtaq_m_u16_f16): Likewise.
        (__arm_vcvtaq_m_s32_f32): Likewise.
        (__arm_vcvtaq_m_u32_f32): Likewise.
        (__arm_vcvtq_m_f16_s16): Likewise.
        (__arm_vcvtq_m_f16_u16): Likewise.
        (__arm_vcvtq_m_f32_s32): Likewise.
        (__arm_vcvtq_m_f32_u32): Likewise.
        (vcvtaq_m): Define polymorphic variant.
        (vcvtq_m): Likewise.
        (vabavq): Likewise.
        (vshlcq): Likewise.
        (vbicq_m_n): Likewise.
        (vqrshrnbq_n): Likewise.
        (vqrshrunbq_n): Likewise.
        * config/arm/arm_mve_builtins.def
        (TERNOP_UNONE_UNONE_UNONE_IMM_QUALIFIERS): Use the builtin qualifer.
        (TERNOP_UNONE_UNONE_NONE_NONE_QUALIFIERS): Likewise.
        (TERNOP_UNONE_NONE_UNONE_IMM_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_UNONE_IMM_QUALIFIERS): Likewise.
        (TERNOP_UNONE_UNONE_NONE_IMM_QUALIFIERS): Likewise.
        (TERNOP_UNONE_UNONE_NONE_UNONE_QUALIFIERS): Likewise.
        (TERNOP_UNONE_UNONE_IMM_UNONE_QUALIFIERS): Likewise.
        (TERNOP_UNONE_NONE_NONE_UNONE_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_NONE_IMM_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_NONE_UNONE_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_IMM_UNONE_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_UNONE_UNONE_QUALIFIERS): Likewise.
        (TERNOP_UNONE_UNONE_UNONE_UNONE_QUALIFIERS): Likewise.
        (TERNOP_NONE_NONE_NONE_NONE_QUALIFIERS): Likewise.
        * config/arm/mve.md (VBICQ_M_N): Define iterator.
        (VCVTAQ_M): Likewise.
        (VCVTQ_M_TO_F): Likewise.
        (VQRSHRNBQ_N): Likewise.
        (VABAVQ): Likewise.
        (VSHLCQ): Likewise.
        (VRMLALDAVHAQ): Likewise.
        (mve_vbicq_m_n_<supf><mode>): Define RTL pattern.
        (mve_vcmpeqq_m_f<mode>): Likewise.
        (mve_vcvtaq_m_<supf><mode>): Likewise.
        (mve_vcvtq_m_to_f_<supf><mode>): Likewise.
        (mve_vqrshrnbq_n_<supf><mode>): Likewise.
        (mve_vqrshrunbq_n_s<mode>): Likewise.
        (mve_vrmlaldavhaq_<supf>v4si): Likewise.
        (mve_vabavq_<supf><mode>): Likewise.
        (mve_vshlcq_<supf><mode>): Likewise.
        (mve_vshlcq_<supf><mode>): Likewise.
        (mve_vshlcq_vec_<supf><mode>): Define RTL expand.
        (mve_vshlcq_carry_<supf><mode>): Likewise.

gcc/testsuite/ChangeLog:

2019-10-23  Andre Vieira  <andre.simoesdiasvie...@arm.com>
            Mihail Ionescu  <mihail.ione...@arm.com>
            Srinath Parvathaneni  <srinath.parvathan...@arm.com>

        * gcc.target/arm/mve/intrinsics/vabavq_s16.c: New test.
        * gcc.target/arm/mve/intrinsics/vabavq_s32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vabavq_s8.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vabavq_u16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vabavq_u32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vabavq_u8.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vbicq_m_n_s16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vbicq_m_n_s32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vbicq_m_n_u16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vbicq_m_n_u32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vcmpeqq_m_f16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vcmpeqq_m_f32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vcvtaq_m_s16_f16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vcvtaq_m_s32_f32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vcvtaq_m_u16_f16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vcvtaq_m_u32_f32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vcvtq_m_f16_s16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vcvtq_m_f16_u16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vcvtq_m_f32_s32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vcvtq_m_f32_u32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vqrshrnbq_n_s16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vqrshrnbq_n_s32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vqrshrnbq_n_u16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vqrshrnbq_n_u32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vqrshrunbq_n_s16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vqrshrunbq_n_s32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vrmlaldavhaq_s32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vrmlaldavhaq_u32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vshlcq_s16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vshlcq_s32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vshlcq_s8.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vshlcq_u16.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vshlcq_u32.c: Likewise.
        * gcc.target/arm/mve/intrinsics/vshlcq_u8.c: Likewise.

Reply via email to