diff options
| author | 2014-12-16 02:03:48 -0500 | |
|---|---|---|
| committer | 2014-12-16 03:13:06 -0500 | |
| commit | d5bcddb77c9922f8345dd4014031662ab17e2b33 (patch) | |
| tree | bb3642d0b2f7c9ae249111957e74ffee9887b5e9 /src/core/arm/interpreter/armemu.cpp | |
| parent | armemu: Join SMUAD, SMUSD, and SMLAD (diff) | |
| download | yuzu-d5bcddb77c9922f8345dd4014031662ab17e2b33.tar.gz yuzu-d5bcddb77c9922f8345dd4014031662ab17e2b33.tar.xz yuzu-d5bcddb77c9922f8345dd4014031662ab17e2b33.zip | |
armemu: Fix SMUAD, SMUSD, and SMLAD
Wrong values were being multiplied together.
Diffstat (limited to 'src/core/arm/interpreter/armemu.cpp')
| -rw-r--r-- | src/core/arm/interpreter/armemu.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp index 967506f45..e4159ceb0 100644 --- a/src/core/arm/interpreter/armemu.cpp +++ b/src/core/arm/interpreter/armemu.cpp | |||
| @@ -6243,16 +6243,16 @@ L_stm_s_takeabort: | |||
| 6243 | 6243 | ||
| 6244 | // SMUAD | 6244 | // SMUAD |
| 6245 | if ((instr & 0xf0d0) == 0xf010) { | 6245 | if ((instr & 0xf0d0) == 0xf010) { |
| 6246 | state->Reg[rd_idx] = (rn_lo * rn_hi) + (rm_lo * rm_hi); | 6246 | state->Reg[rd_idx] = (rn_lo * rm_lo) + (rn_hi * rm_hi); |
| 6247 | } | 6247 | } |
| 6248 | // SMUSD | 6248 | // SMUSD |
| 6249 | else if ((instr & 0xf0d0) == 0xf050) { | 6249 | else if ((instr & 0xf0d0) == 0xf050) { |
| 6250 | state->Reg[rd_idx] = (rn_lo * rn_hi) - (rm_lo * rm_hi); | 6250 | state->Reg[rd_idx] = (rn_lo * rm_lo) - (rn_hi * rm_hi); |
| 6251 | } | 6251 | } |
| 6252 | // SMLAD | 6252 | // SMLAD |
| 6253 | else { | 6253 | else { |
| 6254 | const u8 ra_idx = BITS(12, 15); | 6254 | const u8 ra_idx = BITS(12, 15); |
| 6255 | state->Reg[rd_idx] = (rn_lo * rn_hi) + (rm_lo * rm_hi) + (s32)state->Reg[ra_idx]; | 6255 | state->Reg[rd_idx] = (rn_lo * rm_lo) + (rn_hi * rm_hi) + (s32)state->Reg[ra_idx]; |
| 6256 | } | 6256 | } |
| 6257 | return 1; | 6257 | return 1; |
| 6258 | } else { | 6258 | } else { |