qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 16/22] fpu/softfloat: re-factor round_to_int


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH v3 16/22] fpu/softfloat: re-factor round_to_int
Date: Wed, 24 Jan 2018 09:51:04 -0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2

On 01/24/2018 05:13 AM, Alex Bennée wrote:
> +static FloatParts round_to_int(FloatParts a, int rounding_mode, float_status 
> *s)
> +{
> +
> +    switch (a.cls) {
> +    case float_class_snan:
> +        a.cls = s->default_nan_mode ? float_class_dnan : float_class_msnan;
> +        s->float_exception_flags |= float_flag_invalid;
> +        break;
> +    case float_class_zero:
> +    case float_class_inf:
> +    case float_class_qnan:
> +        /* already "integral" */
> +        break;

This mishandles float_class_qnan + default_nan_mode.
Consider how this would pass though pick_nan_parts(a, a, s).

I suspect a single-argument version of pick_nan_parts would be helpful:

static FloatParts return_nan(FloatParts a, float_status *s)
{
    switch (a.cls) {
    case float_class_snan:
        s->float_exception_flags |= float_flag_invalid;
        a.cls = float_class_msnan;
        /* FALLTHRU */

    case float_class_qnan:
        if (s->default_nan_mode) {
            a.cls = float_class_dnan;
        }
        break;

    default:
        g_assert_not_reached();
    }
}

and use this in round_to_int, scalbn, and sqrt.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]