From 4b9831cdce7ffa1fcb0fc5eda5e5686130096eb2 Mon Sep 17 00:00:00 2001 From: pierre Date: Sun, 31 Oct 2010 23:26:18 +0000 Subject: 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 --- Source/UnitTests/AudioJitTests.cpp | 217 ++++++++++++++++++++++++++++++++++++- 1 file changed, 216 insertions(+), 1 deletion(-) (limited to 'Source/UnitTests/AudioJitTests.cpp') 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 -- cgit v1.2.3