This patch fixes rounding bug in emulation for double float operating on 
PowerPC platform.

When pack double float operand, it need to truncate the tail due to the limited 
precision.
If the truncated part is not zero, the last bit of work bit (totally 3 bits) 
need to '|' 1.

This patch is completed in _FP_FRAC_SRS_2(X,N,sz) 
(arch/powerpc/math-emu/op-2.h).
Originally the code leftwards rotates the operand to just keep the truncated 
part,
then check whether it is zero. However, the number it rotates is not correct 
when
N is not smaller than _FP_W_TYPE_SIZE, and it will cause the work bit '|' 1 in 
the improper case.

This patch fixes this issue.

Signed-off-by: Liu Yu <[EMAIL PROTECTED]>

---
 arch/powerpc/math-emu/op-2.h |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/math-emu/op-2.h b/arch/powerpc/math-emu/op-2.h
index b9b06b4..7d6f17c 100644
--- a/arch/powerpc/math-emu/op-2.h
+++ b/arch/powerpc/math-emu/op-2.h
@@ -59,7 +59,8 @@
     else                                                               \
       {                                                                        
\
        X##_f0 = (X##_f1 >> ((N) - _FP_W_TYPE_SIZE) |                   \
-                 (((X##_f1 << (sz - (N))) | X##_f0) != 0));            \
+                 (((X##_f1 << (2 * _FP_W_TYPE_SIZE - (N))) |           \
+                  X##_f0) != 0));                                      \
        X##_f1 = 0;                                                     \
       }                                                                        
\
   } while (0)
-- 
1.5.2

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to