aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Lioncash <mathew1800@gmail.com>2014-12-16 02:03:48 -0500
committerGravatar Lioncash <mathew1800@gmail.com>2014-12-16 03:13:06 -0500
commitd5bcddb77c9922f8345dd4014031662ab17e2b33 (patch)
treebb3642d0b2f7c9ae249111957e74ffee9887b5e9 /src
parent0f9e3baf39efdfe8a6604a473405764e936a897d (diff)
armemu: Fix SMUAD, SMUSD, and SMLAD
Wrong values were being multiplied together.
Diffstat (limited to 'src')
-rw-r--r--src/core/arm/interpreter/armemu.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp
index 967506f4..e4159ceb 100644
--- a/src/core/arm/interpreter/armemu.cpp
+++ b/src/core/arm/interpreter/armemu.cpp
@@ -6243,16 +6243,16 @@ L_stm_s_takeabort:
// SMUAD
if ((instr & 0xf0d0) == 0xf010) {
- state->Reg[rd_idx] = (rn_lo * rn_hi) + (rm_lo * rm_hi);
+ state->Reg[rd_idx] = (rn_lo * rm_lo) + (rn_hi * rm_hi);
}
// SMUSD
else if ((instr & 0xf0d0) == 0xf050) {
- state->Reg[rd_idx] = (rn_lo * rn_hi) - (rm_lo * rm_hi);
+ state->Reg[rd_idx] = (rn_lo * rm_lo) - (rn_hi * rm_hi);
}
// SMLAD
else {
const u8 ra_idx = BITS(12, 15);
- state->Reg[rd_idx] = (rn_lo * rn_hi) + (rm_lo * rm_hi) + (s32)state->Reg[ra_idx];
+ state->Reg[rd_idx] = (rn_lo * rm_lo) + (rn_hi * rm_hi) + (s32)state->Reg[ra_idx];
}
return 1;
} else {