summaryrefslogtreecommitdiff
path: root/include/tools
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@centrum.cz>2022-01-26 13:34:08 +0100
committerAndras Timar <andras.timar@collabora.com>2022-02-14 11:00:10 +0100
commitee3a532ebae4ca102b16233b428303f71914f26c (patch)
treedd29379e79abb1ea515c30d6464799bf3a2751f9 /include/tools
parent2336ab7f6fc38e7e0c7285e30c23c7d041a6d711 (diff)
MSVC -arch is independent from the ability to use CPU intrinsics
It's possible to write AVX512 intrinsics in code compile only with -arch:AVX . So do not require -arch for being able to do so, especially since there is no -arch option for only AVX512F without other AVX512 subsets (the option enables also CD, BW, DQ and VL https://docs.microsoft.com/en-us/cpp/build/reference/arch-x64). https://crashreport.libreoffice.org/stats/crash_details/55ef825d-c323-4df9-95e2-76672c674e60 is presumably caused by this, I can see use of registers XMM0-15 in arraysumAVX512.cxx built with -arch:AVX2 but when built with -arch:AVX512 registers XMM16-31 are used too (I'm not sure if that's AVX512DQ or something else, I can't find info on it). Change-Id: I74473333a17e618327d43b920b8929d1b0e733b8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129724 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Reviewed-by: Luboš Luňák <l.lunak@collabora.com> Tested-by: Jenkins (cherry picked from commit 807a15bd64c1f2a57371d12e7684541293cd9791) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129765 Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'include/tools')
-rw-r--r--include/tools/simdsupport.hxx31
1 files changed, 9 insertions, 22 deletions
diff --git a/include/tools/simdsupport.hxx b/include/tools/simdsupport.hxx
index 738b34e072db..fa8923bb095f 100644
--- a/include/tools/simdsupport.hxx
+++ b/include/tools/simdsupport.hxx
@@ -34,34 +34,21 @@
#if defined(_MSC_VER) // VISUAL STUDIO COMPILER
-// SSE2 is required for X64
-#if (defined(_M_X64) || defined(_M_IX86_FP) && _M_IX86_FP >= 2)
+// With MSVC using -arch is in fact not necessary for being able
+// to use CPU intrinsics, code using AVX512F intrinsics will compile
+// even if compiled with -arch:AVX, the -arch option really only affects
+// instructions generated for C/C++ code.
+#if defined(_M_X64) || defined(_M_X86)
+// As such, if we're building for X86 or X64, support for these is always available
+// with MSVC2019+.
#define LO_SSE2_AVAILABLE
-#include <intrin.h>
-#endif // end SSE2
-
-// compiled with /arch:AVX
-#if defined(__AVX__)
-#ifndef LO_SSE2_AVAILABLE
-#define LO_SSE2_AVAILABLE
-#include <intrin.h>
-#endif
#define LO_SSSE3_AVAILABLE
#define LO_AVX_AVAILABLE
-#include <immintrin.h>
-#endif // end defined(__AVX__)
-
-// compiled with /arch:AVX2
-#if defined(__AVX2__)
#define LO_AVX2_AVAILABLE
-#include <immintrin.h>
-#endif // defined(__AVX2__)
-
-// compiled with /arch:AVX512F
-#if defined(__AVX512F__)
#define LO_AVX512F_AVAILABLE
+#include <intrin.h>
#include <immintrin.h>
-#endif // defined(__AVX512F__)
+#endif
#else // compiler Clang and GCC