qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Tom Musta <tommusta@gmail.com>, qemu-devel@nongnu.org
Cc: agraf@suse.de
Subject: Re: [Qemu-devel] [PATCH 11/14] ppc: store CR registers in 32 1-bit registers
Date: Fri, 19 Sep 2014 15:53:14 +0200	[thread overview]
Message-ID: <541C354A.2040109@redhat.com> (raw)
In-Reply-To: <541B3FD7.3090605@gmail.com>

Il 18/09/2014 22:25, Tom Musta ha scritto:
> This breaks what you did in patch 5, which used LE bit numbering to
> perform shifts.

Yeah, I change "1 << x" to "8 >> x" in this patch for the fcmp
helpers, but not the others.

> And it breaks other code that uses the old LE
> convention.

I'll fix it like this:

git diff target-ppc/fpu_helper.c
diff --git a/target-ppc/fpu_helper.c b/target-ppc/fpu_helper.c
index da93d12..06e4559 100644
--- a/target-ppc/fpu_helper.c
+++ b/target-ppc/fpu_helper.c
@@ -1018,32 +1018,32 @@ uint32_t helper_ftdiv(uint64_t fra, uint64_t frb)
     if (unlikely(float64_is_infinity(fra) ||
                  float64_is_infinity(frb) ||
                  float64_is_zero(frb))) {
-        fe_flag = 1;
-        fg_flag = 1;
+        fe_flag = 8 >> CRF_EQ;
+        fg_flag = 8 >> CRF_GT;
     } else {
         int e_a = ppc_float64_get_unbiased_exp(fra);
         int e_b = ppc_float64_get_unbiased_exp(frb);
 
         if (unlikely(float64_is_any_nan(fra) ||
                      float64_is_any_nan(frb))) {
-            fe_flag = 1;
+            fe_flag = 8 >> CRF_EQ;
         } else if ((e_b <= -1022) || (e_b >= 1021)) {
-            fe_flag = 1;
+            fe_flag = 8 >> CRF_EQ;
         } else if (!float64_is_zero(fra) &&
                    (((e_a - e_b) >= 1023) ||
                     ((e_a - e_b) <= -1021) ||
                     (e_a <= -970))) {
-            fe_flag = 1;
+            fe_flag = 8 >> CRF_EQ;
         }
 
         if (unlikely(float64_is_zero_or_denormal(frb))) {
             /* XB is not zero because of the above check and */
             /* so must be denormalized.                      */
-            fg_flag = 1;
+            fg_flag = 8 >> CRF_GT;
         }
     }
 
-    return 0x8 | (fg_flag ? 4 : 0) | (fe_flag ? 2 : 0);
+    return (8 >> CRF_LT) | fg_flag | fe_flag;
 }
 
 uint32_t helper_ftsqrt(uint64_t frb)

and similarly for ftsqrt.

Paolo

