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~