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