Hi Srinath,

> -----Original Message-----
> From: Srinath Parvathaneni <srinath.parvathan...@arm.com>
> Sent: 18 March 2020 11:32
> To: gcc-patches@gcc.gnu.org
> Cc: Kyrylo Tkachov <kyrylo.tkac...@arm.com>
> Subject: [PATCH v2][ARM][GCC][4/4x]: MVE intrinsics with quaternary
> operands.
> 
> Hello Kyrill,
> 
> Following patch is the rebased version of v1.
> (version v1) https://gcc.gnu.org/pipermail/gcc-patches/2019-
> November/534345.html
> 
> ####
> 
> Hello,
> 
> This patch supports following MVE ACLE intrinsics with quaternary operands.
> 
> vabdq_m_f32, vabdq_m_f16, vaddq_m_f32, vaddq_m_f16, vaddq_m_n_f32,
> vaddq_m_n_f16, vandq_m_f32, vandq_m_f16, vbicq_m_f32, vbicq_m_f16,
> vbrsrq_m_n_f32, vbrsrq_m_n_f16, vcaddq_rot270_m_f32,
> vcaddq_rot270_m_f16, vcaddq_rot90_m_f32, vcaddq_rot90_m_f16,
> vcmlaq_m_f32, vcmlaq_m_f16, vcmlaq_rot180_m_f32,
> vcmlaq_rot180_m_f16, vcmlaq_rot270_m_f32, vcmlaq_rot270_m_f16,
> vcmlaq_rot90_m_f32, vcmlaq_rot90_m_f16, vcmulq_m_f32, vcmulq_m_f16,
> vcmulq_rot180_m_f32, vcmulq_rot180_m_f16, vcmulq_rot270_m_f32,
> vcmulq_rot270_m_f16, vcmulq_rot90_m_f32, vcmulq_rot90_m_f16,
> vcvtq_m_n_s32_f32, vcvtq_m_n_s16_f16, vcvtq_m_n_u32_f32,
> vcvtq_m_n_u16_f16, veorq_m_f32, veorq_m_f16, vfmaq_m_f32,
> vfmaq_m_f16, vfmaq_m_n_f32, vfmaq_m_n_f16, vfmasq_m_n_f32,
> vfmasq_m_n_f16, vfmsq_m_f32, vfmsq_m_f16, vmaxnmq_m_f32,
> vmaxnmq_m_f16, vminnmq_m_f32, vminnmq_m_f16, vmulq_m_f32,
> vmulq_m_f16, vmulq_m_n_f32, vmulq_m_n_f16, vornq_m_f32,
> vornq_m_f16, vorrq_m_f32, vorrq_m_f16, vsubq_m_f32, vsubq_m_f16,
> vsubq_m_n_f32, vsubq_m_n_f16.
> 
> 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, I've pushed this patch to master.
Kyrill

