summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2021-10-26 23:43:48 +0200
committerLuboš Luňák <l.lunak@collabora.com>2021-10-27 08:39:10 +0200
commit12c6b1ef6a824b09778163ec83fc44bb196e65db (patch)
treebe5e078e74d35a6e4c113c78a7399127250348be
parent524a0b57ace6cb663df411ab0d8298c5aff6a226 (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.mk8
-rw-r--r--sc/Library_sc.mk24
-rw-r--r--sc/source/core/tool/arraysum.hxx4
-rw-r--r--sc/source/core/tool/arraysumAVX.cxx2
-rw-r--r--sc/source/core/tool/arraysumAVX512.cxx2
-rw-r--r--sc/source/core/tool/arraysumSSE2.cxx2
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
{