Exemple #1
0
        protected void CompareAgainstUnicorn(
            Fpsr fpsrMask             = Fpsr.None,
            FpSkips fpSkips           = FpSkips.None,
            FpTolerances fpTolerances = FpTolerances.None)
        {
            if (!_unicornAvailable)
            {
                return;
            }

            if (IgnoreAllExcept_FpsrQc)
            {
                fpsrMask &= Fpsr.Qc;
            }

            if (fpSkips != FpSkips.None)
            {
                ManageFpSkips(fpSkips);
            }

            Assert.That(_context.GetX(0), Is.EqualTo(_unicornEmu.X[0]), "X0");
            Assert.That(_context.GetX(1), Is.EqualTo(_unicornEmu.X[1]), "X1");
            Assert.That(_context.GetX(2), Is.EqualTo(_unicornEmu.X[2]), "X2");
            Assert.That(_context.GetX(3), Is.EqualTo(_unicornEmu.X[3]), "X3");
            Assert.That(_context.GetX(4), Is.EqualTo(_unicornEmu.X[4]));
            Assert.That(_context.GetX(5), Is.EqualTo(_unicornEmu.X[5]));
            Assert.That(_context.GetX(6), Is.EqualTo(_unicornEmu.X[6]));
            Assert.That(_context.GetX(7), Is.EqualTo(_unicornEmu.X[7]));
            Assert.That(_context.GetX(8), Is.EqualTo(_unicornEmu.X[8]));
            Assert.That(_context.GetX(9), Is.EqualTo(_unicornEmu.X[9]));
            Assert.That(_context.GetX(10), Is.EqualTo(_unicornEmu.X[10]));
            Assert.That(_context.GetX(11), Is.EqualTo(_unicornEmu.X[11]));
            Assert.That(_context.GetX(12), Is.EqualTo(_unicornEmu.X[12]));
            Assert.That(_context.GetX(13), Is.EqualTo(_unicornEmu.X[13]));
            Assert.That(_context.GetX(14), Is.EqualTo(_unicornEmu.X[14]));
            Assert.That(_context.GetX(15), Is.EqualTo(_unicornEmu.X[15]));
            Assert.That(_context.GetX(16), Is.EqualTo(_unicornEmu.X[16]));
            Assert.That(_context.GetX(17), Is.EqualTo(_unicornEmu.X[17]));
            Assert.That(_context.GetX(18), Is.EqualTo(_unicornEmu.X[18]));
            Assert.That(_context.GetX(19), Is.EqualTo(_unicornEmu.X[19]));
            Assert.That(_context.GetX(20), Is.EqualTo(_unicornEmu.X[20]));
            Assert.That(_context.GetX(21), Is.EqualTo(_unicornEmu.X[21]));
            Assert.That(_context.GetX(22), Is.EqualTo(_unicornEmu.X[22]));
            Assert.That(_context.GetX(23), Is.EqualTo(_unicornEmu.X[23]));
            Assert.That(_context.GetX(24), Is.EqualTo(_unicornEmu.X[24]));
            Assert.That(_context.GetX(25), Is.EqualTo(_unicornEmu.X[25]));
            Assert.That(_context.GetX(26), Is.EqualTo(_unicornEmu.X[26]));
            Assert.That(_context.GetX(27), Is.EqualTo(_unicornEmu.X[27]));
            Assert.That(_context.GetX(28), Is.EqualTo(_unicornEmu.X[28]));
            Assert.That(_context.GetX(29), Is.EqualTo(_unicornEmu.X[29]));
            Assert.That(_context.GetX(30), Is.EqualTo(_unicornEmu.X[30]));
            Assert.That(_context.GetX(31), Is.EqualTo(_unicornEmu.SP), "X31");

            if (fpTolerances == FpTolerances.None)
            {
                Assert.That(V128ToSimdValue(_context.GetV(0)), Is.EqualTo(_unicornEmu.Q[0]), "V0");
            }
            else
            {
                ManageFpTolerances(fpTolerances);
            }
            Assert.That(V128ToSimdValue(_context.GetV(1)), Is.EqualTo(_unicornEmu.Q[1]), "V1");
            Assert.That(V128ToSimdValue(_context.GetV(2)), Is.EqualTo(_unicornEmu.Q[2]), "V2");
            Assert.That(V128ToSimdValue(_context.GetV(3)), Is.EqualTo(_unicornEmu.Q[3]), "V3");
            Assert.That(V128ToSimdValue(_context.GetV(4)), Is.EqualTo(_unicornEmu.Q[4]), "V4");
            Assert.That(V128ToSimdValue(_context.GetV(5)), Is.EqualTo(_unicornEmu.Q[5]), "V5");
            Assert.That(V128ToSimdValue(_context.GetV(6)), Is.EqualTo(_unicornEmu.Q[6]));
            Assert.That(V128ToSimdValue(_context.GetV(7)), Is.EqualTo(_unicornEmu.Q[7]));
            Assert.That(V128ToSimdValue(_context.GetV(8)), Is.EqualTo(_unicornEmu.Q[8]));
            Assert.That(V128ToSimdValue(_context.GetV(9)), Is.EqualTo(_unicornEmu.Q[9]));
            Assert.That(V128ToSimdValue(_context.GetV(10)), Is.EqualTo(_unicornEmu.Q[10]));
            Assert.That(V128ToSimdValue(_context.GetV(11)), Is.EqualTo(_unicornEmu.Q[11]));
            Assert.That(V128ToSimdValue(_context.GetV(12)), Is.EqualTo(_unicornEmu.Q[12]));
            Assert.That(V128ToSimdValue(_context.GetV(13)), Is.EqualTo(_unicornEmu.Q[13]));
            Assert.That(V128ToSimdValue(_context.GetV(14)), Is.EqualTo(_unicornEmu.Q[14]));
            Assert.That(V128ToSimdValue(_context.GetV(15)), Is.EqualTo(_unicornEmu.Q[15]));
            Assert.That(V128ToSimdValue(_context.GetV(16)), Is.EqualTo(_unicornEmu.Q[16]));
            Assert.That(V128ToSimdValue(_context.GetV(17)), Is.EqualTo(_unicornEmu.Q[17]));
            Assert.That(V128ToSimdValue(_context.GetV(18)), Is.EqualTo(_unicornEmu.Q[18]));
            Assert.That(V128ToSimdValue(_context.GetV(19)), Is.EqualTo(_unicornEmu.Q[19]));
            Assert.That(V128ToSimdValue(_context.GetV(20)), Is.EqualTo(_unicornEmu.Q[20]));
            Assert.That(V128ToSimdValue(_context.GetV(21)), Is.EqualTo(_unicornEmu.Q[21]));
            Assert.That(V128ToSimdValue(_context.GetV(22)), Is.EqualTo(_unicornEmu.Q[22]));
            Assert.That(V128ToSimdValue(_context.GetV(23)), Is.EqualTo(_unicornEmu.Q[23]));
            Assert.That(V128ToSimdValue(_context.GetV(24)), Is.EqualTo(_unicornEmu.Q[24]));
            Assert.That(V128ToSimdValue(_context.GetV(25)), Is.EqualTo(_unicornEmu.Q[25]));
            Assert.That(V128ToSimdValue(_context.GetV(26)), Is.EqualTo(_unicornEmu.Q[26]));
            Assert.That(V128ToSimdValue(_context.GetV(27)), Is.EqualTo(_unicornEmu.Q[27]));
            Assert.That(V128ToSimdValue(_context.GetV(28)), Is.EqualTo(_unicornEmu.Q[28]));
            Assert.That(V128ToSimdValue(_context.GetV(29)), Is.EqualTo(_unicornEmu.Q[29]));
            Assert.That(V128ToSimdValue(_context.GetV(30)), Is.EqualTo(_unicornEmu.Q[30]), "V30");
            Assert.That(V128ToSimdValue(_context.GetV(31)), Is.EqualTo(_unicornEmu.Q[31]), "V31");

            Assert.Multiple(() =>
            {
                Assert.That(_context.GetPstateFlag(PState.VFlag), Is.EqualTo(_unicornEmu.OverflowFlag), "VFlag");
                Assert.That(_context.GetPstateFlag(PState.CFlag), Is.EqualTo(_unicornEmu.CarryFlag), "CFlag");
                Assert.That(_context.GetPstateFlag(PState.ZFlag), Is.EqualTo(_unicornEmu.ZeroFlag), "ZFlag");
                Assert.That(_context.GetPstateFlag(PState.NFlag), Is.EqualTo(_unicornEmu.NegativeFlag), "NFlag");
            });

            Assert.That((int)_context.Fpcr, Is.EqualTo(_unicornEmu.Fpcr), "Fpcr");
            Assert.That((int)_context.Fpsr & (int)fpsrMask, Is.EqualTo(_unicornEmu.Fpsr & (int)fpsrMask), "Fpsr");

            if (_usingMemory)
            {
                byte[] mem        = _memory.GetSpan(DataBaseAddress, (int)Size).ToArray();
                byte[] unicornMem = _unicornEmu.MemoryRead(DataBaseAddress, Size);

                Assert.That(mem, Is.EqualTo(unicornMem), "Data");
            }
        }
