ARM exclusive monitor and multicore fixes (#589)
* Implement ARM exclusive load/store with compare exchange insts, and enable multicore by default * Fix comment typo * Support Linux and OSX on MemoryAlloc and CompareExchange128, some cleanup * Use intel syntax on assembly code * Adjust identation * Add CPUID check and fix exclusive reservation granule size * Update schema multicore scheduling default value * Make the cpu id check code lower case aswell
This commit is contained in:
parent
dd00a4b62d
commit
932224f051
19 changed files with 954 additions and 261 deletions
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue