diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2015-07-17 14:46:05 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2015-09-25 20:29:22 +0000 |
commit | a587ad1e507aa367d55f1954000417271383c685 (patch) | |
tree | 8daac675a8a0fff8bc0f1d84500f308d0e469a59 /mkspecs | |
parent | e79200bf7f8dbd4f8aa03c8be07a6dfc4328fa50 (diff) |
configure: Add support for detecting AVX512 instructions
Tested on Linux with Clang 3.7, GCC 4.9, 5.1 and 6.0, ICC 16 beta; on OS
X with Clang-XCode 6.4, ICC 16 beta; on Windows with MSVC 2013 and ICC
15. MinGW is not tested.
GCC 4.9: AVX512F AVX512ER AVX512CD AVX512PF
GCC 5 & 6: AVX512F AVX512ER AVX512CD AVX512PF AVX512DQ AVX512BW AVX512VL AVX512IFMA AVX512VBMI
Clang 3.7: AVX512F AVX512ER AVX512CD
Clang-XCode: <none>
ICC 15 & 16: AVX512F AVX512ER AVX512CD AVX512PF AVX512DQ AVX512BW AVX512VL
MSVC 2013: <none>
Change-Id: Ib306f8f647014b399b87ffff13f1da1b161c31d7
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'mkspecs')
-rw-r--r-- | mkspecs/common/gcc-base.conf | 9 | ||||
-rw-r--r-- | mkspecs/features/simd.prf | 41 | ||||
-rw-r--r-- | mkspecs/linux-icc/qmake.conf | 7 | ||||
-rw-r--r-- | mkspecs/macx-icc/qmake.conf | 7 | ||||
-rw-r--r-- | mkspecs/win32-icc/qmake.conf | 7 |
5 files changed, 71 insertions, 0 deletions
diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf index 27e812b3a1..6e043f558f 100644 --- a/mkspecs/common/gcc-base.conf +++ b/mkspecs/common/gcc-base.conf @@ -86,6 +86,15 @@ QMAKE_CFLAGS_SSE4_1 += -msse4.1 QMAKE_CFLAGS_SSE4_2 += -msse4.2 QMAKE_CFLAGS_AVX += -mavx QMAKE_CFLAGS_AVX2 += -mavx2 +QMAKE_CFLAGS_AVX512F += -mavx512f +QMAKE_CFLAGS_AVX512ER += -mavx512er +QMAKE_CFLAGS_AVX512CD += -mavx512cd +QMAKE_CFLAGS_AVX512PF += -mavx512pf +QMAKE_CFLAGS_AVX512DQ += -mavx512dq +QMAKE_CFLAGS_AVX512BW += -mavx512bw +QMAKE_CFLAGS_AVX512VL += -mavx512vl +QMAKE_CFLAGS_AVX512IFMA += -mavx512ifma +QMAKE_CFLAGS_AVX512VBMI += -mavx512vbmi QMAKE_CFLAGS_NEON += -mfpu=neon # Wrapper tools that understand .o/.a files with GIMPLE instead of machine code diff --git a/mkspecs/features/simd.prf b/mkspecs/features/simd.prf index 700d79a1b5..4aafdbe5ed 100644 --- a/mkspecs/features/simd.prf +++ b/mkspecs/features/simd.prf @@ -95,6 +95,47 @@ addSimdCompiler(sse4_1) addSimdCompiler(sse4_2) addSimdCompiler(avx) addSimdCompiler(avx2) +addSimdCompiler(avx512f) +addSimdCompiler(avx512cd) +addSimdCompiler(avx512er) +addSimdCompiler(avx512pf) +addSimdCompiler(avx512dq) +addSimdCompiler(avx512bw) +addSimdCompiler(avx512vl) +addSimdCompiler(avx512ifma) +addSimdCompiler(avx512vbmi) addSimdCompiler(neon) addSimdCompiler(mips_dsp) addSimdCompiler(mips_dspr2) + +# Follow the Intel compiler's lead and define profiles of AVX512 instructions +defineTest(addAvx512Profile) { + name = $$1 + dependencies = $$2 + upname = $$upper($$name) + varname = QMAKE_CFLAGS_$$upname + + cpu_features_missing = + cflags = $$QMAKE_CFLAGS_AVX512F + for(part, dependencies) { + !CONFIG($$part): return() # Profile isn't supported by the compiler + + uppart = $$upper($$part) + cflags *= $$eval(QMAKE_CFLAGS_$${uppart}) + !contains(QT_CPU_FEATURES, $$uppart): cpu_features_missing += $$uppart + } + + CONFIG += $$name + isEmpty(cpu_features_missing): QT_CPU_FEATURES += $$name + $$varname = $$cflags + + export(QT_CPU_FEATURES) + export(CONFIG) + export($$varname) + addSimdCompiler($$name) +} +addAvx512Profile(avx512common, avx512cd) +addAvx512Profile(avx512mic, avx512cd avx512er avx512pf) +addAvx512Profile(avx512core, avx512cd avx512bw avx512dq avx512vl) +addAvx512Profile(avx512ifmavl, avx512ifma avx512vl) +addAvx512Profile(avx512vbmivl, avx512vbmi avx512vl) diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf index 57f6c45ac1..c71c223768 100644 --- a/mkspecs/linux-icc/qmake.conf +++ b/mkspecs/linux-icc/qmake.conf @@ -35,6 +35,13 @@ QMAKE_CFLAGS_SSE4_1 += -xSSE4.1 QMAKE_CFLAGS_SSE4_2 += -xSSE4.2 QMAKE_CFLAGS_AVX += -xAVX QMAKE_CFLAGS_AVX2 += -xCORE-AVX2 +QMAKE_CFLAGS_AVX512F += -xCOMMON-AVX512 +QMAKE_CFLAGS_AVX512CD += -xCOMMON-AVX512 +QMAKE_CFLAGS_AVX512ER += -xMIC-AVX512 +QMAKE_CFLAGS_AVX512PF += -xMIC-AVX512 +QMAKE_CFLAGS_AVX512DQ += -xCORE-AVX512 +QMAKE_CFLAGS_AVX512BW += -xCORE-AVX512 +QMAKE_CFLAGS_AVX512VL += -xCORE-AVX512 QMAKE_CXX = icpc QMAKE_CXXFLAGS = $$QMAKE_CFLAGS diff --git a/mkspecs/macx-icc/qmake.conf b/mkspecs/macx-icc/qmake.conf index efce568ea9..4d2dd736b1 100644 --- a/mkspecs/macx-icc/qmake.conf +++ b/mkspecs/macx-icc/qmake.conf @@ -33,6 +33,13 @@ QMAKE_CFLAGS_SSE4_1 += -msse4.1 QMAKE_CFLAGS_SSE4_2 += -msse4.2 QMAKE_CFLAGS_AVX += -mavx QMAKE_CFLAGS_AVX2 += -march=core-avx2 +QMAKE_CFLAGS_AVX512F += -xCOMMON-AVX512 +QMAKE_CFLAGS_AVX512CD += -xCOMMON-AVX512 +QMAKE_CFLAGS_AVX512ER += -xMIC-AVX512 +QMAKE_CFLAGS_AVX512PF += -xMIC-AVX512 +QMAKE_CFLAGS_AVX512DQ += -xCORE-AVX512 +QMAKE_CFLAGS_AVX512BW += -xCORE-AVX512 +QMAKE_CFLAGS_AVX512VL += -xCORE-AVX512 QMAKE_OBJECTIVE_CC = clang QMAKE_OBJECTIVE_CFLAGS = -pipe diff --git a/mkspecs/win32-icc/qmake.conf b/mkspecs/win32-icc/qmake.conf index 65b533b3dd..0e6a2cbba4 100644 --- a/mkspecs/win32-icc/qmake.conf +++ b/mkspecs/win32-icc/qmake.conf @@ -32,6 +32,13 @@ QMAKE_CFLAGS_SSE4_1 = -QxSSE4.1 QMAKE_CFLAGS_SSE4_2 = -QxSSE4.2 QMAKE_CFLAGS_AVX = -QxAVX QMAKE_CFLAGS_AVX2 = -QxCORE-AVX2 +QMAKE_CFLAGS_AVX512F += -QxCOMMON-AVX512 +QMAKE_CFLAGS_AVX512CD += -QxCOMMON-AVX512 +QMAKE_CFLAGS_AVX512ER += -QxMIC-AVX512 +QMAKE_CFLAGS_AVX512PF += -QxMIC-AVX512 +QMAKE_CFLAGS_AVX512DQ += -QxCORE-AVX512 +QMAKE_CFLAGS_AVX512BW += -QxCORE-AVX512 +QMAKE_CFLAGS_AVX512VL += -QxCORE-AVX512 QMAKE_CXX = $$QMAKE_CC QMAKE_CXXFLAGS = $$QMAKE_CFLAGS /Zc:forScope |