Exemple #2
0
        protected void CompareAgainstUnicorn(
            Fpsr fpsrMask             = Fpsr.None,
            FpSkips fpSkips           = FpSkips.None,
            FpTolerances fpTolerances = FpTolerances.None)
        {
            if (!_unicornAvailable)
            {
                return;
            }

            if (fpSkips != FpSkips.None)
            {
                ManageFpSkips(fpSkips);
            }

            Assert.That(_context.GetX(0), Is.EqualTo(_unicornEmu.R[0]));
            Assert.That(_context.GetX(1), Is.EqualTo(_unicornEmu.R[1]));
            Assert.That(_context.GetX(2), Is.EqualTo(_unicornEmu.R[2]));
            Assert.That(_context.GetX(3), Is.EqualTo(_unicornEmu.R[3]));
            Assert.That(_context.GetX(4), Is.EqualTo(_unicornEmu.R[4]));
            Assert.That(_context.GetX(5), Is.EqualTo(_unicornEmu.R[5]));
            Assert.That(_context.GetX(6), Is.EqualTo(_unicornEmu.R[6]));
            Assert.That(_context.GetX(7), Is.EqualTo(_unicornEmu.R[7]));
            Assert.That(_context.GetX(8), Is.EqualTo(_unicornEmu.R[8]));
            Assert.That(_context.GetX(9), Is.EqualTo(_unicornEmu.R[9]));
            Assert.That(_context.GetX(10), Is.EqualTo(_unicornEmu.R[10]));
            Assert.That(_context.GetX(11), Is.EqualTo(_unicornEmu.R[11]));
            Assert.That(_context.GetX(12), Is.EqualTo(_unicornEmu.R[12]));
            Assert.That(_context.GetX(13), Is.EqualTo(_unicornEmu.R[13]));
            Assert.That(_context.GetX(14), Is.EqualTo(_unicornEmu.R[14]));

            if (fpTolerances == FpTolerances.None)
            {
                Assert.That(V128ToSimdValue(_context.GetV(0)), Is.EqualTo(_unicornEmu.Q[0]));
            }
            else
            {
                ManageFpTolerances(fpTolerances);
            }
            Assert.That(V128ToSimdValue(_context.GetV(1)), Is.EqualTo(_unicornEmu.Q[1]));
            Assert.That(V128ToSimdValue(_context.GetV(2)), Is.EqualTo(_unicornEmu.Q[2]));
            Assert.That(V128ToSimdValue(_context.GetV(3)), Is.EqualTo(_unicornEmu.Q[3]));
            Assert.That(V128ToSimdValue(_context.GetV(4)), Is.EqualTo(_unicornEmu.Q[4]));
            Assert.That(V128ToSimdValue(_context.GetV(5)), Is.EqualTo(_unicornEmu.Q[5]));
            Assert.That(V128ToSimdValue(_context.GetV(6)), Is.EqualTo(_unicornEmu.Q[6]));
            Assert.That(V128ToSimdValue(_context.GetV(7)), Is.EqualTo(_unicornEmu.Q[7]));
            Assert.That(V128ToSimdValue(_context.GetV(8)), Is.EqualTo(_unicornEmu.Q[8]));
            Assert.That(V128ToSimdValue(_context.GetV(9)), Is.EqualTo(_unicornEmu.Q[9]));
            Assert.That(V128ToSimdValue(_context.GetV(10)), Is.EqualTo(_unicornEmu.Q[10]));
            Assert.That(V128ToSimdValue(_context.GetV(11)), Is.EqualTo(_unicornEmu.Q[11]));
            Assert.That(V128ToSimdValue(_context.GetV(12)), Is.EqualTo(_unicornEmu.Q[12]));
            Assert.That(V128ToSimdValue(_context.GetV(13)), Is.EqualTo(_unicornEmu.Q[13]));
            Assert.That(V128ToSimdValue(_context.GetV(14)), Is.EqualTo(_unicornEmu.Q[14]));
            Assert.That(V128ToSimdValue(_context.GetV(15)), Is.EqualTo(_unicornEmu.Q[15]));

            Assert.That((int)_context.Fpcr | ((int)_context.Fpsr & (int)fpsrMask), Is.EqualTo(_unicornEmu.Fpscr));

            Assert.That(_context.GetPstateFlag(PState.VFlag), Is.EqualTo(_unicornEmu.OverflowFlag));
            Assert.That(_context.GetPstateFlag(PState.CFlag), Is.EqualTo(_unicornEmu.CarryFlag));
            Assert.That(_context.GetPstateFlag(PState.ZFlag), Is.EqualTo(_unicornEmu.ZeroFlag));
            Assert.That(_context.GetPstateFlag(PState.NFlag), Is.EqualTo(_unicornEmu.NegativeFlag));

            if (usingMemory)
            {
                byte[] meilleureMem = _memory.ReadBytes((long)(0x2000), _size);
                byte[] unicornMem   = _unicornEmu.MemoryRead((ulong)(0x2000), (ulong)_size);

                for (int i = 0; i < _size; i++)
                {
                    Assert.AreEqual(meilleureMem[i], unicornMem[i]);
                }
            }
        }
