On Wed, Jul 20, 2016 at 06:00:34PM +0100, Jiong Wang wrote:
> On 07/07/16 17:14, Jiong Wang wrote:
> >This patch add ARMv8.2-A FP16 one operand vector intrinsics.
> >
> >We introduced new mode iterators to cover HF modes, qualified patterns
> >which was using old mode iterators are switched to new ones.
> >
> >We can't simply extend old iterator like VDQF to conver HF modes,
> >because not all patterns using VDQF are with new FP16 support, thus we
> >introduced new, temperary iterators, and only apply new iterators on
> >those patterns which do have FP16 supports.
> 
> I noticed the patchset at
> 
>   https://gcc.gnu.org/ml/gcc-patches/2016-06/msg00308.html
> 
> has some modifications on the standard name "div" and "sqrt", thus there
> are minor conflicts as this patch touch "sqrt" as well.
> 
> This patch resolve the conflict and the change is to let
> aarch64_emit_approx_sqrt simply return false for V4HFmode and V8HFmode.

This is OK for trunk, with one modification...

> diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
> index 
> 58a9d695c0ef9e6e1d67030580428699aba05be4..5ed633542efe58763d68fd9bfbb478ae6ef569c3
>  100644
> --- a/gcc/config/aarch64/aarch64.c
> +++ b/gcc/config/aarch64/aarch64.c
> @@ -7598,6 +7598,10 @@ bool
>  aarch64_emit_approx_sqrt (rtx dst, rtx src, bool recp)
>  {
>    machine_mode mode = GET_MODE (dst);
> +
> +  if (mode == V4HFmode || mode == V8HFmode)
> +    return false;
> +

Given that you don't plan to handle any HFmode modes here, I'd prefer:

  if (GET_MODE_INNER (mode) == HFmode)
    return false;

That'll save you from updating this again in patch 7/14.

Otherwise, this is OK.

Thanks,
James


> gcc/
> 2016-07-20  Jiong Wang<jiong.w...@arm.com>
> 
>         * config/aarch64/aarch64-builtins.c (TYPES_BINOP_USS): New.
>         * config/aarch64/aarch64-simd-builtins.def: Register new builtins.
>         * config/aarch64/aarch64-simd.md (aarch64_rsqrte<mode>): Extend to HF 
> modes.
>         (neg<mode>2): Likewise.
>         (abs<mode>2): Likewise.
>         (<frint_pattern><mode>2): Likewise.
>         (l<fcvt_pattern><su_optab><VDQF:mode><fcvt_target>2): Likewise.
>         (<optab><VDQF:mode><fcvt_target>2): Likewise.
>         (<fix_trunc_optab><VDQF:mode><fcvt_target>2): Likewise.
>         (ftrunc<VDQF:mode>2): Likewise.
>         (<optab><fcvt_target><VDQF:mode>2): Likewise.
>         (sqrt<mode>2): Likewise.
>         (*sqrt<mode>2): Likewise.
>         (aarch64_frecpe<mode>): Likewise.
>         (aarch64_cm<optab><mode>): Likewise.
>         * config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Return
>         false for V4HF and V8HF.
>         * config/aarch64/iterators.md (VHSDF, VHSDF_DF, VHSDF_SDF): New.
>         (VDQF_COND, fcvt_target, FCVT_TARGET, hcon): Extend mode attribute to 
> HF modes.
>         (stype): New.
>         * config/aarch64/arm_neon.h (vdup_n_f16): New.
>         (vdupq_n_f16): Likewise.
>         (vld1_dup_f16): Use vdup_n_f16.
>         (vld1q_dup_f16): Use vdupq_n_f16.
>         (vabs_f16): New.
>         (vabsq_f16): Likewise.
>         (vceqz_f16): Likewise.
>         (vceqzq_f16): Likewise.
>         (vcgez_f16): Likewise.
>         (vcgezq_f16): Likewise.
>         (vcgtz_f16): Likewise.
>         (vcgtzq_f16): Likewise.
>         (vclez_f16): Likewise.
>         (vclezq_f16): Likewise.
>         (vcltz_f16): Likewise.
>         (vcltzq_f16): Likewise.
>         (vcvt_f16_s16): Likewise.
>         (vcvtq_f16_s16): Likewise.
>         (vcvt_f16_u16): Likewise.
>         (vcvtq_f16_u16): Likewise.
>         (vcvt_s16_f16): Likewise.
>         (vcvtq_s16_f16): Likewise.
>         (vcvt_u16_f16): Likewise.
>         (vcvtq_u16_f16): Likewise.
>         (vcvta_s16_f16): Likewise.
>         (vcvtaq_s16_f16): Likewise.
>         (vcvta_u16_f16): Likewise.
>         (vcvtaq_u16_f16): Likewise.
>         (vcvtm_s16_f16): Likewise.
>         (vcvtmq_s16_f16): Likewise.
>         (vcvtm_u16_f16): Likewise.
>         (vcvtmq_u16_f16): Likewise.
>         (vcvtn_s16_f16): Likewise.
>         (vcvtnq_s16_f16): Likewise.
>         (vcvtn_u16_f16): Likewise.
>         (vcvtnq_u16_f16): Likewise.
>         (vcvtp_s16_f16): Likewise.
>         (vcvtpq_s16_f16): Likewise.
>         (vcvtp_u16_f16): Likewise.
>         (vcvtpq_u16_f16): Likewise.
>         (vneg_f16): Likewise.
>         (vnegq_f16): Likewise.
>         (vrecpe_f16): Likewise.
>         (vrecpeq_f16): Likewise.
>         (vrnd_f16): Likewise.
>         (vrndq_f16): Likewise.
>         (vrnda_f16): Likewise.
>         (vrndaq_f16): Likewise.
>         (vrndi_f16): Likewise.
>         (vrndiq_f16): Likewise.
>         (vrndm_f16): Likewise.
>         (vrndmq_f16): Likewise.
>         (vrndn_f16): Likewise.
>         (vrndnq_f16): Likewise.
>         (vrndp_f16): Likewise.
>         (vrndpq_f16): Likewise.
>         (vrndx_f16): Likewise.
>         (vrndxq_f16): Likewise.
>         (vrsqrte_f16): Likewise.
>         (vrsqrteq_f16): Likewise.
>         (vsqrt_f16): Likewise.
>         (vsqrtq_f16): Likewise.
> 

Reply via email to