Test File: sc/qa/unit/data/functions/fods/chiinv.fods: fails with Assertion
Stephan Bergmann
sbergman at redhat.com
Fri Sep 16 10:05:19 UTC 2016
On 09/07/2016 10:37 PM, Eike Rathke wrote:
> You could do us a favour, are you willing to invest some machine time
> and try if passing either -msse or -msse2 as compiler flags would solve
> the failing function tests problem? For this you'd need to do
>
> make clean
> make ENVCFLAGS=-msse ENVCFLAGSCXX=-msse && make sc.check
>
> and if that still fails try
>
> make clean
> make ENVCFLAGS=-msse2 ENVCFLAGSCXX=-msse2 && make sc.check
Turns out, the relevant GCC switches are
-mfpmath=sse -msse2
-mfpmath=sse (instead of the x86-32 default of -mfpmath=387) prevents
usage of the extended 80-bit precision for temporary results. (Which
caused e.g. the subtraction in ScChiDistFunction::GetValue,
sc/source/core/tool/interpr3.cxx, to produce results different from IEEE
double, causing the computation of CHIINV(0.999999999999999,
1.00000000000000E+001) in sc/qa/unit/data/functions/fods/chiinv.fods to
produce unexpected results.)
<https://gcc.gnu.org/onlinedocs/gcc-6.2.0/gcc/x86-Options.html#x86-Options>
also claims: "The resulting code should be considerably faster [compared
to -mfpmath=387] in the majority of cases and avoid the numerical
instability problems of 387 code [...]"
But -mfpmath=sse only takes effect when compiling for an architecture
that actually supports the relevant SSE instructions (otherwise silently
falling back to the "387" instructions, it appears). So we need an
additional -msse2 to enable the instructions relevant for 64-bit double
(-msse would only enable instructions relevant for 32-bit float).
SSE2 support reportedly got added with Pentium 4, around 2001. Any
thoughts on whether we'd want to enforce that for 32-bit x86 Linux
builds (or already effectively enforce anyway)? In which case we could
add the relevant flags to solenv/gbuild/platform/LINUX_INTEL_GCC.mk and
revert
<https://cgit.freedesktop.org/libreoffice/core/commit/?id=b9a27d5856f60688456762bfcc29c38670009254>
"sc: disable function test documents for 32-bit PLATFORMID=linux_x86" again.
(Notwithstanding the fact that tests that rely on Calc doing
computations in a specific way, when Calc doesn't give any guarantees of
how those computations should be carried out exactly AFAIK, are dubious
and a pain at best.)
More information about the LibreOffice
mailing list