コード例 #1
0
        /* shared_pseudocode.html#AArch64.ResetSpecialRegisters.0 */
        public static void ResetSpecialRegisters()
        {
            // AArch64 special registers
            /* SP_EL0 = bits(64) UNKNOWN; */
            SP_EL0.SetAll(false);
            /* SP_EL1 = bits(64) UNKNOWN; */
            SP_EL1.SetAll(false);

            FPSR.SetAll(false); // TODO: Add named fields.
        }
コード例 #2
0
        /* #AArch64.ResetSpecialRegisters.0 */
        public static void ResetSpecialRegisters()
        {
            // AArch64 special registers
            /* SP_EL0 = bits(64) UNKNOWN; */
            SP_EL0.SetAll(false);
            /* SP_EL1 = bits(64) UNKNOWN; */
            SP_EL1.SetAll(false);

            FPSR.SetAll(false); // FIXME: Temporary solution.
        }
コード例 #3
0
ファイル: AThreadState.cs プロジェクト: andrewphb/Ryujinx
 internal void SetFpsrFlag(FPSR Flag)
 {
     Fpsr |= 1 << (int)Flag;
 }
コード例 #4
0
        protected void CompareAgainstUnicorn(
            FPSR FpsrMask   = FPSR.None,
            FpSkips FpSkips = FpSkips.None,
            FpUseTolerance FpUseTolerance = FpUseTolerance.None)
        {
            if (!UnicornAvailable)
            {
                return;
            }

            if (FpSkips == FpSkips.IfNaN_S && float.IsNaN(VectorExtractSingle(UnicornEmu.Q[0], (byte)0)))
            {
                Assert.Ignore("NaN test.");
            }

            if (FpSkips == FpSkips.IfNaN_D && double.IsNaN(VectorExtractDouble(UnicornEmu.Q[0], (byte)0)))
            {
                Assert.Ignore("NaN test.");
            }

            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 (FpUseTolerance == FpUseTolerance.None)
            {
                Assert.That(Thread.ThreadState.V0, Is.EqualTo(UnicornEmu.Q[0]));
            }
            else
            {
                if (!Is.EqualTo(UnicornEmu.Q[0]).ApplyTo(Thread.ThreadState.V0).IsSuccess)
                {
                    if (FpUseTolerance == FpUseTolerance.OneUlps_S)
                    {
                        if (float.IsNormal(VectorExtractSingle(UnicornEmu.Q[0], (byte)0)) ||
                            float.IsSubnormal(VectorExtractSingle(UnicornEmu.Q[0], (byte)0)))
                        {
                            Assert.That(VectorExtractSingle(Thread.ThreadState.V0, (byte)0),
                                        Is.EqualTo(VectorExtractSingle(UnicornEmu.Q[0], (byte)0)).Within(1).Ulps);
                            Assert.That(VectorExtractSingle(Thread.ThreadState.V0, (byte)1),
                                        Is.EqualTo(VectorExtractSingle(UnicornEmu.Q[0], (byte)1)).Within(1).Ulps);
                            Assert.That(VectorExtractSingle(Thread.ThreadState.V0, (byte)2),
                                        Is.EqualTo(VectorExtractSingle(UnicornEmu.Q[0], (byte)2)).Within(1).Ulps);
                            Assert.That(VectorExtractSingle(Thread.ThreadState.V0, (byte)3),
                                        Is.EqualTo(VectorExtractSingle(UnicornEmu.Q[0], (byte)3)).Within(1).Ulps);
                        }
                        else
                        {
                            Assert.That(Thread.ThreadState.V0, Is.EqualTo(UnicornEmu.Q[0]));
                        }
                    }

                    if (FpUseTolerance == FpUseTolerance.OneUlps_D)
                    {
                        if (double.IsNormal(VectorExtractDouble(UnicornEmu.Q[0], (byte)0)) ||
                            double.IsSubnormal(VectorExtractDouble(UnicornEmu.Q[0], (byte)0)))
                        {
                            Assert.That(VectorExtractDouble(Thread.ThreadState.V0, (byte)0),
                                        Is.EqualTo(VectorExtractDouble(UnicornEmu.Q[0], (byte)0)).Within(1).Ulps);
                            Assert.That(VectorExtractDouble(Thread.ThreadState.V0, (byte)1),
                                        Is.EqualTo(VectorExtractDouble(UnicornEmu.Q[0], (byte)1)).Within(1).Ulps);
                        }
                        else
                        {
                            Assert.That(Thread.ThreadState.V0, Is.EqualTo(UnicornEmu.Q[0]));
                        }
                    }
                }
            }
            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.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));
        }
コード例 #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.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));
        }