aboutsummaryrefslogtreecommitdiff
path: root/ARMeilleure/Instructions/SoftFloat.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ARMeilleure/Instructions/SoftFloat.cs')
-rw-r--r--ARMeilleure/Instructions/SoftFloat.cs28
1 files changed, 28 insertions, 0 deletions
diff --git a/ARMeilleure/Instructions/SoftFloat.cs b/ARMeilleure/Instructions/SoftFloat.cs
index d3e15a2c..ec66bb86 100644
--- a/ARMeilleure/Instructions/SoftFloat.cs
+++ b/ARMeilleure/Instructions/SoftFloat.cs
@@ -903,6 +903,13 @@ namespace ARMeilleure.Instructions
else
{
result = value1;
+
+ if ((fpcr & FPCR.Fz) != 0 && float.IsSubnormal(result))
+ {
+ context.Fpsr |= FPSR.Ufc;
+
+ result = FPZero(result < 0f);
+ }
}
}
else
@@ -987,6 +994,13 @@ namespace ARMeilleure.Instructions
else
{
result = value1;
+
+ if ((fpcr & FPCR.Fz) != 0 && float.IsSubnormal(result))
+ {
+ context.Fpsr |= FPSR.Ufc;
+
+ result = FPZero(result < 0f);
+ }
}
}
else
@@ -2196,6 +2210,13 @@ namespace ARMeilleure.Instructions
else
{
result = value1;
+
+ if ((fpcr & FPCR.Fz) != 0 && double.IsSubnormal(result))
+ {
+ context.Fpsr |= FPSR.Ufc;
+
+ result = FPZero(result < 0d);
+ }
}
}
else
@@ -2280,6 +2301,13 @@ namespace ARMeilleure.Instructions
else
{
result = value1;
+
+ if ((fpcr & FPCR.Fz) != 0 && double.IsSubnormal(result))
+ {
+ context.Fpsr |= FPSR.Ufc;
+
+ result = FPZero(result < 0d);
+ }
}
}
else