On Thu, 27 May 2021 13:14:00 +0900,
Richard Henderson wrote:
> 
> Both input and output denormals flush to zero when DN is set.
> 
> Cc: Philippe Mathieu-Daudé <f4...@amsat.org>
> Cc: Yoshinori Sato <ys...@users.sourceforge.jp>
> Signed-off-by: Richard Henderson <richard.hender...@linaro.org>

Reviewd-by: Yoshinori Sato <ys...@users.sourceforge.jp>

> ---
>  target/rx/op_helper.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/target/rx/op_helper.c b/target/rx/op_helper.c
> index ef904eb5f9..2139def3b2 100644
> --- a/target/rx/op_helper.c
> +++ b/target/rx/op_helper.c
> @@ -127,13 +127,20 @@ void helper_set_fpsw(CPURXState *env, uint32_t val)
>          float_round_down,
>      };
>      uint32_t fpsw = env->fpsw;
> +    bool dn;
> +
>      fpsw |= 0x7fffff03;
>      val &= ~0x80000000;
>      fpsw &= val;
>      FIELD_DP32(fpsw, FPSW, FS, FIELD_EX32(fpsw, FPSW, FLAGS) != 0);
>      env->fpsw = fpsw;
> -    set_float_rounding_mode(roundmode[FIELD_EX32(env->fpsw, FPSW, RM)],
> +
> +    set_float_rounding_mode(roundmode[FIELD_EX32(fpsw, FPSW, RM)],
>                              &env->fp_status);
> +
> +    dn = FIELD_EX32(env->fpsw, FPSW, DN);
> +    set_flush_to_zero(dn, &env->fp_status);
> +    set_flush_inputs_to_zero(dn, &env->fp_status);
>  }
>  
>  #define FLOATOP(op, func)                                           \
> -- 
> 2.25.1
> 
> 

Reply via email to