> There are some other places in helper where env->crf[*] was still being set.  Here are the ones that I found:
> 
> diff --git a/target-ppc/fpu_helper.c b/target-ppc/fpu_helper.c
> index 3f656e5..e624f97 100644
> --- a/target-ppc/fpu_helper.c
> +++ b/target-ppc/fpu_helper.c
> @@ -2141,7 +2141,8 @@ void helper_##op(CPUPPCState *env, uint32_t opcode)                     \
>          }                                                               \
>      }                                                                   \
>                                                                          \
> -    env->crf[BF(opcode)] = 0x8 | (fg_flag ? 4 : 0) | (fe_flag ? 2 : 0); \
> +    ppc_set_crf(env, BF(opcode),                                        \
> +                0x8 | (fg_flag ? 4 : 0) | (fe_flag ? 2 : 0));           \
>  }
> 
>  VSX_TDIV(xstdivdp, 1, float64, VsrD(0), -1022, 1023, 52)
> @@ -2195,7 +2196,8 @@ void helper_##op(CPUPPCState *env, uint32_t opcode)                     \
>          }                                                               \
>      }                                                                   \
>                                                                          \
> -    env->crf[BF(opcode)] = 0x8 | (fg_flag ? 4 : 0) | (fe_flag ? 2 : 0); \
> +    ppc_set_crf(env, BF(opcode),                                        \
> +                0x8 | (fg_flag ? 4 : 0) | (fe_flag ? 2 : 0));           \
>  }
> 
>  VSX_TSQRT(xstsqrtdp, 1, float64, VsrD(0), -1022, 52)
> @@ -2358,7 +2360,7 @@ void helper_##op(CPUPPCState *env, uint32_t opcode)                      \
>                                                                           \
>      env->fpscr &= ~(0x0F << FPSCR_FPRF);                                 \
>      env->fpscr |= cc << FPSCR_FPRF;                                      \
> -    env->crf[BF(opcode)] = cc;                                           \
> +    ppc_set_crf(env, BF(opcode), cc);                                   \
>                                                                           \
>      helper_float_check_status(env);                                      \
>  }
> @@ -2450,7 +2452,8 @@ void helper_##op(CPUPPCState *env, uint32_t opcode)                       \
>                                                                            \
>      putVSR(xT(opcode), &xt, env);                                         \
>      if ((opcode >> (31-21)) & 1) {                                        \
> -        env->crf[6] = (all_true ? 0x8 : 0) | (all_false ? 0x2 : 0);       \
> +        ppc_set_crf(env, 6,                                               \
> +                    (all_true ? 0x8 : 0) | (all_false ? 0x2 : 0));        \
>      }                                                                     \
>      helper_float_check_status(env);                                       \
>   }
> 
> 
> 
> Note that I do not have the capability of testing any of the SPE instructions.
> 

  reply	other threads:[~2014-09-19 13:53 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-15 15:03 [Qemu-devel] [PATCH v2 00/14] TCG ppc speedups Paolo Bonzini
2014-09-15 15:03 ` [Qemu-devel] [PATCH 01/14] ppc: do not look at the MMU index to detect PR/HV mode Paolo Bonzini
2014-09-15 15:03 ` [Qemu-devel] [PATCH 02/14] softmmu: support up to 12 MMU modes Paolo Bonzini
2014-09-15 15:03 ` [Qemu-devel] [PATCH 03/14] target-ppc: use separate indices for various translation modes Paolo Bonzini
2014-09-16 17:20   ` Tom Musta
2014-09-16 18:02     ` Richard Henderson
2014-09-16 18:27       ` Paolo Bonzini
2014-09-16 18:41         ` Richard Henderson
2014-09-16 22:23           ` Richard Henderson
2014-09-17  6:22             ` Paolo Bonzini
2014-09-17  8:53               ` Paolo Bonzini
2014-09-17 15:33                 ` Richard Henderson
2014-09-17 15:50                   ` Paolo Bonzini
2014-09-17 15:55                     ` Richard Henderson
2014-09-16 18:49     ` Peter Maydell
2014-09-16 22:13       ` Richard Henderson
2014-09-15 15:03 ` [Qemu-devel] [PATCH 04/14] ppc: introduce ppc_get_cr and ppc_set_cr Paolo Bonzini
2014-09-18 19:24   ` Tom Musta
2014-09-15 15:03 ` [Qemu-devel] [PATCH 05/14] ppc: use CRF_* in fpu_helper.c Paolo Bonzini
2014-09-15 15:03 ` [Qemu-devel] [PATCH 06/14] ppc: introduce helpers for mfocrf/mtocrf Paolo Bonzini
2014-09-18 19:32   ` Tom Musta
2014-09-18 21:01   ` Richard Henderson
2014-09-15 15:03 ` [Qemu-devel] [PATCH 07/14] ppc: reorganize gen_compute_fprf Paolo Bonzini
2014-09-18 19:48   ` Tom Musta
2014-09-15 15:03 ` [Qemu-devel] [PATCH 08/14] ppc: introduce gen_op_mfcr/gen_op_mtcr Paolo Bonzini
2014-09-18 19:49   ` Tom Musta
2014-09-18 21:38   ` Richard Henderson
2014-09-19 13:31     ` Paolo Bonzini
2014-09-15 15:03 ` [Qemu-devel] [PATCH 09/14] ppc: introduce ppc_get_crf and ppc_set_crf Paolo Bonzini
2014-09-18 19:51   ` Tom Musta
2014-09-19 14:52     ` Paolo Bonzini
2014-09-15 15:03 ` [Qemu-devel] [PATCH 10/14] ppc: use movcond for isel Paolo Bonzini
2014-09-18 20:05   ` Tom Musta
2014-09-15 15:03 ` [Qemu-devel] [PATCH 11/14] ppc: store CR registers in 32 1-bit registers Paolo Bonzini
2014-09-18 20:25   ` Tom Musta
2014-09-19 13:53     ` Paolo Bonzini [this message]
2014-09-15 15:03 ` [Qemu-devel] [PATCH 12/14] ppc: use movcond to implement evsel Paolo Bonzini
2014-09-15 15:03 ` [Qemu-devel] [PATCH 13/14] ppc: inline ppc_set_crf when clearer Paolo Bonzini
2014-09-18 20:33   ` Tom Musta
2014-09-19 13:51     ` Paolo Bonzini
2014-09-15 15:03 ` [Qemu-devel] [PATCH 14/14] ppc: dump all 32 CR bits Paolo Bonzini
2014-09-18 20:43 ` [Qemu-devel] [PATCH v2 00/14] TCG ppc speedups Tom Musta
2014-09-19 15:16   ` Paolo Bonzini
2014-11-03 11:56 ` Alexander Graf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=541C354A.2040109@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=agraf@suse.de \
    --cc=qemu-devel@nongnu.org \
    --cc=tommusta@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).