summaryrefslogtreecommitdiff
path: root/Source/UnitTests/AudioJitTests.cpp
diff options
context:
space:
mode:
authorpierre <pierre@pirsoft.de>2010-10-31 23:26:18 +0000
committerpierre <pierre@pirsoft.de>2010-10-31 23:26:18 +0000
commit4b9831cdce7ffa1fcb0fc5eda5e5686130096eb2 (patch)
tree31c40b514d03bf3134e0cf87c3b5518836ef957b /Source/UnitTests/AudioJitTests.cpp
parent2f2a76b28a0f612c2b2550d25cdae775de0614f5 (diff)
Core/DSPCore: Extended opcode handling fixes
* Make writeToBackLog private to DSPIntExtOps.cpp (JIT variants of 'l and 'ln are disabled and broken as is) * Make zeroing of the backlog conditional on doing an interpreter fallback and do it at a few more places * Fix selection of cleanup for extended opcodes. * Fix the DSP unit tests to correctly emit the function prolog/epilog (else EBX wouldn't be saved) * Add a few more DSP unit tests git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6325 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/UnitTests/AudioJitTests.cpp')
-rw-r--r--Source/UnitTests/AudioJitTests.cpp217
1 files changed, 216 insertions, 1 deletions
diff --git a/Source/UnitTests/AudioJitTests.cpp b/Source/UnitTests/AudioJitTests.cpp
index cfabaeeb6c..4cef5931fa 100644
--- a/Source/UnitTests/AudioJitTests.cpp
+++ b/Source/UnitTests/AudioJitTests.cpp
@@ -28,6 +28,15 @@ void nx_nr()
tester.Report();
}
+void nx_mv()
+{
+ DSPJitTester tester(0x8000, 0x0010);
+ tester.AddTestData(DSP_REG_ACL0);
+ tester.AddTestData(DSP_REG_AXL0);
+ tester.TestAll(true);
+ tester.Report();
+}
+
void dar()
{
DSPJitTester tester(0x0004);
@@ -81,14 +90,205 @@ void nx_s()
{
DSPJitTester tester(0x8000, 0x0020);
tester.AddTestData(DSP_REG_AR0);
+ tester.AddTestData(DSP_REG_WR0);
tester.AddTestData(DSP_REG_ACL0);
tester.TestAll(true);
tester.Report();
}
+
+void nx_sn()
+{
+ DSPJitTester tester(0x8000, 0x0024);
+ tester.AddTestData(DSP_REG_AR0);
+ tester.AddTestData(DSP_REG_WR0);
+ tester.AddTestData(DSP_REG_IX0);
+ tester.AddTestData(DSP_REG_ACL0);
+ tester.TestAll(true);
+ tester.Report();
+}
+
+void nx_l()
+{
+
+ DSPJitTester tester(0x8000, 0x0040);
+ tester.AddTestData(DSP_REG_AR0);
+ tester.AddTestData(DSP_REG_WR0);
+ tester.AddTestData(DSP_REG_AXL0);
+ tester.TestAll(true);
+ tester.Report();
+}
+
+void set16_l()
+{
+
+ DSPJitTester tester(0x8e00, 0x0070);
+ tester.AddTestData(DSP_REG_SR, 0);
+ tester.AddTestData(DSP_REG_SR, SR_40_MODE_BIT);
+ tester.AddTestData(DSP_REG_AR0);
+ tester.AddTestData(DSP_REG_WR0);
+ tester.AddTestData(DSP_REG_ACM0);
+ tester.TestAll(true);
+ tester.Report();
+}
+
+void nx_ln()
+{
+ DSPJitTester tester(0x8000, 0x0044);
+ tester.AddTestData(DSP_REG_AR0);
+ tester.AddTestData(DSP_REG_WR0);
+ tester.AddTestData(DSP_REG_IX0);
+ tester.AddTestData(DSP_REG_AXL0);
+ tester.TestAll(true);
+ tester.Report();
+}
+
+void nx_ls()
+{
+ DSPJitTester tester1(0x8000, 0x0080);
+ tester1.AddTestData(DSP_REG_ACM0);
+ tester1.AddTestData(DSP_REG_AR0);
+ tester1.AddTestData(DSP_REG_WR0);
+ tester1.TestAll(true);
+ tester1.Report();
+
+ DSPJitTester tester2(0x8000, 0x0080);
+ tester2.AddTestData(DSP_REG_ACM0);
+ tester2.AddTestData(DSP_REG_AR3);
+ tester2.AddTestData(DSP_REG_WR3);
+ tester2.TestAll(true);
+ tester2.Report();
+}
+
+void nx_lsn()
+{
+ DSPJitTester tester1(0x8000, 0x0084);
+ tester1.AddTestData(DSP_REG_ACM0);
+ tester1.AddTestData(DSP_REG_AR0);
+ tester1.AddTestData(DSP_REG_WR0);
+ tester1.AddTestData(DSP_REG_IX0);
+ tester1.TestAll(true);
+ tester1.Report();
+
+ DSPJitTester tester2(0x8000, 0x0084);
+ tester2.AddTestData(DSP_REG_ACM0);
+ tester2.AddTestData(DSP_REG_AR3);
+ tester2.AddTestData(DSP_REG_WR3);
+ tester2.TestAll(true);
+ tester2.Report();
+}
+
+void nx_lsm()
+{
+ DSPJitTester tester1(0x8000, 0x0088);
+ tester1.AddTestData(DSP_REG_ACM0);
+ tester1.AddTestData(DSP_REG_AR0);
+ tester1.AddTestData(DSP_REG_WR0);
+ tester1.TestAll(true);
+ tester1.Report();
+
+ DSPJitTester tester2(0x8000, 0x0088);
+ tester2.AddTestData(DSP_REG_ACM0);
+ tester2.AddTestData(DSP_REG_AR3);
+ tester2.AddTestData(DSP_REG_WR3);
+ tester2.AddTestData(DSP_REG_IX3);
+ tester2.TestAll(true);
+ tester2.Report();
+}
+
+void nx_lsnm()
+{
+ DSPJitTester tester1(0x8000, 0x008c);
+ tester1.AddTestData(DSP_REG_ACM0);
+ tester1.AddTestData(DSP_REG_AR0);
+ tester1.AddTestData(DSP_REG_WR0);
+ tester1.AddTestData(DSP_REG_IX0);
+ tester1.TestAll(true);
+ tester1.Report();
+
+ DSPJitTester tester2(0x8000, 0x008c);
+ tester2.AddTestData(DSP_REG_ACM0);
+ tester2.AddTestData(DSP_REG_AR3);
+ tester2.AddTestData(DSP_REG_WR3);
+ tester2.AddTestData(DSP_REG_IX3);
+ tester2.TestAll(true);
+ tester2.Report();
+}
+
+void nx_sl()
+{
+ DSPJitTester tester1(0x8000, 0x0082);
+ tester1.AddTestData(DSP_REG_ACM0);
+ tester1.AddTestData(DSP_REG_AR0);
+ tester1.AddTestData(DSP_REG_WR0);
+ tester1.TestAll(true);
+ tester1.Report();
+
+ DSPJitTester tester2(0x8000, 0x0082);
+ tester2.AddTestData(DSP_REG_ACM0);
+ tester2.AddTestData(DSP_REG_AR3);
+ tester2.AddTestData(DSP_REG_WR3);
+ tester2.TestAll(true);
+ tester2.Report();
+}
+
+void nx_sln()
+{
+ DSPJitTester tester1(0x8000, 0x0086);
+ tester1.AddTestData(DSP_REG_ACM0);
+ tester1.AddTestData(DSP_REG_AR0);
+ tester1.AddTestData(DSP_REG_WR0);
+ tester1.AddTestData(DSP_REG_IX0);
+ tester1.TestAll(true);
+ tester1.Report();
+
+ DSPJitTester tester2(0x8000, 0x0086);
+ tester2.AddTestData(DSP_REG_ACM0);
+ tester2.AddTestData(DSP_REG_AR3);
+ tester2.AddTestData(DSP_REG_WR3);
+ tester2.TestAll(true);
+ tester2.Report();
+}
+
+void nx_slm()
+{
+ DSPJitTester tester1(0x8000, 0x008a);
+ tester1.AddTestData(DSP_REG_ACM0);
+ tester1.AddTestData(DSP_REG_AR0);
+ tester1.AddTestData(DSP_REG_WR0);
+ tester1.TestAll(true);
+ tester1.Report();
+
+ DSPJitTester tester2(0x8000, 0x008a);
+ tester2.AddTestData(DSP_REG_ACM0);
+ tester2.AddTestData(DSP_REG_AR3);
+ tester2.AddTestData(DSP_REG_WR3);
+ tester2.AddTestData(DSP_REG_IX3);
+ tester2.TestAll(true);
+ tester2.Report();
+}
+
+void nx_slnm()
+{
+ DSPJitTester tester1(0x8000, 0x008e);
+ tester1.AddTestData(DSP_REG_ACM0);
+ tester1.AddTestData(DSP_REG_AR0);
+ tester1.AddTestData(DSP_REG_WR0);
+ tester1.AddTestData(DSP_REG_IX0);
+ tester1.TestAll(true);
+ tester1.Report();
+
+ DSPJitTester tester2(0x8000, 0x008e);
+ tester2.AddTestData(DSP_REG_ACM0);
+ tester2.AddTestData(DSP_REG_AR3);
+ tester2.AddTestData(DSP_REG_WR3);
+ tester2.AddTestData(DSP_REG_IX3);
+ tester2.TestAll(true);
+ tester2.Report();
+}
+
void AudioJitTests()
{
DSPJitTester::Initialize();
-
dar();
iar();
subarn();
@@ -99,7 +299,22 @@ void AudioJitTests()
nx_ir();
nx_dr();
nx_nr();
+ nx_mv();
+
+ set16_l();
+
nx_s();
+ nx_sn();
+ nx_l();
+ nx_ln();
+ nx_ls();
+ nx_lsn();
+ nx_lsm();
+ nx_lsnm();
+ nx_sl();
+ nx_sln();
+ nx_slm();
+ nx_slnm();
}
//required to be able to link against DSPCore