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,
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.

Attachment: diff19.patch.gz
Description: diff19.patch.gz

Reply via email to