diff mbox series

[2/2] fixup! target/ppc: Use non-arithmetic conversions for fp load/store

Message ID 20180806012723.5639-3-richard.henderson@linaro.org
State New
Headers show
Series target/ppc: Fixes for my fpu cleanups | expand

Commit Message

Richard Henderson Aug. 6, 2018, 1:27 a.m. UTC
---
 target/ppc/fpu_helper.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

-- 
2.17.1
diff mbox series

Patch

diff --git a/target/ppc/fpu_helper.c b/target/ppc/fpu_helper.c
index faea64020b..b9bb1b856e 100644
--- a/target/ppc/fpu_helper.c
+++ b/target/ppc/fpu_helper.c
@@ -61,7 +61,7 @@  uint64_t helper_todouble(uint32_t arg)
         /* Normalized operand, or Inf, or NaN.  */
         ret  = (uint64_t)extract32(arg, 30, 2) << 62;
         ret |= ((extract32(arg, 30, 1) ^ 1) * (uint64_t)7) << 59;
-        ret |= (uint64_t)extract32(arg, 0, 29) << 29;
+        ret |= (uint64_t)extract32(arg, 0, 30) << 29;
     } else {
         /* Zero or Denormalized operand.  */
         ret = (uint64_t)extract32(arg, 31, 1) << 63;
@@ -88,14 +88,14 @@  uint32_t helper_tosingle(uint64_t arg)
     if (likely(exp > 896)) {
         /* No denormalization required (includes Inf, NaN).  */
         ret  = extract64(arg, 62, 2) << 30;
-        ret |= extract64(arg, 29, 29);
+        ret |= extract64(arg, 29, 30);
     } else {
         /* Zero or Denormal result.  If the exponent is in bounds for
          * a single-precision denormal result, extract the proper bits.
          * If the input is not zero, and the exponent is out of bounds,
          * then the result is undefined; this underflows to zero.
          */
-        ret = extract64(arg, 63, 1) << 63;
+        ret = extract64(arg, 63, 1) << 31;
         if (unlikely(exp >= 874)) {
             /* Denormal result.  */
             ret |= ((1ULL << 52) | extract64(arg, 0, 52)) >> (896 + 30 - exp);