diff mbox series

target/ppc: Set float_tininess_before_rounding at cpu reset

Message ID 20190827020013.27154-1-richard.henderson@linaro.org
State Superseded
Headers show
Series target/ppc: Set float_tininess_before_rounding at cpu reset | expand

Commit Message

Richard Henderson Aug. 27, 2019, 2 a.m. UTC
As defined in Power 3.0 section 4.4.4 "Underflow Exception",
a tiny result is detected before rounding.

Fixes: https://bugs.launchpad.net/qemu/+bug/1841491
Reported-by: Paul Clarke <pc@us.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

---
 target/ppc/translate_init.inc.c | 4 ++++
 1 file changed, 4 insertions(+)

-- 
2.17.1

Comments

David Gibson Aug. 27, 2019, 3:41 a.m. UTC | #1
On Mon, Aug 26, 2019 at 07:00:13PM -0700, Richard Henderson wrote:
> As defined in Power 3.0 section 4.4.4 "Underflow Exception",

> a tiny result is detected before rounding.

> 

> Fixes: https://bugs.launchpad.net/qemu/+bug/1841491

> Reported-by: Paul Clarke <pc@us.ibm.com>

> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>


Applied to ppc-for-4.2, thanks.

> ---

>  target/ppc/translate_init.inc.c | 4 ++++

>  1 file changed, 4 insertions(+)

> 

> diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c

> index 4a21ed7289..023138c2f9 100644

> --- a/target/ppc/translate_init.inc.c

> +++ b/target/ppc/translate_init.inc.c

> @@ -10461,6 +10461,10 @@ static void ppc_cpu_reset(CPUState *s)

>      s->exception_index = POWERPC_EXCP_NONE;

>      env->error_code = 0;

>  

> +    /* tininess for underflow is detected before rounding */

> +    set_float_detect_tininess(float_tininess_before_rounding,

> +                              &env->fp_status);

> +

>      for (i = 0; i < ARRAY_SIZE(env->spr_cb); i++) {

>          ppc_spr_t *spr = &env->spr_cb[i];

>  


-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson
Paul Clarke Aug. 27, 2019, 4:13 a.m. UTC | #2
On 8/26/19 9:00 PM, Richard Henderson wrote:
> As defined in Power 3.0 section 4.4.4 "Underflow Exception",

> a tiny result is detected before rounding.


Responded in the bug:
https://bugs.launchpad.net/qemu/+bug/1841491/comments/3

In my testing, this works for "double", but not "float".

> Fixes: https://bugs.launchpad.net/qemu/+bug/1841491 

> Reported-by: Paul Clarke <pc@us.ibm.com>

> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

> ---

>  target/ppc/translate_init.inc.c | 4 ++++

>  1 file changed, 4 insertions(+)

> 

> diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c

> index 4a21ed7289..023138c2f9 100644

> --- a/target/ppc/translate_init.inc.c

> +++ b/target/ppc/translate_init.inc.c

> @@ -10461,6 +10461,10 @@ static void ppc_cpu_reset(CPUState *s)

>      s->exception_index = POWERPC_EXCP_NONE;

>      env->error_code = 0;

>  

> +    /* tininess for underflow is detected before rounding */

> +    set_float_detect_tininess(float_tininess_before_rounding,

> +                              &env->fp_status);

> +

>      for (i = 0; i < ARRAY_SIZE(env->spr_cb); i++) {

>          ppc_spr_t *spr = &env->spr_cb[i];


PC
diff mbox series

Patch

diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c
index 4a21ed7289..023138c2f9 100644
--- a/target/ppc/translate_init.inc.c
+++ b/target/ppc/translate_init.inc.c
@@ -10461,6 +10461,10 @@  static void ppc_cpu_reset(CPUState *s)
     s->exception_index = POWERPC_EXCP_NONE;
     env->error_code = 0;
 
+    /* tininess for underflow is detected before rounding */
+    set_float_detect_tininess(float_tininess_before_rounding,
+                              &env->fp_status);
+
     for (i = 0; i < ARRAY_SIZE(env->spr_cb); i++) {
         ppc_spr_t *spr = &env->spr_cb[i];