On 09/26/2013 05:48 PM, Alexander Graf wrote: > + if (is_neg) { > + gen_helper_vfp_negs(tcg_op1, tcg_op1); > + gen_helper_vfp_negs(tcg_op3, tcg_op3); > + } > + > + gen_helper_vfp_muls(tcg_res, tcg_op1, tcg_op2, fpst); > + if (is_sub) { > + gen_helper_vfp_subs(tcg_res, tcg_op3, tcg_res, fpst); > + } else { > + gen_helper_vfp_adds(tcg_res, tcg_op3, tcg_res, fpst); > + } > +
Unlike original vfp, aarch64 requires infinite precision intermediate. Which means that you need to use float_muladd. Note that opa_neg = float_muladd_negate_c op1_neg = float_muladd_negate_product Or those together into the 4th argument to float_muladd. r~