Date: Tue, 2 Jun 2026 21:16:43 +0200 From: Piotr Kubaj <pkubaj@FreeBSD.org> To: freebsd-ppc@freebsd.org Subject: Proposal to switch powerpc64le to IEEE-754 binary128 Message-ID: <ah8sFn_mmGrJp9Ru@talos-powerpc64le> Resent-Message-ID: <ah83SIPl4yaX1cEU@talos-powerpc64le>
index | next in thread | raw e-mail
[-- Attachment #1 --] Hello, as you may know, FreeBSD currently uses 64-bit long double. Since plain double is also 64-bit, long double actually gives no advantage over double and is actually the same type. However, we can do better, at least on powerpc64le. On Linux with glibc, many distros have already switched to IEEE-754 binary128, which is 128-bit long double. On FreeBSD, aarch64 and riscv64 already use 128-bit long double. Apart from the arguments "others do it", 128-bit long double provides obviously better precision - it's analogous to float vs double. Operations on long doubles are also slower and variables take twice as much memory, but that's expected of bigger types. Upgrades are another issue: LLVM uses different functions for operations on 64-bit long doubles and on binary128. This means that after upgrades, software using long doubles will need to be rebuilt. Otherwise, there's a risk of strange issues. I have verified that bootstraps for all the major languages work fine (rust, ghc, sbcl, openjdk), but I assume that some scientific software may have issues. The current patchset is at: https://reviews.freebsd.org/D57388 Some ports will probably also need to be patched, but that's another issue. If you have some spare system for testing, I recommend a try and a report, straight "make buildworld installworld" is expected to work. I have a powerpc64le VM where it works: root@ieeeldbl:~ # echo | cc -dM -E - | grep LDBL #define __DECIMAL_DIG__ __LDBL_DECIMAL_DIG__ #define __LDBL_DECIMAL_DIG__ 36 #define __LDBL_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966L #define __LDBL_DIG__ 33 #define __LDBL_EPSILON__ 1.92592994438723585305597794258492732e-34L #define __LDBL_HAS_DENORM__ 1 #define __LDBL_HAS_INFINITY__ 1 #define __LDBL_HAS_QUIET_NAN__ 1 #define __LDBL_MANT_DIG__ 113 #define __LDBL_MAX_10_EXP__ 4932 #define __LDBL_MAX_EXP__ 16384 #define __LDBL_MAX__ 1.18973149535723176508575932662800702e+4932L #define __LDBL_MIN_10_EXP__ (-4931) #define __LDBL_MIN_EXP__ (-16381) #define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L #define __LDBL_NORM_MAX__ 1.18973149535723176508575932662800702e+4932L On a system with the current default, 64-bit long double, the following will be reported: root@blackbird:~ # echo | cc -dM -E - | grep LDBL #define __DECIMAL_DIG__ __LDBL_DECIMAL_DIG__ #define __LDBL_DECIMAL_DIG__ 17 #define __LDBL_DENORM_MIN__ 4.9406564584124654e-324L #define __LDBL_DIG__ 15 #define __LDBL_EPSILON__ 2.2204460492503131e-16L #define __LDBL_HAS_DENORM__ 1 #define __LDBL_HAS_INFINITY__ 1 #define __LDBL_HAS_QUIET_NAN__ 1 #define __LDBL_MANT_DIG__ 53 #define __LDBL_MAX_10_EXP__ 308 #define __LDBL_MAX_EXP__ 1024 #define __LDBL_MAX__ 1.7976931348623157e+308L #define __LDBL_MIN_10_EXP__ (-307) #define __LDBL_MIN_EXP__ (-1021) #define __LDBL_MIN__ 2.2250738585072014e-308L #define __LDBL_NORM_MAX__ 1.7976931348623157e+308L [-- Attachment #2 --] -----BEGIN PGP SIGNATURE----- iQJPBAABCAA5FiEEycyIeNkkgohzsoorelmbhSCDnJ0FAmofLBYbFIAAAAAABAAO bWFudTIsMi41KzEuMTIsMCwyAAoJEHpZm4Ugg5ydJJ8P/1wVTVSfU9hgkBjgwZD6 VZmhIJPDAC31qcCNOoDvcf4piu8PnW2LsCrLSuGB0DGY1I1gYvtFLjAd3D9Jusgh Ql6SZNKXbIP3L1JFEH0S4+GP66iZBoP/Yogz+O4Mz5hZiKUG67hKDxCqcv6XbXMU Cd0ZH7D0nv7HAWI0GHKWjcNy3k91yU3NAfCe9ICu8ZyIrnWcZdudjB7Tdcz3lciA dfq9Doamper1bweDKy3vmhPfvoh16nxPIAMrvCekQVBpr74zS3a5O4/tO8QT9H61 jYrg/TzPmaJQR9U2q52gGfSRRXxvx19/Eh/caP1/ILJtOVeoK+NuYk4P5Xg4K26B C0LK0FdAXrTFpq2xfCPT4oA06MYNcLkCumq2/pLuzrIr+NBiPWOrshfdLdzrx3h7 oqdwhs9/Oj0TBIDlPdzcoI99fs4QDcNNqa5YZDQpuvJUqU2DYP8zsbKVpRiNWkmy QQZqBgv8hCCRDBvRAEyCZecyj9MYp9YAmK+m15rs7qOP9nX5h2ABR5m6yNU1SwXO Ezvys2AUM4hE0ZL7q5NjoLdWNgM0O9KMU+kBgzEnevgpF8T1CvIVQRIfAOSCcdrt u9hj0UZjtS5hghMvuP0kD7WmWrV7IYrSbFhu2tw4YUI75s+EtPQFfzQYSBWQHXXE G7kxD0LLYuoYmP89hfv96xdK =2ako -----END PGP SIGNATURE-----home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ah8sFn_mmGrJp9Ru>
