From 12c6b1ef6a824b09778163ec83fc44bb196e65db Mon Sep 17 00:00:00 2001 From: Luboš Luňák Date: Tue, 26 Oct 2021 23:43:48 +0200 Subject: try harder not to mix CPU-specific code with generic code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Change-Id: Ifd14076f79e9fbd7cc4c4a63a9764dff6715e63a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124249 Tested-by: Jenkins Reviewed-by: Luboš Luňák --- external/skia/Library_skia.mk | 8 ++++---- sc/Library_sc.mk | 24 ++++++++++++------------ sc/source/core/tool/arraysum.hxx | 4 ++-- sc/source/core/tool/arraysumAVX.cxx | 2 +- sc/source/core/tool/arraysumAVX512.cxx | 2 +- 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 @@ -98,18 +98,6 @@ $(eval $(call gb_Library_use_libraries,sc,\ xo \ )) -$(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 \ @@ -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 +#include 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 #include -#include +#include 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 #include -#include +#include /* 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 #include -#include +#include namespace sc::op { -- cgit v1.2.3