From a86d5e2752ffc4a89e4f92a9cb6f00aa3f267e17 Mon Sep 17 00:00:00 2001
From: Lioncash <mathew1800@gmail.com>
Date: Tue, 10 Feb 2015 08:16:26 -0500
Subject: [PATCH] vfp: Normalize accumulator for multiply accumulate
 instructions

---
 src/core/arm/skyeye_common/vfp/vfpdouble.cpp | 3 +++
 src/core/arm/skyeye_common/vfp/vfpsingle.cpp | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/src/core/arm/skyeye_common/vfp/vfpdouble.cpp b/src/core/arm/skyeye_common/vfp/vfpdouble.cpp
index 2c15db12bc..9a70880889 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
         vdp.sign = vfp_sign_negate(vdp.sign);
 
     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)
         vdn.sign = vfp_sign_negate(vdn.sign);
 
diff --git a/src/core/arm/skyeye_common/vfp/vfpsingle.cpp b/src/core/arm/skyeye_common/vfp/vfpsingle.cpp
index 678b63f51f..8b2dfa3888 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
     v = vfp_get_float(state, sd);
     pr_debug("VFP: s%u = %08x\n", sd, v);
     vfp_single_unpack(&vsn, v);
+    if (vsn.exponent == 0 && vsn.significand != 0)
+        vfp_single_normalise_denormal(&vsn);
+
     if (negate & NEG_SUBTRACT)
         vsn.sign = vfp_sign_negate(vsn.sign);