• P
    softfloat: Only raise Invalid when conversions to int are out of range · f2e933d2
    Peter Maydell 提交于
    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: NPeter Maydell <peter.maydell@linaro.org>
    Reviewed-by: NAurelien Jarno <aurelien@aurel32.net>
    Reviewed-by: NRichard Henderson <rth@twiddle.net>
    f2e933d2
softfloat.c 251.9 KB