summaryrefslogtreecommitdiffstats
path: root/mkspecs
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2015-07-17 14:46:05 -0700
committerThiago Macieira <thiago.macieira@intel.com>2015-09-25 20:29:22 +0000
commita587ad1e507aa367d55f1954000417271383c685 (patch)
tree8daac675a8a0fff8bc0f1d84500f308d0e469a59 /mkspecs
parente79200bf7f8dbd4f8aa03c8be07a6dfc4328fa50 (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.conf9
-rw-r--r--mkspecs/features/simd.prf41
-rw-r--r--mkspecs/linux-icc/qmake.conf7
-rw-r--r--mkspecs/macx-icc/qmake.conf7
-rw-r--r--mkspecs/win32-icc/qmake.conf7
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