diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2021-10-26 23:43:48 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2021-10-27 08:39:10 +0200 |
commit | 12c6b1ef6a824b09778163ec83fc44bb196e65db (patch) | |
tree | be5e078e74d35a6e4c113c78a7399127250348be | |
parent | 524a0b57ace6cb663df411ab0d8298c5aff6a226 (diff) |
try harder not to mix CPU-specific code with generic code
Jenkins Windows builds occassionally fails with illegal instruction
(https://ci.libreoffice.org/job/gerrit_windows/110191/console).
This seems to be because those AVX etc. files use std::abs(double),
which is really just a fancy inline function calling the real
fabs() or whatever function. And in debug builds inlines do not
get inlined, they get emitted as copies. And since arraysumAVX.cxx
is listed as the first object for Library_sc, apparently the linker
likes to pick up the AVX-compiled inline function as the std::abs()
version to use for Library_sc.
Try to avoid this in two ways:
- move the CPU-specific object files later in the list of library
files
- use plain C headers in those sources, no fancy <cmath>
Change-Id: Ifd14076f79e9fbd7cc4c4a63a9764dff6715e63a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124249
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
-rw-r--r-- | external/skia/Library_skia.mk | 8 | ||||
-rw-r--r-- | sc/Library_sc.mk | 24 | ||||
-rw-r--r-- | sc/source/core/tool/arraysum.hxx | 4 | ||||
-rw-r--r-- | sc/source/core/tool/arraysumAVX.cxx | 2 | ||||
-rw-r--r-- | sc/source/core/tool/arraysumAVX512.cxx | 2 | ||||
-rw-r--r-- | sc/source/core/tool/arraysumSSE2.cxx | 2 |
6 files changed, 21 insertions, 21 deletions
diff --git a/external/skia/Library_skia.mk b/external/skia/Library_skia.mk index 0989e7e337c9..92215b0935d2 100644 --- a/external/skia/Library_skia.mk +++ b/external/skia/Library_skia.mk @@ -123,10 +123,6 @@ $(eval $(call gb_Library_add_exception_objects,skia,\ external/skia/source/skia_opts \ )) -$(eval $(call gb_Library_add_exception_objects,skia,\ - external/skia/source/skia_opts_ssse3, $(CXXFLAGS_INTRINSICS_SSSE3) $(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3) \ -)) - $(eval $(call gb_Library_set_generated_cxx_suffix,skia,cpp)) $(eval $(call gb_Library_add_generated_exception_objects,skia,\ @@ -835,6 +831,10 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\ UnpackedTarball/skia/src/ports/SkOSFile_stdio \ )) +$(eval $(call gb_Library_add_exception_objects,skia,\ + external/skia/source/skia_opts_ssse3, $(CXXFLAGS_INTRINSICS_SSSE3) $(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3) \ +)) + $(eval $(call gb_Library_add_generated_exception_objects,skia,\ UnpackedTarball/skia/src/opts/SkOpts_avx, $(CXXFLAGS_INTRINSICS_AVX) $(LO_CLANG_CXXFLAGS_INTRINSICS_AVX) \ $(LO_SKIA_AVOID_INLINE_COPIES) \ diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk index a85650e935e6..ef9c62f42d53 100644 --- a/sc/Library_sc.mk +++ b/sc/Library_sc.mk @@ -99,18 +99,6 @@ $(eval $(call gb_Library_use_libraries,sc,\ )) $(eval $(call gb_Library_add_exception_objects,sc,\ - sc/source/core/tool/arraysumAVX512, $(CXXFLAGS_INTRINSICS_AVX512F) \ -)) - -$(eval $(call gb_Library_add_exception_objects,sc,\ - sc/source/core/tool/arraysumAVX, $(CXXFLAGS_INTRINSICS_AVX) \ -)) - -$(eval $(call gb_Library_add_exception_objects,sc,\ - sc/source/core/tool/arraysumSSE2, $(CXXFLAGS_INTRINSICS_SSE2) \ -)) - -$(eval $(call gb_Library_add_exception_objects,sc,\ sc/source/core/data/attarray \ sc/source/core/data/attrib \ sc/source/core/data/autonamecache \ @@ -692,6 +680,18 @@ $(eval $(call gb_Library_add_exception_objects,sc,\ sc/source/ui/xmlsource/xmlsourcedlg \ )) +$(eval $(call gb_Library_add_exception_objects,sc,\ + sc/source/core/tool/arraysumAVX512, $(CXXFLAGS_INTRINSICS_AVX512F) \ +)) + +$(eval $(call gb_Library_add_exception_objects,sc,\ + sc/source/core/tool/arraysumAVX, $(CXXFLAGS_INTRINSICS_AVX) \ +)) + +$(eval $(call gb_Library_add_exception_objects,sc,\ + sc/source/core/tool/arraysumSSE2, $(CXXFLAGS_INTRINSICS_SSE2) \ +)) + ifeq ($(ENABLE_FORMULA_LOGGER),TRUE) $(eval $(call gb_Library_add_exception_objects,sc,\ sc/source/core/tool/formulalogger \ diff --git a/sc/source/core/tool/arraysum.hxx b/sc/source/core/tool/arraysum.hxx index 62c2514182b7..5d227bd85a48 100644 --- a/sc/source/core/tool/arraysum.hxx +++ b/sc/source/core/tool/arraysum.hxx @@ -10,7 +10,7 @@ #pragma once -#include <cmath> +#include <math.h> namespace sc::op { @@ -37,7 +37,7 @@ namespace LO_ARRAYSUM_SPACE INLINE void sumNeumanierNormal(double& sum, double& err, const double& value) { double t = sum + value; - if (std::abs(sum) >= std::abs(value)) + if (fabs(sum) >= fabs(value)) err += (sum - t) + value; else err += (value - t) + sum; diff --git a/sc/source/core/tool/arraysumAVX.cxx b/sc/source/core/tool/arraysumAVX.cxx index 54c47780f63c..c55d71f22983 100644 --- a/sc/source/core/tool/arraysumAVX.cxx +++ b/sc/source/core/tool/arraysumAVX.cxx @@ -16,7 +16,7 @@ #include <tools/simd.hxx> #include <tools/simdsupport.hxx> -#include <cstdlib> +#include <stdlib.h> namespace sc::op { diff --git a/sc/source/core/tool/arraysumAVX512.cxx b/sc/source/core/tool/arraysumAVX512.cxx index f8e8de729279..987e5a3e6ff6 100644 --- a/sc/source/core/tool/arraysumAVX512.cxx +++ b/sc/source/core/tool/arraysumAVX512.cxx @@ -16,7 +16,7 @@ #include <tools/simd.hxx> #include <tools/simdsupport.hxx> -#include <cstdlib> +#include <stdlib.h> /* TODO Remove this once GCC updated and AVX512 can work. */ #ifdef __GNUC__ diff --git a/sc/source/core/tool/arraysumSSE2.cxx b/sc/source/core/tool/arraysumSSE2.cxx index 95b42f868461..b4edb98286f9 100644 --- a/sc/source/core/tool/arraysumSSE2.cxx +++ b/sc/source/core/tool/arraysumSSE2.cxx @@ -16,7 +16,7 @@ #include <tools/simd.hxx> #include <tools/simdsupport.hxx> -#include <cstdlib> +#include <stdlib.h> namespace sc::op { |