Hi Srinath, > -----Original Message----- > From: Srinath Parvathaneni <srinath.parvathan...@arm.com> > Sent: 16 March 2020 12:01 > To: gcc-patches@gcc.gnu.org > Cc: Kyrylo Tkachov <kyrylo.tkac...@arm.com> > Subject: [PATCH v2][ARM][GCC][1/3x]: MVE intrinsics with ternary operands. > > Hello Kyrill, > > Following patch is the rebased version of v1. > (version v1) https://gcc.gnu.org/pipermail/gcc-patches/2019- > November/534358.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?
I've pushed this patch to master for you. Thanks, Kyrill > > 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.