Exemple #3
0
        protected void CompareAgainstUnicorn(
            Fpsr fpsrMask             = Fpsr.None,
            FpSkips fpSkips           = FpSkips.None,
            FpTolerances fpTolerances = FpTolerances.None)
        {
            if (!_unicornAvailable)
            {
                return;
            }

            if (fpSkips != FpSkips.None)
            {
                ManageFpSkips(fpSkips);
            }

            Assert.That(_context.GetX(0), Is.EqualTo(_unicornEmu.X[0]));
            Assert.That(_context.GetX(1), Is.EqualTo(_unicornEmu.X[1]));
            Assert.That(_context.GetX(2), Is.EqualTo(_unicornEmu.X[2]));
            Assert.That(_context.GetX(3), Is.EqualTo(_unicornEmu.X[3]));
            Assert.That(_context.GetX(4), Is.EqualTo(_unicornEmu.X[4]));
            Assert.That(_context.GetX(5), Is.EqualTo(_unicornEmu.X[5]));
            Assert.That(_context.GetX(6), Is.EqualTo(_unicornEmu.X[6]));
            Assert.That(_context.GetX(7), Is.EqualTo(_unicornEmu.X[7]));
            Assert.That(_context.GetX(8), Is.EqualTo(_unicornEmu.X[8]));
            Assert.That(_context.GetX(9), Is.EqualTo(_unicornEmu.X[9]));
            Assert.That(_context.GetX(10), Is.EqualTo(_unicornEmu.X[10]));
            Assert.That(_context.GetX(11), Is.EqualTo(_unicornEmu.X[11]));
            Assert.That(_context.GetX(12), Is.EqualTo(_unicornEmu.X[12]));
            Assert.That(_context.GetX(13), Is.EqualTo(_unicornEmu.X[13]));
            Assert.That(_context.GetX(14), Is.EqualTo(_unicornEmu.X[14]));
            Assert.That(_context.GetX(15), Is.EqualTo(_unicornEmu.X[15]));
            Assert.That(_context.GetX(16), Is.EqualTo(_unicornEmu.X[16]));
            Assert.That(_context.GetX(17), Is.EqualTo(_unicornEmu.X[17]));
            Assert.That(_context.GetX(18), Is.EqualTo(_unicornEmu.X[18]));
            Assert.That(_context.GetX(19), Is.EqualTo(_unicornEmu.X[19]));
            Assert.That(_context.GetX(20), Is.EqualTo(_unicornEmu.X[20]));
            Assert.That(_context.GetX(21), Is.EqualTo(_unicornEmu.X[21]));
            Assert.That(_context.GetX(22), Is.EqualTo(_unicornEmu.X[22]));
            Assert.That(_context.GetX(23), Is.EqualTo(_unicornEmu.X[23]));
            Assert.That(_context.GetX(24), Is.EqualTo(_unicornEmu.X[24]));
            Assert.That(_context.GetX(25), Is.EqualTo(_unicornEmu.X[25]));
            Assert.That(_context.GetX(26), Is.EqualTo(_unicornEmu.X[26]));
            Assert.That(_context.GetX(27), Is.EqualTo(_unicornEmu.X[27]));
            Assert.That(_context.GetX(28), Is.EqualTo(_unicornEmu.X[28]));
            Assert.That(_context.GetX(29), Is.EqualTo(_unicornEmu.X[29]));
            Assert.That(_context.GetX(30), Is.EqualTo(_unicornEmu.X[30]));

            Assert.That(_context.GetX(31), Is.EqualTo(_unicornEmu.SP));

            if (fpTolerances == FpTolerances.None)
            {
                Assert.That(V128ToSimdValue(_context.GetV(0)), Is.EqualTo(_unicornEmu.Q[0]));
            }
            else
            {
                ManageFpTolerances(fpTolerances);
            }
            Assert.That(V128ToSimdValue(_context.GetV(1)), Is.EqualTo(_unicornEmu.Q[1]));
            Assert.That(V128ToSimdValue(_context.GetV(2)), Is.EqualTo(_unicornEmu.Q[2]));
            Assert.That(V128ToSimdValue(_context.GetV(3)), Is.EqualTo(_unicornEmu.Q[3]));
            Assert.That(V128ToSimdValue(_context.GetV(4)), Is.EqualTo(_unicornEmu.Q[4]));
            Assert.That(V128ToSimdValue(_context.GetV(5)), Is.EqualTo(_unicornEmu.Q[5]));
            Assert.That(V128ToSimdValue(_context.GetV(6)), Is.EqualTo(_unicornEmu.Q[6]));
            Assert.That(V128ToSimdValue(_context.GetV(7)), Is.EqualTo(_unicornEmu.Q[7]));
            Assert.That(V128ToSimdValue(_context.GetV(8)), Is.EqualTo(_unicornEmu.Q[8]));
            Assert.That(V128ToSimdValue(_context.GetV(9)), Is.EqualTo(_unicornEmu.Q[9]));
            Assert.That(V128ToSimdValue(_context.GetV(10)), Is.EqualTo(_unicornEmu.Q[10]));
            Assert.That(V128ToSimdValue(_context.GetV(11)), Is.EqualTo(_unicornEmu.Q[11]));
            Assert.That(V128ToSimdValue(_context.GetV(12)), Is.EqualTo(_unicornEmu.Q[12]));
            Assert.That(V128ToSimdValue(_context.GetV(13)), Is.EqualTo(_unicornEmu.Q[13]));
            Assert.That(V128ToSimdValue(_context.GetV(14)), Is.EqualTo(_unicornEmu.Q[14]));
            Assert.That(V128ToSimdValue(_context.GetV(15)), Is.EqualTo(_unicornEmu.Q[15]));
            Assert.That(V128ToSimdValue(_context.GetV(16)), Is.EqualTo(_unicornEmu.Q[16]));
            Assert.That(V128ToSimdValue(_context.GetV(17)), Is.EqualTo(_unicornEmu.Q[17]));
            Assert.That(V128ToSimdValue(_context.GetV(18)), Is.EqualTo(_unicornEmu.Q[18]));
            Assert.That(V128ToSimdValue(_context.GetV(19)), Is.EqualTo(_unicornEmu.Q[19]));
            Assert.That(V128ToSimdValue(_context.GetV(20)), Is.EqualTo(_unicornEmu.Q[20]));
            Assert.That(V128ToSimdValue(_context.GetV(21)), Is.EqualTo(_unicornEmu.Q[21]));
            Assert.That(V128ToSimdValue(_context.GetV(22)), Is.EqualTo(_unicornEmu.Q[22]));
            Assert.That(V128ToSimdValue(_context.GetV(23)), Is.EqualTo(_unicornEmu.Q[23]));
            Assert.That(V128ToSimdValue(_context.GetV(24)), Is.EqualTo(_unicornEmu.Q[24]));
            Assert.That(V128ToSimdValue(_context.GetV(25)), Is.EqualTo(_unicornEmu.Q[25]));
            Assert.That(V128ToSimdValue(_context.GetV(26)), Is.EqualTo(_unicornEmu.Q[26]));
            Assert.That(V128ToSimdValue(_context.GetV(27)), Is.EqualTo(_unicornEmu.Q[27]));
            Assert.That(V128ToSimdValue(_context.GetV(28)), Is.EqualTo(_unicornEmu.Q[28]));
            Assert.That(V128ToSimdValue(_context.GetV(29)), Is.EqualTo(_unicornEmu.Q[29]));
            Assert.That(V128ToSimdValue(_context.GetV(30)), Is.EqualTo(_unicornEmu.Q[30]));
            Assert.That(V128ToSimdValue(_context.GetV(31)), Is.EqualTo(_unicornEmu.Q[31]));

            Assert.That((int)_context.Fpcr, Is.EqualTo(_unicornEmu.Fpcr));
            Assert.That((int)_context.Fpsr & (int)fpsrMask, Is.EqualTo(_unicornEmu.Fpsr & (int)fpsrMask));

            Assert.That(_context.GetPstateFlag(PState.VFlag), Is.EqualTo(_unicornEmu.OverflowFlag));
            Assert.That(_context.GetPstateFlag(PState.CFlag), Is.EqualTo(_unicornEmu.CarryFlag));
            Assert.That(_context.GetPstateFlag(PState.ZFlag), Is.EqualTo(_unicornEmu.ZeroFlag));
            Assert.That(_context.GetPstateFlag(PState.NFlag), Is.EqualTo(_unicornEmu.NegativeFlag));
        }
 internal void SetFpsrFlag(Fpsr flag)
 {
     Fpsr |= 1 << (int)flag;
 }
