Skip site navigation (1)Skip section navigation (2)
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>