Re: [Qemu-devel] [PATCH 2/6] target/arm: Ignore float_flag_input_denormal from fp_status_f16

2018-08-11 Thread Laurent Desnogues
On Fri, Aug 10, 2018 at 9:31 PM, Richard Henderson
 wrote:
> When FZ is set, input_denormal exceptions are recognized, but this does
> not happen with FZ16.  The softfloat code has no way to distinguish
> these bits and will raise such exceptions into fp_status_f16.flags,
> so ignore them when computing the accumulated flags.
>
> Cc: qemu-sta...@nongnu.org (3.0.1)
> Reported-by: Laurent Desnogues 
> Signed-off-by: Richard Henderson 

Tested-by: Laurent Desnogues 
Reviewed-by: Laurent Desnogues 

Laurent

> ---
>  target/arm/helper.c | 6 +-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/target/arm/helper.c b/target/arm/helper.c
> index 452d5e182a..61454a77ec 100644
> --- a/target/arm/helper.c
> +++ b/target/arm/helper.c
> @@ -11314,9 +11314,13 @@ uint32_t HELPER(vfp_get_fpscr)(CPUARMState *env)
>  fpscr = (env->vfp.xregs[ARM_VFP_FPSCR] & 0xffc8)
>  | (env->vfp.vec_len << 16)
>  | (env->vfp.vec_stride << 20);
> +
>  i = get_float_exception_flags(>vfp.fp_status);
>  i |= get_float_exception_flags(>vfp.standard_fp_status);
> -i |= get_float_exception_flags(>vfp.fp_status_f16);
> +/* FZ16 does not generate an input denormal exception.  */
> +i |= (get_float_exception_flags(>vfp.fp_status_f16)
> +  & ~float_flag_input_denormal);
> +
>  fpscr |= vfp_exceptbits_from_host(i);
>  return fpscr;
>  }
> --
> 2.17.1
>



[Qemu-devel] [PATCH 2/6] target/arm: Ignore float_flag_input_denormal from fp_status_f16

2018-08-10 Thread Richard Henderson
When FZ is set, input_denormal exceptions are recognized, but this does
not happen with FZ16.  The softfloat code has no way to distinguish
these bits and will raise such exceptions into fp_status_f16.flags,
so ignore them when computing the accumulated flags.

Cc: qemu-sta...@nongnu.org (3.0.1)
Reported-by: Laurent Desnogues 
Signed-off-by: Richard Henderson 
---
 target/arm/helper.c | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/target/arm/helper.c b/target/arm/helper.c
index 452d5e182a..61454a77ec 100644
--- a/target/arm/helper.c
+++ b/target/arm/helper.c
@@ -11314,9 +11314,13 @@ uint32_t HELPER(vfp_get_fpscr)(CPUARMState *env)
 fpscr = (env->vfp.xregs[ARM_VFP_FPSCR] & 0xffc8)
 | (env->vfp.vec_len << 16)
 | (env->vfp.vec_stride << 20);
+
 i = get_float_exception_flags(>vfp.fp_status);
 i |= get_float_exception_flags(>vfp.standard_fp_status);
-i |= get_float_exception_flags(>vfp.fp_status_f16);
+/* FZ16 does not generate an input denormal exception.  */
+i |= (get_float_exception_flags(>vfp.fp_status_f16)
+  & ~float_flag_input_denormal);
+
 fpscr |= vfp_exceptbits_from_host(i);
 return fpscr;
 }
-- 
2.17.1