summaryrefslogtreecommitdiff
path: root/Source/Core/DSPCore/Src/DSPIntExtOps.cpp
diff options
context:
space:
mode:
authorMarko Pusljar <LM1234@gmail.com>2010-03-08 21:25:35 +0000
committerMarko Pusljar <LM1234@gmail.com>2010-03-08 21:25:35 +0000
commit70a712c065cd53f8d106d0994795bf8f265eaebe (patch)
tree39dada9f39a707e6b3d12dbdc76aaae40c61461f /Source/Core/DSPCore/Src/DSPIntExtOps.cpp
parent76ad8db4459248d10785c82f7a877434664a0ff3 (diff)
DSPLLE - flags&stuff,xar->subarn,0x80 kinda figured out,... (experimental)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5174 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/DSPCore/Src/DSPIntExtOps.cpp')
-rw-r--r--Source/Core/DSPCore/Src/DSPIntExtOps.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/Source/Core/DSPCore/Src/DSPIntExtOps.cpp b/Source/Core/DSPCore/Src/DSPIntExtOps.cpp
index e707c4750d..76a30b4e61 100644
--- a/Source/Core/DSPCore/Src/DSPIntExtOps.cpp
+++ b/Source/Core/DSPCore/Src/DSPIntExtOps.cpp
@@ -480,7 +480,27 @@ void zeroWriteBackLog()
{
// always make sure to have an extra entry at the end w/ -1 to avoid
// infinitive loops
- for (int i = 0; writeBackLogIdx[i] != -1; i++)
+ for (int i = 0; writeBackLogIdx[i] != -1; i++) {
dsp_op_write_reg(writeBackLogIdx[i], 0);
+ }
}
+//needed for 0x3... (at least)..., + clrl
+//ex. corner case -> 0x4060: main opcode modifies .m, and extended .l -> .l shoudnt be zeroed because of .m write...
+void zeroWriteBackLogPreserveAcc(u8 acc)
+{
+ for (int i = 0; writeBackLogIdx[i] != -1; i++) {
+
+ // acc0
+ if ((acc == 0) &&
+ ((writeBackLogIdx[i] == DSP_REG_ACL0) || (writeBackLogIdx[i] == DSP_REG_ACM0) || (writeBackLogIdx[i] == DSP_REG_ACH0)))
+ continue;
+
+ // acc1
+ if ((acc == 1) &&
+ ((writeBackLogIdx[i] == DSP_REG_ACL1) || (writeBackLogIdx[i] == DSP_REG_ACM1) || (writeBackLogIdx[i] == DSP_REG_ACH1)))
+ continue;
+
+ dsp_op_write_reg(writeBackLogIdx[i], 0);
+ }
+}