|
@@ -134,6 +134,19 @@ u32 vfp_double_normaliseround(ARMul_State* state, int dd, struct vfp_double* vd,
|
|
|
#endif
|
|
#endif
|
|
|
if (!(significand & ((1ULL << (VFP_DOUBLE_LOW_BITS + 1)) - 1)))
|
|
if (!(significand & ((1ULL << (VFP_DOUBLE_LOW_BITS + 1)) - 1)))
|
|
|
underflow = 0;
|
|
underflow = 0;
|
|
|
|
|
+
|
|
|
|
|
+ int type = vfp_double_type(vd);
|
|
|
|
|
+
|
|
|
|
|
+ if ((type & VFP_DENORMAL) && (fpscr & FPSCR_FLUSH_TO_ZERO)) {
|
|
|
|
|
+ // Flush denormal to positive 0
|
|
|
|
|
+ significand = 0;
|
|
|
|
|
+
|
|
|
|
|
+ vd->sign = 0;
|
|
|
|
|
+ vd->significand = significand;
|
|
|
|
|
+
|
|
|
|
|
+ underflow = 0;
|
|
|
|
|
+ exceptions |= FPSCR_UFC;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|