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