aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ARMeilleure/Instructions/InstEmitSystem.cs1
-rw-r--r--ARMeilleure/Instructions/NativeInterface.cs5
-rw-r--r--ARMeilleure/State/ExecutionContext.cs4
3 files changed, 10 insertions, 0 deletions
diff --git a/ARMeilleure/Instructions/InstEmitSystem.cs b/ARMeilleure/Instructions/InstEmitSystem.cs
index 49973404..c13f0c3e 100644
--- a/ARMeilleure/Instructions/InstEmitSystem.cs
+++ b/ARMeilleure/Instructions/InstEmitSystem.cs
@@ -40,6 +40,7 @@ namespace ARMeilleure.Instructions
case 0b11_011_1101_0000_011: dlg = new _U64(NativeInterface.GetTpidr); break;
case 0b11_011_1110_0000_000: dlg = new _U64(NativeInterface.GetCntfrqEl0); break;
case 0b11_011_1110_0000_001: dlg = new _U64(NativeInterface.GetCntpctEl0); break;
+ case 0b11_011_1110_0000_010: dlg = new _U64(NativeInterface.GetCntvctEl0); break;
default: throw new NotImplementedException($"Unknown MRS 0x{op.RawOpCode:X8} at 0x{op.Address:X16}.");
}
diff --git a/ARMeilleure/Instructions/NativeInterface.cs b/ARMeilleure/Instructions/NativeInterface.cs
index f42dc283..49faab35 100644
--- a/ARMeilleure/Instructions/NativeInterface.cs
+++ b/ARMeilleure/Instructions/NativeInterface.cs
@@ -136,6 +136,11 @@ namespace ARMeilleure.Instructions
return GetContext().CntpctEl0;
}
+ public static ulong GetCntvctEl0()
+ {
+ return GetContext().CntvctEl0;
+ }
+
public static void SetFpcr(ulong value)
{
GetContext().Fpcr = (FPCR)value;
diff --git a/ARMeilleure/State/ExecutionContext.cs b/ARMeilleure/State/ExecutionContext.cs
index 8593f41e..2755122f 100644
--- a/ARMeilleure/State/ExecutionContext.cs
+++ b/ARMeilleure/State/ExecutionContext.cs
@@ -32,6 +32,10 @@ namespace ARMeilleure.State
}
}
+ // CNTVCT_EL0 = CNTPCT_EL0 - CNTVOFF_EL2
+ // Since EL2 isn't implemented, CNTVOFF_EL2 = 0
+ public ulong CntvctEl0 => CntpctEl0;
+
public static TimeSpan ElapsedTime => _tickCounter.Elapsed;
public long TpidrEl0 { get; set; }