diff --git a/mkspecs/features/simd.prf b/mkspecs/features/simd.prf index ad8c545819..a8ce097b64 100644 --- a/mkspecs/features/simd.prf +++ b/mkspecs/features/simd.prf @@ -289,7 +289,7 @@ QT_CPU_FEATURES = $$eval(QT_CPU_FEATURES.$$QT_ARCH) avx2 { HEADERS += $$AVX2_HEADERS - avx2_compiler.commands = $$QMAKE_CXX -c $(CXXFLAGS) -D_M_AVX2 + avx2_compiler.commands = $$QMAKE_CXX -c $(CXXFLAGS) !contains(QT_CPU_FEATURES, avx):avx2_compiler.commands += $$QMAKE_CFLAGS_AVX2 avx2_compiler.commands += $(INCPATH) ${QMAKE_FILE_IN} -Fo${QMAKE_FILE_OUT} avx2_compiler.dependency_type = TYPE_C diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h index dd720f88da..d293532f1d 100644 --- a/src/corelib/tools/qsimd_p.h +++ b/src/corelib/tools/qsimd_p.h @@ -56,7 +56,8 @@ * * We will try to include all headers possible under this configuration. * - * MSVC does not define __SSE2__ & family, so we will define them. + * MSVC does not define __SSE2__ & family, so we will define them. MSVC 2013 & + * up do define __AVX__ if the -arch:AVX option is passed on the command-line. * * Supported XXX are: * Flag | Arch | GCC | Intel CC | MSVC | @@ -118,23 +119,18 @@ // immintrin.h is the ultimate header, we don't need anything else after this #include -# if defined(Q_CC_MSVC) && defined(_M_AVX) +# if defined(Q_CC_MSVC) && (defined(_M_AVX) || defined(__AVX__)) // MS Visual Studio 2010 has no macro pre-defined to identify the use of /arch:AVX +// MS Visual Studio 2013 adds it: __AVX__ // See: http://connect.microsoft.com/VisualStudio/feedback/details/605858/arch-avx-should-define-a-predefined-macro-in-x64-and-set-a-unique-value-for-m-ix86-fp-in-win32 -// When such a macro exists, add it above, replacing _M_AVX as appropriate # define __SSE3__ 1 # define __SSSE3__ 1 // no Intel CPU supports SSE4a, so don't define it # define __SSE4_1__ 1 # define __SSE4_2__ 1 -# define __AVX__ 1 -# ifdef _M_AVX2 -// replace the macro above with the proper MS macro when it exists -// All processors with AVX2 will support BMI1 and FMA -# define __AVX2__ 1 -# define __BMI__ 1 -# define __FMA__ 1 -# endif +# ifndef __AVX__ +# define __AVX__ 1 +# endif # endif #endif