diff options
Diffstat (limited to 'Ryujinx.Tests/Cpu/CpuTest.cs')
-rw-r--r-- | Ryujinx.Tests/Cpu/CpuTest.cs | 96 |
1 files changed, 32 insertions, 64 deletions
diff --git a/Ryujinx.Tests/Cpu/CpuTest.cs b/Ryujinx.Tests/Cpu/CpuTest.cs index b64f7466..979b313b 100644 --- a/Ryujinx.Tests/Cpu/CpuTest.cs +++ b/Ryujinx.Tests/Cpu/CpuTest.cs @@ -6,7 +6,6 @@ using Ryujinx.Cpu.Jit; using Ryujinx.Memory; using Ryujinx.Tests.Unicorn; using System; - using MemoryPermission = Ryujinx.Tests.Unicorn.MemoryPermission; namespace Ryujinx.Tests.Cpu @@ -33,18 +32,10 @@ namespace Ryujinx.Tests.Cpu private CpuContext _cpuContext; - private static bool _unicornAvailable; private UnicornAArch64 _unicornEmu; private bool _usingMemory; - [OneTimeSetUp] - public void OneTimeSetup() - { - _unicornAvailable = UnicornAArch64.IsAvailable(); - Assume.That(_unicornAvailable, "Unicorn is not available"); - } - [SetUp] public void Setup() { @@ -65,23 +56,17 @@ namespace Ryujinx.Tests.Cpu Optimizations.AllowLcqInFunctionTable = false; Optimizations.UseUnmanagedDispatchLoop = false; - if (_unicornAvailable) - { - _unicornEmu = new UnicornAArch64(); - _unicornEmu.MemoryMap(CodeBaseAddress, Size, MemoryPermission.READ | MemoryPermission.EXEC); - _unicornEmu.MemoryMap(DataBaseAddress, Size, MemoryPermission.READ | MemoryPermission.WRITE); - _unicornEmu.PC = CodeBaseAddress; - } + _unicornEmu = new UnicornAArch64(); + _unicornEmu.MemoryMap(CodeBaseAddress, Size, MemoryPermission.Read | MemoryPermission.Exec); + _unicornEmu.MemoryMap(DataBaseAddress, Size, MemoryPermission.Read | MemoryPermission.Write); + _unicornEmu.PC = CodeBaseAddress; } [TearDown] public void Teardown() { - if (_unicornAvailable) - { - _unicornEmu.Dispose(); - _unicornEmu = null; - } + _unicornEmu.Dispose(); + _unicornEmu = null; _memory.DecrementReferenceCount(); _context.Dispose(); @@ -105,10 +90,7 @@ namespace Ryujinx.Tests.Cpu { _memory.Write(_currAddress, opcode); - if (_unicornAvailable) - { - _unicornEmu.MemoryWrite32(_currAddress, opcode); - } + _unicornEmu.MemoryWrite32(_currAddress, opcode); _currAddress += 4; } @@ -158,38 +140,35 @@ namespace Ryujinx.Tests.Cpu _context.Fpcr = (FPCR)fpcr; _context.Fpsr = (FPSR)fpsr; - if (_unicornAvailable) - { - _unicornEmu.X[0] = x0; - _unicornEmu.X[1] = x1; - _unicornEmu.X[2] = x2; - _unicornEmu.X[3] = x3; - _unicornEmu.SP = x31; - - _unicornEmu.Q[0] = V128ToSimdValue(v0); - _unicornEmu.Q[1] = V128ToSimdValue(v1); - _unicornEmu.Q[2] = V128ToSimdValue(v2); - _unicornEmu.Q[3] = V128ToSimdValue(v3); - _unicornEmu.Q[4] = V128ToSimdValue(v4); - _unicornEmu.Q[5] = V128ToSimdValue(v5); - _unicornEmu.Q[30] = V128ToSimdValue(v30); - _unicornEmu.Q[31] = V128ToSimdValue(v31); - - _unicornEmu.OverflowFlag = overflow; - _unicornEmu.CarryFlag = carry; - _unicornEmu.ZeroFlag = zero; - _unicornEmu.NegativeFlag = negative; - - _unicornEmu.Fpcr = fpcr; - _unicornEmu.Fpsr = fpsr; - } + _unicornEmu.X[0] = x0; + _unicornEmu.X[1] = x1; + _unicornEmu.X[2] = x2; + _unicornEmu.X[3] = x3; + _unicornEmu.SP = x31; + + _unicornEmu.Q[0] = V128ToSimdValue(v0); + _unicornEmu.Q[1] = V128ToSimdValue(v1); + _unicornEmu.Q[2] = V128ToSimdValue(v2); + _unicornEmu.Q[3] = V128ToSimdValue(v3); + _unicornEmu.Q[4] = V128ToSimdValue(v4); + _unicornEmu.Q[5] = V128ToSimdValue(v5); + _unicornEmu.Q[30] = V128ToSimdValue(v30); + _unicornEmu.Q[31] = V128ToSimdValue(v31); + + _unicornEmu.OverflowFlag = overflow; + _unicornEmu.CarryFlag = carry; + _unicornEmu.ZeroFlag = zero; + _unicornEmu.NegativeFlag = negative; + + _unicornEmu.Fpcr = fpcr; + _unicornEmu.Fpsr = fpsr; } protected void ExecuteOpcodes(bool runUnicorn = true) { _cpuContext.Execute(_context, CodeBaseAddress); - if (_unicornAvailable && runUnicorn) + if (runUnicorn) { _unicornEmu.RunForCount((_currAddress - CodeBaseAddress - 4) / 4); } @@ -239,10 +218,7 @@ namespace Ryujinx.Tests.Cpu { _memory.Write(DataBaseAddress + offset, data); - if (_unicornAvailable) - { - _unicornEmu.MemoryWrite(DataBaseAddress + offset, data); - } + _unicornEmu.MemoryWrite(DataBaseAddress + offset, data); _usingMemory = true; // When true, CompareAgainstUnicorn checks the working memory for equality too. } @@ -251,10 +227,7 @@ namespace Ryujinx.Tests.Cpu { _memory.Write(DataBaseAddress + offset, data); - if (_unicornAvailable) - { - _unicornEmu.MemoryWrite8(DataBaseAddress + offset, data); - } + _unicornEmu.MemoryWrite8(DataBaseAddress + offset, data); _usingMemory = true; // When true, CompareAgainstUnicorn checks the working memory for equality too. } @@ -331,11 +304,6 @@ namespace Ryujinx.Tests.Cpu FpSkips fpSkips = FpSkips.None, FpTolerances fpTolerances = FpTolerances.None) { - if (!_unicornAvailable) - { - return; - } - if (IgnoreAllExcept_FpsrQc) { fpsrMask &= Fpsr.Qc; |