diff options
| author | Fiora <fioraaeterna@gmail.com> | 2014-09-14 15:08:57 -0700 |
|---|---|---|
| committer | Fiora <fioraaeterna@gmail.com> | 2014-09-14 15:08:57 -0700 |
| commit | 9b8cfcdc29d3b9fec28898293c86a765c40711a8 (patch) | |
| tree | 01089e564377d6aa648fccb42104be78927366bc /Source/Core | |
| parent | 84a564a304e9eb003fd3a39dcc5df652037c1dc5 (diff) | |
Interpreter: fix carry calculation in srawx
I don't know anything this affected, but it didn't match the manual (or JIT).
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/PowerPC/Interpreter/Interpreter_Integer.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter_Integer.cpp b/Source/Core/Core/PowerPC/Interpreter/Interpreter_Integer.cpp index 555cd7e54b..294b74cff6 100644 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter_Integer.cpp +++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter_Integer.cpp @@ -362,8 +362,10 @@ void Interpreter::srawx(UGeckoInstruction _inst) } else { - m_GPR[_inst.RA] = (u32)((s32)m_GPR[_inst.RS] >> amount); - if (m_GPR[_inst.RS] & 0x80000000) + s32 rrs = m_GPR[_inst.RS]; + m_GPR[_inst.RA] = rrs >> amount; + + if ((rrs < 0) && (rrs << (32 - amount))) SetCarry(1); else SetCarry(0); |
