Merge pull request #2692 from Subv/vfp_ftz
Dyncom/VFP: Convert denormal outputs into 0 when the FTZ flag is enabled.
This commit is contained in:
		| @@ -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; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* |     /* | ||||||
|   | |||||||
| @@ -137,6 +137,19 @@ u32 vfp_single_normaliseround(ARMul_State* state, int sd, struct vfp_single* vs, | |||||||
| #endif | #endif | ||||||
|         if (!(significand & ((1 << (VFP_SINGLE_LOW_BITS + 1)) - 1))) |         if (!(significand & ((1 << (VFP_SINGLE_LOW_BITS + 1)) - 1))) | ||||||
|             underflow = 0; |             underflow = 0; | ||||||
|  |  | ||||||
|  |         int type = vfp_single_type(vs); | ||||||
|  |  | ||||||
|  |         if ((type & VFP_DENORMAL) && (fpscr & FPSCR_FLUSH_TO_ZERO)) { | ||||||
|  |             // Flush denormal to positive 0 | ||||||
|  |             significand = 0; | ||||||
|  |  | ||||||
|  |             vs->sign = 0; | ||||||
|  |             vs->significand = significand; | ||||||
|  |  | ||||||
|  |             underflow = 0; | ||||||
|  |             exceptions |= FPSCR_UFC; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* |     /* | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user