diff options
author | gdkchan <gab.dark.100@gmail.com> | 2022-02-17 22:53:18 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-18 02:53:18 +0100 |
commit | 92d166ecb7e5b29a27bffd77754d8e592435ee6b (patch) | |
tree | 0c3d078c1487d6d596ed45deacca29c7d2d7d300 /ARMeilleure/Instructions | |
parent | 72e543e946610dc80e3d52290e4bea837097a070 (diff) |
Enable CPU JIT cache invalidation (#2965)1.1.44
* Enable CPU JIT cache invalidation
* Invalidate cache on IC IVAU
Diffstat (limited to 'ARMeilleure/Instructions')
-rw-r--r-- | ARMeilleure/Instructions/InstEmitSystem.cs | 12 | ||||
-rw-r--r-- | ARMeilleure/Instructions/NativeInterface.cs | 5 |
2 files changed, 14 insertions, 3 deletions
diff --git a/ARMeilleure/Instructions/InstEmitSystem.cs b/ARMeilleure/Instructions/InstEmitSystem.cs index 60c71f96..499f1648 100644 --- a/ARMeilleure/Instructions/InstEmitSystem.cs +++ b/ARMeilleure/Instructions/InstEmitSystem.cs @@ -12,7 +12,8 @@ namespace ARMeilleure.Instructions { static partial class InstEmit { - private const int DczSizeLog2 = 4; + private const int DczSizeLog2 = 4; // Log2 size in words + public const int DczSizeInBytes = 4 << DczSizeLog2; public static void Hint(ArmEmitterContext context) { @@ -87,7 +88,7 @@ namespace ARMeilleure.Instructions // DC ZVA Operand t = GetIntOrZR(context, op.Rt); - for (long offset = 0; offset < (4 << DczSizeLog2); offset += 8) + for (long offset = 0; offset < DczSizeInBytes; offset += 8) { Operand address = context.Add(t, Const(offset)); @@ -98,7 +99,12 @@ namespace ARMeilleure.Instructions } // No-op - case 0b11_011_0111_1110_001: //DC CIVAC + case 0b11_011_0111_1110_001: // DC CIVAC + break; + + case 0b11_011_0111_0101_001: // IC IVAU + Operand target = Register(op.Rt, RegisterType.Integer, OperandType.I64); + context.Call(typeof(NativeInterface).GetMethod(nameof(NativeInterface.InvalidateCacheLine)), target); break; } } diff --git a/ARMeilleure/Instructions/NativeInterface.cs b/ARMeilleure/Instructions/NativeInterface.cs index 02a22fa6..0b76f681 100644 --- a/ARMeilleure/Instructions/NativeInterface.cs +++ b/ARMeilleure/Instructions/NativeInterface.cs @@ -242,6 +242,11 @@ namespace ARMeilleure.Instructions return (ulong)function.FuncPtr.ToInt64(); } + public static void InvalidateCacheLine(ulong address) + { + Context.Translator.InvalidateJitCacheRegion(address, InstEmit.DczSizeInBytes); + } + public static bool CheckSynchronization() { Statistics.PauseTimer(); |