diff options
| author | 2015-02-10 10:09:45 -0500 | |
|---|---|---|
| committer | 2015-02-10 10:09:45 -0500 | |
| commit | 67db6aa4ce1f57f7d99406c8924ed41e74d36dbe (patch) | |
| tree | a2a0cfc5626629e7de3d5624d31943f4ce006196 /src | |
| parent | Merge pull request #554 from lioncash/cp15 (diff) | |
| parent | vfp: Normalize accumulator for multiply accumulate instructions (diff) | |
| download | yuzu-67db6aa4ce1f57f7d99406c8924ed41e74d36dbe.tar.gz yuzu-67db6aa4ce1f57f7d99406c8924ed41e74d36dbe.tar.xz yuzu-67db6aa4ce1f57f7d99406c8924ed41e74d36dbe.zip | |
Merge pull request #553 from lioncash/denorm
vfp: Normalize accumulator for multiply accumulate instructions
Diffstat (limited to '')
| -rw-r--r-- | src/core/arm/skyeye_common/vfp/vfpdouble.cpp | 3 | ||||
| -rw-r--r-- | src/core/arm/skyeye_common/vfp/vfpsingle.cpp | 3 |
2 files changed, 6 insertions, 0 deletions
diff --git a/src/core/arm/skyeye_common/vfp/vfpdouble.cpp b/src/core/arm/skyeye_common/vfp/vfpdouble.cpp index 2c15db12b..9a7088088 100644 --- a/src/core/arm/skyeye_common/vfp/vfpdouble.cpp +++ b/src/core/arm/skyeye_common/vfp/vfpdouble.cpp | |||
| @@ -908,6 +908,9 @@ vfp_double_multiply_accumulate(ARMul_State* state, int dd, int dn, int dm, u32 f | |||
| 908 | vdp.sign = vfp_sign_negate(vdp.sign); | 908 | vdp.sign = vfp_sign_negate(vdp.sign); |
| 909 | 909 | ||
| 910 | vfp_double_unpack(&vdn, vfp_get_double(state, dd)); | 910 | vfp_double_unpack(&vdn, vfp_get_double(state, dd)); |
| 911 | if (vdn.exponent == 0 && vdn.significand != 0) | ||
| 912 | vfp_double_normalise_denormal(&vdn); | ||
| 913 | |||
| 911 | if (negate & NEG_SUBTRACT) | 914 | if (negate & NEG_SUBTRACT) |
| 912 | vdn.sign = vfp_sign_negate(vdn.sign); | 915 | vdn.sign = vfp_sign_negate(vdn.sign); |
| 913 | 916 | ||
diff --git a/src/core/arm/skyeye_common/vfp/vfpsingle.cpp b/src/core/arm/skyeye_common/vfp/vfpsingle.cpp index 678b63f51..8b2dfa388 100644 --- a/src/core/arm/skyeye_common/vfp/vfpsingle.cpp +++ b/src/core/arm/skyeye_common/vfp/vfpsingle.cpp | |||
| @@ -941,6 +941,9 @@ vfp_single_multiply_accumulate(ARMul_State* state, int sd, int sn, s32 m, u32 fp | |||
| 941 | v = vfp_get_float(state, sd); | 941 | v = vfp_get_float(state, sd); |
| 942 | pr_debug("VFP: s%u = %08x\n", sd, v); | 942 | pr_debug("VFP: s%u = %08x\n", sd, v); |
| 943 | vfp_single_unpack(&vsn, v); | 943 | vfp_single_unpack(&vsn, v); |
| 944 | if (vsn.exponent == 0 && vsn.significand != 0) | ||
| 945 | vfp_single_normalise_denormal(&vsn); | ||
| 946 | |||
| 944 | if (negate & NEG_SUBTRACT) | 947 | if (negate & NEG_SUBTRACT) |
| 945 | vsn.sign = vfp_sign_negate(vsn.sign); | 948 | vsn.sign = vfp_sign_negate(vsn.sign); |
| 946 | 949 | ||