Subject: Re: port-i386/36770: "long double" arithmetics doesn't work on i386
To: None <gnats-bugs@NetBSD.org>
From: Matthias Drochner <M.Drochner@fz-juelich.de>
List: netbsd-bugs
Date: 08/13/2007 15:48:59
M.Drochner@fz-juelich.de said:
> gcc fails to emit instuctions which set the i387 floating point
> control word to 64-bit rounding where "long double" data types are
> used
After some research I came to the conclusion that gcc doesn't
intend to do so. (It might kill performance anyway.)
It does instead live with the fact that the FPU does only
provide IEEE "double" accuracy, even with "long double"
variables. Since the standards (ISO C and IEEE754) do not
require that "long double" is any better that "double", this
is legal.
> setting TARGET_96_ROUND_53_LONG_DOUBLE
> in the gcc configuration doesn't help
What this does is to dumb down compile time calculations
on "long double" types to use 53-bit accuracy (while using
the 80/96-bit format where data are put to .data).
So this should be set for NetBSD/i386 (and amd64) for
consistency between compile-time and runtime calculations,
otherwise we might see different behaviour depending on
eg optimization levels.
> Try the program below (taken from an sqlite3 selftest).
sqlite3's assumption that use of "long double" will fix
the flaws of the conversion algorithm is not portable.
I've filed a bug report there (#2570).
This further means for NetBSD/i386:
-Use of "long double" is just a waste of memory, and memory
bandwidth.
+It is almost as easy to implement expl(), logl() and all the other
"long double" variants of math functions on i386 as it is for
platforms where "long double" is identical to "double": just
use wrappers which convert arguments, no need to implement
algorithms which provide higher accuracies.
best regards
Matthias
Forschungszentrum Juelich GmbH
52425 Juelich
Sitz der Gesellschaft: Juelich
Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498
Vorsitzende des Aufsichtsrats: MinDirig'in Baerbel Brumme-Bothe
Vorstand: Prof. Dr. Achim Bachem (Vorsitzender), Dr. Ulrich Krafft (stellv.
Vorsitzender)