On 01/06/2014 05:11 AM, Peter Maydell wrote: > We implement a number of float-to-integer conversions using conversion > to an integer type with a wider range and then a check against the > narrower range we are actually converting to. If we find the result to > be out of range we correctly raise the Invalid exception, but we must > also suppress other exceptions which might have been raised by the > conversion function we called. > > This won't throw away exceptions we should have preserved, because for > the 'core' exception flags the IEEE spec mandates that the only valid > combinations of exception that can be raised by a single operation are > Inexact + Overflow and Inexact + Underflow. For the non-IEEE softfloat > flag for input denormals, we can guarantee that that flag won't have > been set for out of range float-to-int conversions because a squashed > denormal by definition goes to plus or minus zero, which is always in > range after conversion to integer zero. > > This bug has been fixed for some of the float-to-int conversion routines > by previous patches; fix it for the remaining functions as well, so > that they all restore the pre-conversion status flags prior to raising > Invalid. > > Signed-off-by: Peter Maydell <peter.maydell@xxxxxxxxxx> > Reviewed-by: Aurelien Jarno <aurelien@xxxxxxxxxxx> > --- > fpu/softfloat.c | 28 ++++++++++++++++------------ > 1 file changed, 16 insertions(+), 12 deletions(-) Reviewed-by: Richard Henderson <rth@xxxxxxxxxxx> r~ _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm