aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ARMeilleure/Instructions/InstEmitSimdCvt32.cs10
-rw-r--r--ARMeilleure/Translation/Translator.cs9
2 files changed, 14 insertions, 5 deletions
diff --git a/ARMeilleure/Instructions/InstEmitSimdCvt32.cs b/ARMeilleure/Instructions/InstEmitSimdCvt32.cs
index ba713feb..f3f23958 100644
--- a/ARMeilleure/Instructions/InstEmitSimdCvt32.cs
+++ b/ARMeilleure/Instructions/InstEmitSimdCvt32.cs
@@ -296,27 +296,33 @@ namespace ARMeilleure.Instructions
{
if (op.Op)
{
- // Convert to half
+ // Convert to half.
Operand src = ExtractScalar(context, op.Size == 1 ? OperandType.FP64 : OperandType.FP32, op.Vm);
MethodInfo method = op.Size == 1
? typeof(SoftFloat64_16).GetMethod(nameof(SoftFloat64_16.FPConvert))
: typeof(SoftFloat32_16).GetMethod(nameof(SoftFloat32_16.FPConvert));
+
+ context.StoreToContext();
Operand res = context.Call(method, src);
+ context.LoadFromContext();
InsertScalar16(context, op.Vd, op.T, res);
}
else
{
- // Convert from half
+ // Convert from half.
Operand src = ExtractScalar16(context, op.Vm, op.T);
MethodInfo method = op.Size == 1
? typeof(SoftFloat16_64).GetMethod(nameof(SoftFloat16_64.FPConvert))
: typeof(SoftFloat16_32).GetMethod(nameof(SoftFloat16_32.FPConvert));
+
+ context.StoreToContext();
Operand res = context.Call(method, src);
+ context.LoadFromContext();
InsertScalar(context, op.Vd, res);
}
diff --git a/ARMeilleure/Translation/Translator.cs b/ARMeilleure/Translation/Translator.cs
index ee8e3e8b..c50b1c3d 100644
--- a/ARMeilleure/Translation/Translator.cs
+++ b/ARMeilleure/Translation/Translator.cs
@@ -455,13 +455,16 @@ namespace ARMeilleure.Translation
public void InvalidateJitCacheRegion(ulong address, ulong size)
{
- // If rejit is running, stop it as it may be trying to rejit a function on the invalidated region.
- ClearRejitQueue(allowRequeue: true);
-
ulong[] overlapAddresses = Array.Empty<ulong>();
int overlapsCount = Functions.GetOverlaps(address, size, ref overlapAddresses);
+ if (overlapsCount != 0)
+ {
+ // If rejit is running, stop it as it may be trying to rejit a function on the invalidated region.
+ ClearRejitQueue(allowRequeue: true);
+ }
+
for (int index = 0; index < overlapsCount; index++)
{
ulong overlapAddress = overlapAddresses[index];