280e321e52
Neither the Intel compiler nor Visual C++ have a dedicated switch to
enable F16C support, like GCC and Clang do. So we used the AVX switch
for that in commit 8241d51f70
, as it was
the closest, lowest denominator. That was incorrect and insufficient.
The Intel compiler silently miscompiles the intrinsics with -xAVX,
making calls to out-of-line functions like _mm_cvtps_ph, which don't
exist. So we actually have to use AVX2 support to generate correct code.
That might be a problem later, since Ivy Bridge supports F16C but not
AVX2.
Visual C++ is able to generate F16C code with just -arch:AVX.
Either way, since there's no dedicated command-line switch, there's also
no dedicated preprocessor macro. We're using __AVX2__ for both
compilers, as that's a sufficient condition to indicate a processor that
supports F16C.
Change-Id: I27b55fdf514247549455fffd14b205b8d8b86da7
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
91 lines
2.6 KiB
Plaintext
91 lines
2.6 KiB
Plaintext
#
|
|
# qmake configuration for Microsoft Visual Studio C/C++ Compiler
|
|
# This file is used by win32-msvc, win32-clang-msvc, and all
|
|
# winrt-XXX-msvcXXX specs
|
|
#
|
|
|
|
#
|
|
# Version-specific changes
|
|
#
|
|
|
|
isEmpty(QMAKE_MSC_VER): error("msvc-version.conf loaded but QMAKE_MSC_VER isn't set")
|
|
|
|
MSVC_VER = 8.0
|
|
COMPAT_MKSPEC = win32-msvc2005
|
|
|
|
greaterThan(QMAKE_MSC_VER, 1499) {
|
|
# Visual Studio 2008 (9.0) / Visual C++ 15.0 and up
|
|
MSVC_VER = 9.0
|
|
COMPAT_MKSPEC = win32-msvc2008
|
|
QMAKE_CFLAGS_MP = -MP
|
|
QMAKE_CXXFLAGS_MP = $$QMAKE_CFLAGS_MP
|
|
}
|
|
|
|
greaterThan(QMAKE_MSC_VER, 1599) {
|
|
# Visual Studio 2010 (10.0) / Visual C++ 16.0 and up
|
|
MSVC_VER = 10.0
|
|
COMPAT_MKSPEC = win32-msvc2010
|
|
MAKEFILE_GENERATOR = MSBUILD
|
|
|
|
QMAKE_CFLAGS_AVX = -arch:AVX
|
|
QMAKE_CFLAGS_AVX2 = -arch:AVX
|
|
|
|
VCPROJ_EXTENSION = .vcxproj
|
|
}
|
|
|
|
greaterThan(QMAKE_MSC_VER, 1699) {
|
|
# Visual Studio 2012 (11.0) / Visual C++ 17.0 and up
|
|
MSVC_VER = 11.0
|
|
COMPAT_MKSPEC = win32-msvc2012
|
|
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -D_HAS_EXCEPTIONS=0
|
|
QT_CONFIG += c++11
|
|
CONFIG += c++11
|
|
}
|
|
|
|
greaterThan(QMAKE_MSC_VER, 1799) {
|
|
# Visual Studio 2013 (12.0) / Visual C++ 18.0 and up
|
|
MSVC_VER = 12.0
|
|
COMPAT_MKSPEC = win32-msvc2013
|
|
QMAKE_CFLAGS += -FS
|
|
QMAKE_CXXFLAGS += -FS
|
|
|
|
QMAKE_CFLAGS_F16C = -arch:AVX
|
|
|
|
equals(QMAKE_MSC_VER, 1800) {
|
|
QMAKE_CFLAGS_RELEASE += -Zc:strictStrings
|
|
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -Zc:strictStrings
|
|
QMAKE_CXXFLAGS_RELEASE += -Zc:strictStrings
|
|
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -Zc:strictStrings
|
|
}
|
|
}
|
|
|
|
greaterThan(QMAKE_MSC_VER, 1899) {
|
|
# Visual Studio 2015 (14.0) / Visual C++ 19.0 and up
|
|
MSVC_VER = 14.0
|
|
COMPAT_MKSPEC = win32-msvc2015
|
|
QMAKE_CFLAGS += -Zc:strictStrings
|
|
QMAKE_CFLAGS_WARN_ON += -w44456 -w44457 -w44458
|
|
QMAKE_CFLAGS_AVX2 = -arch:AVX2
|
|
QMAKE_CXXFLAGS += -Zc:strictStrings -Zc:throwingNew
|
|
QMAKE_CXXFLAGS_WARN_ON += -w44456 -w44457 -w44458 -wd4577 -wd4467
|
|
|
|
greaterThan(QMAKE_MSC_FULL_VER, 190023918):!intel_icl {
|
|
isEmpty(QT_CLANG_MAJOR_VERSION)|!lessThan(QT_CLANG_MAJOR_VERSION, 4) {
|
|
QMAKE_CFLAGS_UTF8_SOURCE = -utf-8
|
|
}
|
|
}
|
|
}
|
|
|
|
greaterThan(QMAKE_MSC_VER, 1909) {
|
|
# Visual Studio 2017 (15.0) / Visual C++ 19.10 and up
|
|
MSVC_VER = 15.0
|
|
COMPAT_MKSPEC = win32-msvc2017
|
|
}
|
|
|
|
greaterThan(QMAKE_MSC_VER, 1910) {
|
|
# No compat spec past MSVC 2017
|
|
COMPAT_MKSPEC =
|
|
}
|
|
|
|
!isEmpty(COMPAT_MKSPEC):!$$COMPAT_MKSPEC: CONFIG += $$COMPAT_MKSPEC
|