3
0
Fork 0
forked from suyu/suyu

vfp: Normalize accumulator for multiply accumulate instructions

This commit is contained in:
Lioncash 2015-02-10 08:16:26 -05:00
parent eb83ac48aa
commit a86d5e2752
2 changed files with 6 additions and 0 deletions

View file

@ -908,6 +908,9 @@ vfp_double_multiply_accumulate(ARMul_State* state, int dd, int dn, int dm, u32 f
vdp.sign = vfp_sign_negate(vdp.sign); vdp.sign = vfp_sign_negate(vdp.sign);
vfp_double_unpack(&vdn, vfp_get_double(state, dd)); vfp_double_unpack(&vdn, vfp_get_double(state, dd));
if (vdn.exponent == 0 && vdn.significand != 0)
vfp_double_normalise_denormal(&vdn);
if (negate & NEG_SUBTRACT) if (negate & NEG_SUBTRACT)
vdn.sign = vfp_sign_negate(vdn.sign); vdn.sign = vfp_sign_negate(vdn.sign);

View file

@ -941,6 +941,9 @@ vfp_single_multiply_accumulate(ARMul_State* state, int sd, int sn, s32 m, u32 fp
v = vfp_get_float(state, sd); v = vfp_get_float(state, sd);
pr_debug("VFP: s%u = %08x\n", sd, v); pr_debug("VFP: s%u = %08x\n", sd, v);
vfp_single_unpack(&vsn, v); vfp_single_unpack(&vsn, v);
if (vsn.exponent == 0 && vsn.significand != 0)
vfp_single_normalise_denormal(&vsn);
if (negate & NEG_SUBTRACT) if (negate & NEG_SUBTRACT)
vsn.sign = vfp_sign_negate(vsn.sign); vsn.sign = vfp_sign_negate(vsn.sign);