diff options
-rw-r--r-- | include/tools/cpuid.hxx | 6 | ||||
-rw-r--r-- | sc/source/core/inc/arraysumfunctor.hxx | 11 | ||||
-rw-r--r-- | tools/source/misc/cpuid.cxx | 3 |
3 files changed, 17 insertions, 3 deletions
diff --git a/include/tools/cpuid.hxx b/include/tools/cpuid.hxx index 244512989cb6..348724e024dd 100644 --- a/include/tools/cpuid.hxx +++ b/include/tools/cpuid.hxx @@ -14,6 +14,12 @@ #include <sal/config.h> #include <tools/toolsdllapi.h> +#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && defined(__SSE2__) +#define __LO_SSE2_AVAILABLE__ 1 +#elif defined(_MSC_VER) && (defined(_M_AMD64) || (defined(_M_IX86) && defined(_M_IX86_FP) && _M_IX86_FP >= 2)) +#define __LO_SSE2_AVAILABLE__ 1 +#endif + namespace tools { namespace cpuid diff --git a/sc/source/core/inc/arraysumfunctor.hxx b/sc/source/core/inc/arraysumfunctor.hxx index 776c5143732e..34ccd81aad5b 100644 --- a/sc/source/core/inc/arraysumfunctor.hxx +++ b/sc/source/core/inc/arraysumfunctor.hxx @@ -11,9 +11,12 @@ #ifndef INCLUDED_SC_SOURCE_CORE_INC_ARRAYSUMFUNCTOR_HXX #define INCLUDED_SC_SOURCE_CORE_INC_ARRAYSUMFUNCTOR_HXX -#include <emmintrin.h> #include <tools/cpuid.hxx> +#if defined(__LO_SSE2_AVAILABLE__) +#include <emmintrin.h> +#endif + namespace sc { @@ -67,6 +70,7 @@ public: private: inline double executeSSE2(size_t& i, const double* pCurrent) const { +#if defined(__LO_SSE2_AVAILABLE__) double fSum = 0.0; size_t nRealSize = mnSize - i; size_t nUnrolledSize = nRealSize - (nRealSize % 8); @@ -107,6 +111,11 @@ private: fSum += temp; } return fSum; +#else + (void) i; + (void) pCurrent; + return 0.0; +#endif } inline double executeUnrolled(size_t& i, const double* pCurrent) const diff --git a/tools/source/misc/cpuid.cxx b/tools/source/misc/cpuid.cxx index b4406befb0e8..5e052fbbc166 100644 --- a/tools/source/misc/cpuid.cxx +++ b/tools/source/misc/cpuid.cxx @@ -16,8 +16,7 @@ namespace tools namespace cpuid { -// First minimize to MSVC / GCC compat. compiler and x86 / x64 architecture -#if (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86))) || (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) +#if defined(__LO_SSE2_AVAILABLE__) namespace { |