diff options
author | bunnei <bunneidev@gmail.com> | 2014-12-16 23:22:58 -0500 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2014-12-16 23:22:58 -0500 |
commit | ec9ac2f51a9669fba1a88c93d0edb02a522492f6 (patch) | |
tree | e7a4389cf09a28208067d1706d972dc093cc89ad /src | |
parent | cdfa7157eb1199056a5ccb8913fe4e89d3e30f68 (diff) | |
parent | 9c127f4a01fee95632336d53269cdf1c64ea37a3 (diff) |
Merge pull request #290 from lioncash/vsub
armemu: Backport some VFP fixes from 3dmoo.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/arm/skyeye_common/vfp/vfpsingle.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/core/arm/skyeye_common/vfp/vfpsingle.cpp b/src/core/arm/skyeye_common/vfp/vfpsingle.cpp index 871900497..6c33d8b78 100644 --- a/src/core/arm/skyeye_common/vfp/vfpsingle.cpp +++ b/src/core/arm/skyeye_common/vfp/vfpsingle.cpp @@ -614,7 +614,7 @@ static u32 vfp_single_ftoui(ARMul_State* state, int sd, int unused, s32 m, u32 f exceptions |= FPSCR_IDC; if (tm & VFP_NAN) - vsm.sign = 0; + vsm.sign = 1; if (vsm.exponent >= 127 + 32) { d = vsm.sign ? 0 : 0xffffffff; @@ -1148,7 +1148,10 @@ static u32 vfp_single_fsub(ARMul_State* state, int sd, int sn, s32 m, u32 fpscr) /* * Subtraction is addition with one sign inverted. */ - return vfp_single_fadd(state, sd, sn, vfp_single_packed_negate(m), fpscr); + if (m != 0x7FC00000) // Only negate if m isn't NaN. + m = vfp_single_packed_negate(m); + + return vfp_single_fadd(state, sd, sn, m, fpscr); } /* |