All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tom Musta <tommusta@gmail.com>
To: qemu-devel@nongnu.org
Cc: Tom Musta <tommusta@gmail.com>, qemu-ppc@nongnu.org
Subject: [Qemu-devel] [PATCH] target-ppc: Bug: VSX Convert to Integer Should Truncate
Date: Sun, 23 Mar 2014 13:02:48 -0500	[thread overview]
Message-ID: <1395597768-3159-1-git-send-email-tommusta@gmail.com> (raw)

The various VSX Convert to Integer instructions should truncate the
mantissa.  This fix forces the softfloat rounding mode to "round to
zero" prior to performing the conversion.  After the conversion is
completed, the internal rounding mode is restored from the PowerPC
FPSCR bits.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
This bug was discovered when running wget, which does this:

    double maxtime;
    struct timeval tmout;
    ...
    tmout.tv_usec = 1000000 * (maxtime - (long) maxtime);

The newest PowerPC 64-bit gcc's are now using xscvdpsxds to perform the cast of 
the double to long.  A timeout of 0.95 was erroneously rounding up to 1 and
hence computing a negative timeout value.

It would be great if we could still get this into 2.0.
  
 target-ppc/fpu_helper.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/target-ppc/fpu_helper.c b/target-ppc/fpu_helper.c
index e7f3295..ccfc5cc 100644
--- a/target-ppc/fpu_helper.c
+++ b/target-ppc/fpu_helper.c
@@ -2558,10 +2558,14 @@ void helper_##op(CPUPPCState *env, uint32_t opcode)                          \
             fload_invalid_op_excp(env, POWERPC_EXCP_FP_VXCVI, 0);            \
             xt.tfld = rnan;                                                  \
         } else {                                                             \
+            /* force round to zero mode (truncation) */                      \
+            set_float_rounding_mode(float_round_to_zero, &env->fp_status);   \
             xt.tfld = stp##_to_##ttp(xb.sfld, &env->fp_status);              \
             if (env->fp_status.float_exception_flags & float_flag_invalid) { \
                 fload_invalid_op_excp(env, POWERPC_EXCP_FP_VXCVI, 0);        \
             }                                                                \
+            /* restore rounding mode from FPSCR */                           \
+            fpscr_set_rounding_mode(env);                                    \
         }                                                                    \
     }                                                                        \
                                                                              \
-- 
1.7.1

             reply	other threads:[~2014-03-23 18:03 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-23 18:02 Tom Musta [this message]
2014-03-23 18:21 ` [Qemu-devel] [PATCH] target-ppc: Bug: VSX Convert to Integer Should Truncate Peter Maydell
2014-03-23 21:52   ` [Qemu-devel] [V2 PATCH] " Tom Musta
2014-03-25 18:06     ` Peter Maydell
2014-03-25 21:26       ` Tom Musta
2014-03-26 15:05       ` Tom Musta
2014-03-26 16:41         ` Richard Henderson

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=1395597768-3159-1-git-send-email-tommusta@gmail.com \
    --to=tommusta@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.