summaryrefslogtreecommitdiff
path: root/Source/Core/DSPCore/Src/DspIntArithmetic.cpp
diff options
context:
space:
mode:
authornakeee <nakeee@gmail.com>2009-08-20 13:49:30 +0000
committernakeee <nakeee@gmail.com>2009-08-20 13:49:30 +0000
commitfdc141e333d9d7d57ea056968c86afbc55bc6310 (patch)
treefa82756c5ef55c9f700ee6dd25665f67b6ecc9ba /Source/Core/DSPCore/Src/DspIntArithmetic.cpp
parent56c4eea4c1773ee14f46238c124e918534fd6bca (diff)
DSPLLE: Small fixes for zeroing flags
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4020 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/DSPCore/Src/DspIntArithmetic.cpp')
-rw-r--r--Source/Core/DSPCore/Src/DspIntArithmetic.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/Source/Core/DSPCore/Src/DspIntArithmetic.cpp b/Source/Core/DSPCore/Src/DspIntArithmetic.cpp
index c4c9018ddc..e2e4491f03 100644
--- a/Source/Core/DSPCore/Src/DspIntArithmetic.cpp
+++ b/Source/Core/DSPCore/Src/DspIntArithmetic.cpp
@@ -144,10 +144,11 @@ void xorr(const UDSPInstruction& opc)
{
u8 sreg = (opc.hex >> 9) & 0x1;
u8 dreg = (opc.hex >> 8) & 0x1;
-
+ u16 axh = g_dsp.r[DSP_REG_AXH0 + sreg];
+
zeroWriteBackLog();
- g_dsp.r[DSP_REG_ACM0 + dreg] ^= g_dsp.r[DSP_REG_AXH0 + sreg];
+ g_dsp.r[DSP_REG_ACM0 + dreg] ^= axh;
s64 acc = dsp_get_long_acc(dreg);
Update_SR_Register64(acc);
@@ -161,10 +162,11 @@ void andr(const UDSPInstruction& opc)
{
u8 sreg = (opc.hex >> 9) & 0x1;
u8 dreg = (opc.hex >> 8) & 0x1;
-
+ u16 axh = g_dsp.r[DSP_REG_AXH0 + sreg];
+
zeroWriteBackLog();
- g_dsp.r[DSP_REG_ACM0 + dreg] &= g_dsp.r[DSP_REG_AXH0 + sreg];
+ g_dsp.r[DSP_REG_ACM0 + dreg] &= axh;
s64 acc = dsp_get_long_acc(dreg);
Update_SR_Register64(acc);
@@ -178,10 +180,11 @@ void orr(const UDSPInstruction& opc)
{
u8 sreg = (opc.hex >> 9) & 0x1;
u8 dreg = (opc.hex >> 8) & 0x1;
-
+ u16 axh = g_dsp.r[DSP_REG_AXH0 + sreg];
+
zeroWriteBackLog();
- g_dsp.r[DSP_REG_ACM0 + dreg] |= g_dsp.r[DSP_REG_AXH0 + sreg];
+ g_dsp.r[DSP_REG_ACM0 + dreg] |= axh;
s64 acc = dsp_get_long_acc(dreg);
Update_SR_Register64(acc);
@@ -195,10 +198,11 @@ void orr(const UDSPInstruction& opc)
void andc(const UDSPInstruction& opc)
{
u8 D = (opc.hex >> 8) & 0x1;
-
+ u16 accm = dsp_get_acc_m(1-D);
+
zeroWriteBackLog();
- g_dsp.r[DSP_REG_ACM0+D] &= dsp_get_acc_m(1-D);
+ g_dsp.r[DSP_REG_ACM0+D] &= accm;
Update_SR_Register16(dsp_get_acc_m(D));
}
@@ -211,10 +215,11 @@ void andc(const UDSPInstruction& opc)
void orc(const UDSPInstruction& opc)
{
u8 D = (opc.hex >> 8) & 0x1;
-
+ u16 accm = dsp_get_acc_m(1-D);
+
zeroWriteBackLog();
- g_dsp.r[DSP_REG_ACM0+D] |= dsp_get_acc_m(1-D);
+ g_dsp.r[DSP_REG_ACM0+D] |= accm;
Update_SR_Register16(dsp_get_acc_m(D));
}