> 
> Thanks,
> Srinath.
> 
> gcc/ChangeLog:
> 
> 2019-10-31  Andre Vieira  <andre.simoesdiasvie...@arm.com>
>             Mihail Ionescu  <mihail.ione...@arm.com>
>             Srinath Parvathaneni  <srinath.parvathan...@arm.com>
> 
>       * config/arm/arm_mve.h (vabdq_m_f32): Define macro.
>       (vabdq_m_f16): Likewise.
>       (vaddq_m_f32): Likewise.
>       (vaddq_m_f16): Likewise.
>       (vaddq_m_n_f32): Likewise.
>       (vaddq_m_n_f16): Likewise.
>       (vandq_m_f32): Likewise.
>       (vandq_m_f16): Likewise.
>       (vbicq_m_f32): Likewise.
>       (vbicq_m_f16): Likewise.
>       (vbrsrq_m_n_f32): Likewise.
>       (vbrsrq_m_n_f16): Likewise.
>       (vcaddq_rot270_m_f32): Likewise.
>       (vcaddq_rot270_m_f16): Likewise.
>       (vcaddq_rot90_m_f32): Likewise.
>       (vcaddq_rot90_m_f16): Likewise.
>       (vcmlaq_m_f32): Likewise.
>       (vcmlaq_m_f16): Likewise.
>       (vcmlaq_rot180_m_f32): Likewise.
>       (vcmlaq_rot180_m_f16): Likewise.
>       (vcmlaq_rot270_m_f32): Likewise.
>       (vcmlaq_rot270_m_f16): Likewise.
>       (vcmlaq_rot90_m_f32): Likewise.
>       (vcmlaq_rot90_m_f16): Likewise.
>       (vcmulq_m_f32): Likewise.
>       (vcmulq_m_f16): Likewise.
>       (vcmulq_rot180_m_f32): Likewise.
>       (vcmulq_rot180_m_f16): Likewise.
>       (vcmulq_rot270_m_f32): Likewise.
>       (vcmulq_rot270_m_f16): Likewise.
>       (vcmulq_rot90_m_f32): Likewise.
>       (vcmulq_rot90_m_f16): Likewise.
>       (vcvtq_m_n_s32_f32): Likewise.
>       (vcvtq_m_n_s16_f16): Likewise.
>       (vcvtq_m_n_u32_f32): Likewise.
>       (vcvtq_m_n_u16_f16): Likewise.
>       (veorq_m_f32): Likewise.
>       (veorq_m_f16): Likewise.
>       (vfmaq_m_f32): Likewise.
>       (vfmaq_m_f16): Likewise.
>       (vfmaq_m_n_f32): Likewise.
>       (vfmaq_m_n_f16): Likewise.
>       (vfmasq_m_n_f32): Likewise.
>       (vfmasq_m_n_f16): Likewise.
>       (vfmsq_m_f32): Likewise.
>       (vfmsq_m_f16): Likewise.
>       (vmaxnmq_m_f32): Likewise.
>       (vmaxnmq_m_f16): Likewise.
>       (vminnmq_m_f32): Likewise.
>       (vminnmq_m_f16): Likewise.
>       (vmulq_m_f32): Likewise.
>       (vmulq_m_f16): Likewise.
>       (vmulq_m_n_f32): Likewise.
>       (vmulq_m_n_f16): Likewise.
>       (vornq_m_f32): Likewise.
>       (vornq_m_f16): Likewise.
>       (vorrq_m_f32): Likewise.
>       (vorrq_m_f16): Likewise.
>       (vsubq_m_f32): Likewise.
>       (vsubq_m_f16): Likewise.
>       (vsubq_m_n_f32): Likewise.
>       (vsubq_m_n_f16): Likewise.
>       (__attribute__): Likewise.
>       (__arm_vabdq_m_f32): Likewise.
>       (__arm_vabdq_m_f16): Likewise.
>       (__arm_vaddq_m_f32): Likewise.
>       (__arm_vaddq_m_f16): Likewise.
>       (__arm_vaddq_m_n_f32): Likewise.
>       (__arm_vaddq_m_n_f16): Likewise.
>       (__arm_vandq_m_f32): Likewise.
>       (__arm_vandq_m_f16): Likewise.
>       (__arm_vbicq_m_f32): Likewise.
>       (__arm_vbicq_m_f16): Likewise.
>       (__arm_vbrsrq_m_n_f32): Likewise.
>       (__arm_vbrsrq_m_n_f16): Likewise.
>       (__arm_vcaddq_rot270_m_f32): Likewise.
>       (__arm_vcaddq_rot270_m_f16): Likewise.
>       (__arm_vcaddq_rot90_m_f32): Likewise.
>       (__arm_vcaddq_rot90_m_f16): Likewise.
>       (__arm_vcmlaq_m_f32): Likewise.
>       (__arm_vcmlaq_m_f16): Likewise.
>       (__arm_vcmlaq_rot180_m_f32): Likewise.
>       (__arm_vcmlaq_rot180_m_f16): Likewise.
>       (__arm_vcmlaq_rot270_m_f32): Likewise.
>       (__arm_vcmlaq_rot270_m_f16): Likewise.
>       (__arm_vcmlaq_rot90_m_f32): Likewise.
>       (__arm_vcmlaq_rot90_m_f16): Likewise.
>       (__arm_vcmulq_m_f32): Likewise.
>       (__arm_vcmulq_m_f16): Likewise.
>       (__arm_vcmulq_rot180_m_f32): Define intrinsic.
>       (__arm_vcmulq_rot180_m_f16): Likewise.
>       (__arm_vcmulq_rot270_m_f32): Likewise.
>       (__arm_vcmulq_rot270_m_f16): Likewise.
>       (__arm_vcmulq_rot90_m_f32): Likewise.
>       (__arm_vcmulq_rot90_m_f16): Likewise.
>       (__arm_vcvtq_m_n_s32_f32): Likewise.
>       (__arm_vcvtq_m_n_s16_f16): Likewise.
>       (__arm_vcvtq_m_n_u32_f32): Likewise.
>       (__arm_vcvtq_m_n_u16_f16): Likewise.
>       (__arm_veorq_m_f32): Likewise.
>       (__arm_veorq_m_f16): Likewise.
>       (__arm_vfmaq_m_f32): Likewise.
>       (__arm_vfmaq_m_f16): Likewise.
>       (__arm_vfmaq_m_n_f32): Likewise.
>       (__arm_vfmaq_m_n_f16): Likewise.
>       (__arm_vfmasq_m_n_f32): Likewise.
>       (__arm_vfmasq_m_n_f16): Likewise.
>       (__arm_vfmsq_m_f32): Likewise.
>       (__arm_vfmsq_m_f16): Likewise.
>       (__arm_vmaxnmq_m_f32): Likewise.
>       (__arm_vmaxnmq_m_f16): Likewise.
>       (__arm_vminnmq_m_f32): Likewise.
>       (__arm_vminnmq_m_f16): Likewise.
>       (__arm_vmulq_m_f32): Likewise.
>       (__arm_vmulq_m_f16): Likewise.
>       (__arm_vmulq_m_n_f32): Likewise.
>       (__arm_vmulq_m_n_f16): Likewise.
>       (__arm_vornq_m_f32): Likewise.
>       (__arm_vornq_m_f16): Likewise.
>       (__arm_vorrq_m_f32): Likewise.
>       (__arm_vorrq_m_f16): Likewise.
>       (__arm_vsubq_m_f32): Likewise.
>       (__arm_vsubq_m_f16): Likewise.
>       (__arm_vsubq_m_n_f32): Likewise.
>       (__arm_vsubq_m_n_f16): Likewise.
>       (vabdq_m): Define polymorphic variant.
>       (vaddq_m): Likewise.
>       (vaddq_m_n): Likewise.
>       (vandq_m): Likewise.
>       (vbicq_m): Likewise.
>       (vbrsrq_m_n): Likewise.
>       (vcaddq_rot270_m): Likewise.
>       (vcaddq_rot90_m): Likewise.
>       (vcmlaq_m): Likewise.
>       (vcmlaq_rot180_m): Likewise.
>       (vcmlaq_rot270_m): Likewise.
>       (vcmlaq_rot90_m): Likewise.
>       (vcmulq_m): Likewise.
>       (vcmulq_rot180_m): Likewise.
>       (vcmulq_rot270_m): Likewise.
>       (vcmulq_rot90_m): Likewise.
>       (veorq_m): Likewise.
>       (vfmaq_m): Likewise.
>       (vfmaq_m_n): Likewise.
>       (vfmasq_m_n): Likewise.
>       (vfmsq_m): Likewise.
>       (vmaxnmq_m): Likewise.
>       (vminnmq_m): Likewise.
>       (vmulq_m): Likewise.
>       (vmulq_m_n): Likewise.
>       (vornq_m): Likewise.
>       (vsubq_m): Likewise.
>       (vsubq_m_n): Likewise.
>       (vorrq_m): Likewise.
>       * config/arm/arm_mve_builtins.def
> (QUADOP_NONE_NONE_NONE_IMM_UNONE): Use
>       builtin qualifier.
>       (QUADOP_NONE_NONE_NONE_NONE_UNONE): Likewise.
>       (QUADOP_UNONE_UNONE_NONE_IMM_UNONE): Likewise.
>       * config/arm/mve.md (mve_vabdq_m_f<mode>): Define RTL pattern.
>       (mve_vaddq_m_f<mode>): Likewise.
>       (mve_vaddq_m_n_f<mode>): Likewise.
>       (mve_vandq_m_f<mode>): Likewise.
>       (mve_vbicq_m_f<mode>): Likewise.
>       (mve_vbrsrq_m_n_f<mode>): Likewise.
>       (mve_vcaddq_rot270_m_f<mode>): Likewise.
>       (mve_vcaddq_rot90_m_f<mode>): Likewise.
>       (mve_vcmlaq_m_f<mode>): Likewise.
>       (mve_vcmlaq_rot180_m_f<mode>): Likewise.
>       (mve_vcmlaq_rot270_m_f<mode>): Likewise.
>       (mve_vcmlaq_rot90_m_f<mode>): Likewise.
>       (mve_vcmulq_m_f<mode>): Likewise.
>       (mve_vcmulq_rot180_m_f<mode>): Likewise.
>       (mve_vcmulq_rot270_m_f<mode>): Likewise.
>       (mve_vcmulq_rot90_m_f<mode>): Likewise.
>       (mve_veorq_m_f<mode>): Likewise.
>       (mve_vfmaq_m_f<mode>): Likewise.
>       (mve_vfmaq_m_n_f<mode>): Likewise.
>       (mve_vfmasq_m_n_f<mode>): Likewise.
>       (mve_vfmsq_m_f<mode>): Likewise.
>       (mve_vmaxnmq_m_f<mode>): Likewise.
>       (mve_vminnmq_m_f<mode>): Likewise.
>       (mve_vmulq_m_f<mode>): Likewise.
>       (mve_vmulq_m_n_f<mode>): Likewise.
>       (mve_vornq_m_f<mode>): Likewise.
>       (mve_vorrq_m_f<mode>): Likewise.
>       (mve_vsubq_m_f<mode>): Likewise.
>       (mve_vsubq_m_n_f<mode>): Likewise.
> 
> gcc/testsuite/ChangeLog:
> 
> 2019-10-31  Andre Vieira  <andre.simoesdiasvie...@arm.com>
>             Mihail Ionescu  <mihail.ione...@arm.com>
>             Srinath Parvathaneni  <srinath.parvathan...@arm.com>
> 
>       * gcc.target/arm/mve/intrinsics/vabdq_m_f16.c: New test.
>       * gcc.target/arm/mve/intrinsics/vabdq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vaddq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vaddq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vaddq_m_n_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vaddq_m_n_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vandq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vandq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vbicq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vbicq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vbrsrq_m_n_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vbrsrq_m_n_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcaddq_rot270_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcaddq_rot270_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcaddq_rot90_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcaddq_rot90_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmlaq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmlaq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmlaq_rot180_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmlaq_rot180_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmlaq_rot270_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmlaq_rot270_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmlaq_rot90_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmlaq_rot90_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmulq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmulq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmulq_rot180_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmulq_rot180_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmulq_rot270_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmulq_rot270_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmulq_rot90_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcmulq_rot90_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcvtq_m_n_s16_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcvtq_m_n_s32_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcvtq_m_n_u16_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vcvtq_m_n_u32_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/veorq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/veorq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vfmaq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vfmaq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vfmaq_m_n_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vfmaq_m_n_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vfmasq_m_n_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vfmasq_m_n_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vfmsq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vfmsq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vmaxnmq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vmaxnmq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vminnmq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vminnmq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vmulq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vmulq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vmulq_m_n_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vmulq_m_n_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vornq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vornq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vorrq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vorrq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vsubq_m_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vsubq_m_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vsubq_m_n_f16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vsubq_m_n_f32.c: Likewise.

Reply via email to