Misc. CPU improvements (#519)
* Fix and simplify TranslatorCache * Fix some assignment alignments, remove some unused usings * Changes to ILEmitter, separate it from ILEmitterCtx * Rename ILEmitter to ILMethodBuilder * Rename LdrLit and *_Fix opcodes * Revert TranslatorCache impl to the more performant one, fix a few issues with it * Allow EmitOpCode to be called even after everything has been emitted * Make Emit and AdvanceOpCode private, simplify it a bit now that it starts emiting from the entry point * Remove unneeded temp use * Add missing exit call on TestExclusive * Use better hash * Implement the == and != operators
This commit is contained in:
parent
f1529b1bc2
commit
36e8e074c9
41 changed files with 943 additions and 915 deletions
|
@ -9,8 +9,8 @@ namespace ChocolArm64
|
|||
{
|
||||
class TranslatorCache
|
||||
{
|
||||
//Maximum size of the cache, in bytes, measured in ARM code size.
|
||||
private const int MaxTotalSize = 4 * 1024 * 256;
|
||||
//Maximum size of the cache, the unit used is completely arbitrary.
|
||||
private const int MaxTotalSize = 0x800000;
|
||||
|
||||
//Minimum time required in milliseconds for a method to be eligible for deletion.
|
||||
private const int MinTimeDelta = 2 * 60000;
|
||||
|
@ -63,10 +63,10 @@ namespace ChocolArm64
|
|||
{
|
||||
ClearCacheIfNeeded();
|
||||
|
||||
_totalSize += size;
|
||||
|
||||
lock (_sortedCache)
|
||||
{
|
||||
_totalSize += size;
|
||||
|
||||
LinkedListNode<long> node = _sortedCache.AddLast(position);
|
||||
|
||||
CacheBucket newBucket = new CacheBucket(subroutine, node, size);
|
||||
|
@ -98,11 +98,18 @@ namespace ChocolArm64
|
|||
{
|
||||
try
|
||||
{
|
||||
bucket.CallCount = 0;
|
||||
//The bucket value on the dictionary may have changed between the
|
||||
//time we get the value from the dictionary, and we acquire the
|
||||
//lock. So we need to ensure we are working with the latest value,
|
||||
//we can do that by getting the value again, inside the lock.
|
||||
if (_cache.TryGetValue(position, out CacheBucket latestBucket))
|
||||
{
|
||||
latestBucket.CallCount = 0;
|
||||
|
||||
_sortedCache.Remove(bucket.Node);
|
||||
_sortedCache.Remove(latestBucket.Node);
|
||||
|
||||
bucket.UpdateNode(_sortedCache.AddLast(position));
|
||||
latestBucket.UpdateNode(_sortedCache.AddLast(position));
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue