Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Jun 2026 18:53:11 -0700
From:      Adrian Chadd <adrian@freebsd.org>
To:        Piotr Kubaj <pkubaj@freebsd.org>
Cc:        freebsd-ppc@freebsd.org
Subject:   Re: Proposal to switch powerpc64le to IEEE-754 binary128
Message-ID:  <CAJ-VmonbXXpq4TBZ38idRPVHM1h%2BSFChvyr3DhVjHkVeaw9KjA@mail.gmail.com>
In-Reply-To: <ah8sFn_mmGrJp9Ru@talos-powerpc64le>

index | next in thread | previous in thread | raw e-mail

So, a few of us chatted in IRC about it.

* The minimum for PPC64LE was POWER7 anyway, right?
* There's no easy way to deal with this in library versioning and
such, so we should just rip the bandaid off
* We can fix the ports as they come up.
* people wishing to run stuff built on -15 or earlier should just run
a userland jail.

so given that!

* Please include something to propose to put in UPDATING
* Please explain what will happen with all the toolchains in -HEAD (eg
all the gcc versions will use the right base type, we won't have gcc
compiling a different ABI to llvm21, etc)
* Let's figure out when the flag day should be.



-adrian

On Tue, 2 Jun 2026 at 13:04, Piotr Kubaj <pkubaj@freebsd.org> wrote:
>
> 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


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-VmonbXXpq4TBZ38idRPVHM1h%2BSFChvyr3DhVjHkVeaw9KjA>