aboutsummaryrefslogtreecommitdiff
path: root/ChocolArm64/State/CpuThreadState.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ChocolArm64/State/CpuThreadState.cs')
-rw-r--r--ChocolArm64/State/CpuThreadState.cs31
1 files changed, 30 insertions, 1 deletions
diff --git a/ChocolArm64/State/CpuThreadState.cs b/ChocolArm64/State/CpuThreadState.cs
index abec60bb..caf73deb 100644
--- a/ChocolArm64/State/CpuThreadState.cs
+++ b/ChocolArm64/State/CpuThreadState.cs
@@ -37,7 +37,6 @@ namespace ChocolArm64.State
public int ElrHyp;
public bool Running { get; set; }
- public int Core { get; set; }
private bool _interrupted;
@@ -85,6 +84,16 @@ namespace ChocolArm64.State
internal Translator CurrentTranslator;
+ private ulong _exclusiveAddress;
+
+ internal ulong ExclusiveValueLow { get; set; }
+ internal ulong ExclusiveValueHigh { get; set; }
+
+ public CpuThreadState()
+ {
+ ClearExclusiveAddress();
+ }
+
static CpuThreadState()
{
_hostTickFreq = 1.0 / Stopwatch.Frequency;
@@ -94,6 +103,26 @@ namespace ChocolArm64.State
_tickCounter.Start();
}
+ internal void SetExclusiveAddress(ulong address)
+ {
+ _exclusiveAddress = GetMaskedExclusiveAddress(address);
+ }
+
+ internal bool CheckExclusiveAddress(ulong address)
+ {
+ return GetMaskedExclusiveAddress(address) == _exclusiveAddress;
+ }
+
+ internal void ClearExclusiveAddress()
+ {
+ _exclusiveAddress = ulong.MaxValue;
+ }
+
+ private ulong GetMaskedExclusiveAddress(ulong address)
+ {
+ return address & ~((4UL << ErgSizeLog2) - 1);
+ }
+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal bool Synchronize(int bbWeight)
{