Optimize address translation and write tracking on the MMU (#571)

* Implement faster address translation and write tracking on the MMU

* Rename MemoryAlloc to MemoryManagement, and other nits

* Support multi-level page tables

* Fix typo

* Reword comment a bit

* Support scalar vector loads/stores on the memory fast path, and minor fixes

* Add missing cast

* Alignment

* Fix VirtualFree function signature

* Change MemoryProtection enum to uint aswell for consistency
This commit is contained in:
gdkchan 2019-02-24 04:24:35 -03:00 committed by jduncanator
parent a3d46e4133
commit 5001f78b1d
24 changed files with 1005 additions and 621 deletions

View file

@ -95,7 +95,7 @@ namespace ChocolArm64.Memory
int cpuId = getCpuId();
MemoryAlloc.Free(funcPtr);
MemoryManagement.Free(funcPtr);
return (cpuId & (1 << 13)) != 0;
}
@ -104,7 +104,7 @@ namespace ChocolArm64.Memory
{
ulong codeLength = (ulong)code.Length;
IntPtr funcPtr = MemoryAlloc.Allocate(codeLength);
IntPtr funcPtr = MemoryManagement.Allocate(codeLength);
unsafe
{
@ -118,7 +118,7 @@ namespace ChocolArm64.Memory
}
}
MemoryAlloc.Reprotect(funcPtr, codeLength, MemoryProtection.Execute);
MemoryManagement.Reprotect(funcPtr, codeLength, MemoryProtection.Execute);
return funcPtr;
}