Exemple #5
0
        protected void CompareAgainstUnicorn(
            Fpsr fpsrMask             = Fpsr.None,
            FpSkips fpSkips           = FpSkips.None,
            FpTolerances fpTolerances = FpTolerances.None)
        {
            if (!_unicornAvailable)
            {
                return;
            }

            if (fpSkips != FpSkips.None)
            {
                ManageFpSkips(fpSkips);
            }

            Assert.That(_thread.ThreadState.X0, Is.EqualTo(_unicornEmu.X[0]));
            Assert.That(_thread.ThreadState.X1, Is.EqualTo(_unicornEmu.X[1]));
            Assert.That(_thread.ThreadState.X2, Is.EqualTo(_unicornEmu.X[2]));
            Assert.That(_thread.ThreadState.X3, Is.EqualTo(_unicornEmu.X[3]));
            Assert.That(_thread.ThreadState.X4, Is.EqualTo(_unicornEmu.X[4]));
            Assert.That(_thread.ThreadState.X5, Is.EqualTo(_unicornEmu.X[5]));
            Assert.That(_thread.ThreadState.X6, Is.EqualTo(_unicornEmu.X[6]));
            Assert.That(_thread.ThreadState.X7, Is.EqualTo(_unicornEmu.X[7]));
            Assert.That(_thread.ThreadState.X8, Is.EqualTo(_unicornEmu.X[8]));
            Assert.That(_thread.ThreadState.X9, Is.EqualTo(_unicornEmu.X[9]));
            Assert.That(_thread.ThreadState.X10, Is.EqualTo(_unicornEmu.X[10]));
            Assert.That(_thread.ThreadState.X11, Is.EqualTo(_unicornEmu.X[11]));
            Assert.That(_thread.ThreadState.X12, Is.EqualTo(_unicornEmu.X[12]));
            Assert.That(_thread.ThreadState.X13, Is.EqualTo(_unicornEmu.X[13]));
            Assert.That(_thread.ThreadState.X14, Is.EqualTo(_unicornEmu.X[14]));
            Assert.That(_thread.ThreadState.X15, Is.EqualTo(_unicornEmu.X[15]));
            Assert.That(_thread.ThreadState.X16, Is.EqualTo(_unicornEmu.X[16]));
            Assert.That(_thread.ThreadState.X17, Is.EqualTo(_unicornEmu.X[17]));
            Assert.That(_thread.ThreadState.X18, Is.EqualTo(_unicornEmu.X[18]));
            Assert.That(_thread.ThreadState.X19, Is.EqualTo(_unicornEmu.X[19]));
            Assert.That(_thread.ThreadState.X20, Is.EqualTo(_unicornEmu.X[20]));
            Assert.That(_thread.ThreadState.X21, Is.EqualTo(_unicornEmu.X[21]));
            Assert.That(_thread.ThreadState.X22, Is.EqualTo(_unicornEmu.X[22]));
            Assert.That(_thread.ThreadState.X23, Is.EqualTo(_unicornEmu.X[23]));
            Assert.That(_thread.ThreadState.X24, Is.EqualTo(_unicornEmu.X[24]));
            Assert.That(_thread.ThreadState.X25, Is.EqualTo(_unicornEmu.X[25]));
            Assert.That(_thread.ThreadState.X26, Is.EqualTo(_unicornEmu.X[26]));
            Assert.That(_thread.ThreadState.X27, Is.EqualTo(_unicornEmu.X[27]));
            Assert.That(_thread.ThreadState.X28, Is.EqualTo(_unicornEmu.X[28]));
            Assert.That(_thread.ThreadState.X29, Is.EqualTo(_unicornEmu.X[29]));
            Assert.That(_thread.ThreadState.X30, Is.EqualTo(_unicornEmu.X[30]));

            Assert.That(_thread.ThreadState.X31, Is.EqualTo(_unicornEmu.SP));

            if (fpTolerances == FpTolerances.None)
            {
                Assert.That(_thread.ThreadState.V0, Is.EqualTo(_unicornEmu.Q[0]));
            }
            else
            {
                ManageFpTolerances(fpTolerances);
            }
            Assert.That(_thread.ThreadState.V1, Is.EqualTo(_unicornEmu.Q[1]));
            Assert.That(_thread.ThreadState.V2, Is.EqualTo(_unicornEmu.Q[2]));
            Assert.That(_thread.ThreadState.V3, Is.EqualTo(_unicornEmu.Q[3]));
            Assert.That(_thread.ThreadState.V4, Is.EqualTo(_unicornEmu.Q[4]));
            Assert.That(_thread.ThreadState.V5, Is.EqualTo(_unicornEmu.Q[5]));
            Assert.That(_thread.ThreadState.V6, Is.EqualTo(_unicornEmu.Q[6]));
            Assert.That(_thread.ThreadState.V7, Is.EqualTo(_unicornEmu.Q[7]));
            Assert.That(_thread.ThreadState.V8, Is.EqualTo(_unicornEmu.Q[8]));
            Assert.That(_thread.ThreadState.V9, Is.EqualTo(_unicornEmu.Q[9]));
            Assert.That(_thread.ThreadState.V10, Is.EqualTo(_unicornEmu.Q[10]));
            Assert.That(_thread.ThreadState.V11, Is.EqualTo(_unicornEmu.Q[11]));
            Assert.That(_thread.ThreadState.V12, Is.EqualTo(_unicornEmu.Q[12]));
            Assert.That(_thread.ThreadState.V13, Is.EqualTo(_unicornEmu.Q[13]));
            Assert.That(_thread.ThreadState.V14, Is.EqualTo(_unicornEmu.Q[14]));
            Assert.That(_thread.ThreadState.V15, Is.EqualTo(_unicornEmu.Q[15]));
            Assert.That(_thread.ThreadState.V16, Is.EqualTo(_unicornEmu.Q[16]));
            Assert.That(_thread.ThreadState.V17, Is.EqualTo(_unicornEmu.Q[17]));
            Assert.That(_thread.ThreadState.V18, Is.EqualTo(_unicornEmu.Q[18]));
            Assert.That(_thread.ThreadState.V19, Is.EqualTo(_unicornEmu.Q[19]));
            Assert.That(_thread.ThreadState.V20, Is.EqualTo(_unicornEmu.Q[20]));
            Assert.That(_thread.ThreadState.V21, Is.EqualTo(_unicornEmu.Q[21]));
            Assert.That(_thread.ThreadState.V22, Is.EqualTo(_unicornEmu.Q[22]));
            Assert.That(_thread.ThreadState.V23, Is.EqualTo(_unicornEmu.Q[23]));
            Assert.That(_thread.ThreadState.V24, Is.EqualTo(_unicornEmu.Q[24]));
            Assert.That(_thread.ThreadState.V25, Is.EqualTo(_unicornEmu.Q[25]));
            Assert.That(_thread.ThreadState.V26, Is.EqualTo(_unicornEmu.Q[26]));
            Assert.That(_thread.ThreadState.V27, Is.EqualTo(_unicornEmu.Q[27]));
            Assert.That(_thread.ThreadState.V28, Is.EqualTo(_unicornEmu.Q[28]));
            Assert.That(_thread.ThreadState.V29, Is.EqualTo(_unicornEmu.Q[29]));
            Assert.That(_thread.ThreadState.V30, Is.EqualTo(_unicornEmu.Q[30]));
            Assert.That(_thread.ThreadState.V31, Is.EqualTo(_unicornEmu.Q[31]));

            Assert.That(_thread.ThreadState.Fpcr, Is.EqualTo(_unicornEmu.Fpcr));
            Assert.That(_thread.ThreadState.Fpsr & (int)fpsrMask, Is.EqualTo(_unicornEmu.Fpsr & (int)fpsrMask));

            Assert.That(_thread.ThreadState.Overflow, Is.EqualTo(_unicornEmu.OverflowFlag));
            Assert.That(_thread.ThreadState.Carry, Is.EqualTo(_unicornEmu.CarryFlag));
            Assert.That(_thread.ThreadState.Zero, Is.EqualTo(_unicornEmu.ZeroFlag));
            Assert.That(_thread.ThreadState.Negative, Is.EqualTo(_unicornEmu.NegativeFlag));
        }
