aboutsummaryrefslogtreecommitdiff
path: root/ARMeilleure/Instructions
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2022-02-17 22:53:18 -0300
committerGitHub <noreply@github.com>2022-02-18 02:53:18 +0100
commit92d166ecb7e5b29a27bffd77754d8e592435ee6b (patch)
tree0c3d078c1487d6d596ed45deacca29c7d2d7d300 /ARMeilleure/Instructions
parent72e543e946610dc80e3d52290e4bea837097a070 (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.cs12
-rw-r--r--ARMeilleure/Instructions/NativeInterface.cs5
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();