Author: mhorne
Date: Mon Jun 29 19:30:35 2020
New Revision: 362788
URL: https://svnweb.freebsd.org/changeset/base/362788

Log:
  Fix printf(3) output of long doubles on RISC-V
  
  When the RISC-V port was initially committed to FreeBSD, GCC would
  generate 64-bit long doubles, and the definitions in _fpmath.h reflected
  that. This was changed to 128-bit in GCC later that year [1], but the
  definitions were never updated, despite the documented workaround. This
  causes printf(3) and friends to interpret only the low 64-bits of a long
  double in ldtoa, thereby printing incorrect values.
  
  Update the definitions now that both clang and GCC generate 128-bit long
  doubles.
  
  [1] 
https://github.com/riscv/riscv-gcc/commit/54b21fc5ae83cefec44bc2caed4a8c664c274ba0
  
  PR:           242067
  Reported by:  Dennis Clarke <dcla...@blastwave.org>
  MFC after:    1 week
  Differential Revision:        https://reviews.freebsd.org/D25420

Modified:
  head/lib/libc/riscv/_fpmath.h

Modified: head/lib/libc/riscv/_fpmath.h
==============================================================================
--- head/lib/libc/riscv/_fpmath.h       Mon Jun 29 18:06:00 2020        
(r362787)
+++ head/lib/libc/riscv/_fpmath.h       Mon Jun 29 19:30:35 2020        
(r362788)
@@ -46,19 +46,6 @@ union IEEEl2bits {
 #define        LDBL_IMPLICIT_NBIT
 #define        mask_nbit_l(u)  ((void)0)
 
-#define        LDBL_MANH_SIZE  20
-#define        LDBL_MANL_SIZE  32
-
-#define        LDBL_TO_ARRAY32(u, a) do {                      \
-       (a)[0] = (uint32_t)(u).bits.manl;               \
-       (a)[1] = (uint32_t)(u).bits.manh;               \
-} while(0)
-
-/*
- * TODO: Due to compiler problem we are temporary using
- * LDBL_PREC == 53. Use code below for LDBL_PREC == 113
- */
-#if 0
 #define        LDBL_MANH_SIZE  48
 #define        LDBL_MANL_SIZE  64
 
@@ -68,4 +55,3 @@ union IEEEl2bits {
        (a)[2] = (uint32_t)(u).bits.manh;               \
        (a)[3] = (uint32_t)((u).bits.manh >> 32);       \
 } while(0)
-#endif
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to