diff options
author | Luboš Luňák <l.lunak@centrum.cz> | 2022-01-26 13:34:08 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2022-02-14 11:00:10 +0100 |
commit | ee3a532ebae4ca102b16233b428303f71914f26c (patch) | |
tree | dd29379e79abb1ea515c30d6464799bf3a2751f9 /include/tools | |
parent | 2336ab7f6fc38e7e0c7285e30c23c7d041a6d711 (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.hxx | 31 |
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 |