Exemple #6
0
        protected void CompareAgainstUnicorn(
            Fpsr fpsrMask             = Fpsr.None,
            FpSkips fpSkips           = FpSkips.None,
            FpTolerances fpTolerances = FpTolerances.None)
        {
            if (!_unicornAvailable)
            {
                return;
            }

            if (fpSkips != FpSkips.None)
            {
                ManageFpSkips(fpSkips);
            }

            Assert.That(_context.GetX(0), Is.EqualTo(_unicornEmu.R[0]), "R0");
            Assert.That(_context.GetX(1), Is.EqualTo(_unicornEmu.R[1]), "R1");
            Assert.That(_context.GetX(2), Is.EqualTo(_unicornEmu.R[2]), "R2");
            Assert.That(_context.GetX(3), Is.EqualTo(_unicornEmu.R[3]), "R3");
            Assert.That(_context.GetX(4), Is.EqualTo(_unicornEmu.R[4]));
            Assert.That(_context.GetX(5), Is.EqualTo(_unicornEmu.R[5]));
            Assert.That(_context.GetX(6), Is.EqualTo(_unicornEmu.R[6]));
            Assert.That(_context.GetX(7), Is.EqualTo(_unicornEmu.R[7]));
            Assert.That(_context.GetX(8), Is.EqualTo(_unicornEmu.R[8]));
            Assert.That(_context.GetX(9), Is.EqualTo(_unicornEmu.R[9]));
            Assert.That(_context.GetX(10), Is.EqualTo(_unicornEmu.R[10]));
            Assert.That(_context.GetX(11), Is.EqualTo(_unicornEmu.R[11]));
            Assert.That(_context.GetX(12), Is.EqualTo(_unicornEmu.R[12]));
            Assert.That(_context.GetX(13), Is.EqualTo(_unicornEmu.SP), "SP");
            Assert.That(_context.GetX(14), Is.EqualTo(_unicornEmu.R[14]));

            if (fpTolerances == FpTolerances.None)
            {
                Assert.That(V128ToSimdValue(_context.GetV(0)), Is.EqualTo(_unicornEmu.Q[0]), "V0");
            }
            else
            {
                ManageFpTolerances(fpTolerances);
            }
            Assert.That(V128ToSimdValue(_context.GetV(1)), Is.EqualTo(_unicornEmu.Q[1]), "V1");
            Assert.That(V128ToSimdValue(_context.GetV(2)), Is.EqualTo(_unicornEmu.Q[2]), "V2");
            Assert.That(V128ToSimdValue(_context.GetV(3)), Is.EqualTo(_unicornEmu.Q[3]), "V3");
            Assert.That(V128ToSimdValue(_context.GetV(4)), Is.EqualTo(_unicornEmu.Q[4]), "V4");
            Assert.That(V128ToSimdValue(_context.GetV(5)), Is.EqualTo(_unicornEmu.Q[5]), "V5");
            Assert.That(V128ToSimdValue(_context.GetV(6)), Is.EqualTo(_unicornEmu.Q[6]));
            Assert.That(V128ToSimdValue(_context.GetV(7)), Is.EqualTo(_unicornEmu.Q[7]));
            Assert.That(V128ToSimdValue(_context.GetV(8)), Is.EqualTo(_unicornEmu.Q[8]));
            Assert.That(V128ToSimdValue(_context.GetV(9)), Is.EqualTo(_unicornEmu.Q[9]));
            Assert.That(V128ToSimdValue(_context.GetV(10)), Is.EqualTo(_unicornEmu.Q[10]));
            Assert.That(V128ToSimdValue(_context.GetV(11)), Is.EqualTo(_unicornEmu.Q[11]));
            Assert.That(V128ToSimdValue(_context.GetV(12)), Is.EqualTo(_unicornEmu.Q[12]));
            Assert.That(V128ToSimdValue(_context.GetV(13)), Is.EqualTo(_unicornEmu.Q[13]));
            Assert.That(V128ToSimdValue(_context.GetV(14)), Is.EqualTo(_unicornEmu.Q[14]), "V14");
            Assert.That(V128ToSimdValue(_context.GetV(15)), Is.EqualTo(_unicornEmu.Q[15]), "V15");

            Assert.Multiple(() =>
            {
                Assert.That(_context.GetPstateFlag(PState.QFlag), Is.EqualTo(_unicornEmu.QFlag), "QFlag");
                Assert.That(_context.GetPstateFlag(PState.VFlag), Is.EqualTo(_unicornEmu.OverflowFlag), "VFlag");
                Assert.That(_context.GetPstateFlag(PState.CFlag), Is.EqualTo(_unicornEmu.CarryFlag), "CFlag");
                Assert.That(_context.GetPstateFlag(PState.ZFlag), Is.EqualTo(_unicornEmu.ZeroFlag), "ZFlag");
                Assert.That(_context.GetPstateFlag(PState.NFlag), Is.EqualTo(_unicornEmu.NegativeFlag), "NFlag");
            });

            Assert.That((int)GetFpscr() & (int)fpsrMask, Is.EqualTo(_unicornEmu.Fpscr & (int)fpsrMask), "Fpscr");

            if (_usingMemory)
            {
                byte[] mem        = _memory.GetSpan(DataBaseAddress, (int)Size).ToArray();
                byte[] unicornMem = _unicornEmu.MemoryRead(DataBaseAddress, Size);

                Assert.That(mem, Is.EqualTo(unicornMem), "Data");
            }
        }