summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2014-06-24 17:03:53 -0700
committerThiago Macieira <thiago.macieira@intel.com>2014-07-25 17:48:39 +0200
commit86ac3a98b50a29882e896a0703ec9201e71fe989 (patch)
tree1b3fb36e1b221a1ff415b9a40ae190492b9bc3bf
parent875ba6e80c9a70dd1fc0f6026f41450cb6fb8adb (diff)
Restore Neon "detection" in Qt
We don't actually detect whether the compiler can create Neon code or provides Neon intrinsics. Most of them do, so that test would be mostly moot. We removed the detection previously because we couldn't automatically enable Neon due to leakage of instructions outside the areas protected at runtime. Instead, we rely on the mkspec properly passing the necessary flags that enable Neon support. This commit does not change that. All it does is verify whether the arch detection found "neon" as part of the target CPU features. In other words, it moves the test that was in simd.prf to configure. It does fix the Neon detection in configure.exe, which was always failing for trying to run a test that didn't exist (config.tests/unix/neon). Change-Id: Id561dfb2db7d3dca7b8c29afef63181693bdc0aa Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
-rwxr-xr-xconfigure11
-rw-r--r--mkspecs/features/simd.prf2
-rw-r--r--src/gui/image/image.pri4
-rw-r--r--src/gui/painting/painting.pri6
-rw-r--r--tools/configure/configureapp.cpp2
5 files changed, 17 insertions, 8 deletions
diff --git a/configure b/configure
index 9ac4bfadb6..dbd0c32107 100755
--- a/configure
+++ b/configure
@@ -4127,6 +4127,16 @@ if [ "$CFG_IWMMXT" = "yes" ]; then
fi
fi
+# check Neon support
+if [ "$CFG_NEON" = "auto" ]; then
+ # no compile test, just check what the compiler has
+ case "$CFG_CPUFEATURES" in
+ *neon*)
+ CFG_NEON=yes
+ ;;
+ esac
+fi
+
# detect mips_dsp support
if [ "$CFG_ARCH" = "mips" ] && [ "${CFG_MIPS_DSP}" = "auto" ]; then
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/mips_dsp "mips_dsp" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then
@@ -5634,6 +5644,7 @@ fi
[ "$CFG_AVX" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG avx"
[ "$CFG_AVX2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG avx2"
[ "$CFG_IWMMXT" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG iwmmxt"
+[ "$CFG_NEON" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG neon"
if [ "$CFG_ARCH" = "mips" ]; then
[ "$CFG_MIPS_DSP" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG mips_dsp"
[ "$CFG_MIPS_DSPR2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG mips_dspr2"
diff --git a/mkspecs/features/simd.prf b/mkspecs/features/simd.prf
index f9c7486317..258a1f63e2 100644
--- a/mkspecs/features/simd.prf
+++ b/mkspecs/features/simd.prf
@@ -117,7 +117,7 @@ gcc { # includes intel_icc and clang variants
silent:avx2_compiler.commands = @echo compiling[avx2] ${QMAKE_FILE_IN} && $$avx2_compiler.commands
QMAKE_EXTRA_COMPILERS += avx2_compiler
}
- contains(QT_CPU_FEATURES.$$QT_ARCH, neon) {
+ neon {
HEADERS += $$NEON_HEADERS
neon_compiler.commands = $$QMAKE_CXX -c $(CXXFLAGS)
diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri
index bbdd0f3da7..ba4328c16e 100644
--- a/src/gui/image/image.pri
+++ b/src/gui/image/image.pri
@@ -78,12 +78,10 @@ contains(QT_CONFIG, jpeg):include($$PWD/qjpeghandler.pri)
contains(QT_CONFIG, gif):include($$PWD/qgifhandler.pri)
# SIMD
-contains(QT_CPU_FEATURES.$$QT_ARCH, neon) {
- SOURCES += image/qimage_neon.cpp
-}
contains(QT_CPU_FEATURES.$$QT_ARCH, sse2) {
SOURCES += image/qimage_sse2.cpp
SSSE3_SOURCES += image/qimage_ssse3.cpp
}
+NEON_SOURCES += image/qimage_neon.cpp
MIPS_DSPR2_SOURCES += image/qimage_mips_dspr2.cpp
MIPS_DSPR2_ASM += image/qimage_mips_dspr2_asm.S
diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri
index bc4b2f27d8..8fc0156c02 100644
--- a/src/gui/painting/painting.pri
+++ b/src/gui/painting/painting.pri
@@ -97,10 +97,10 @@ contains(QT_CPU_FEATURES.$$QT_ARCH, sse2) {
}
IWMMXT_SOURCES += painting/qdrawhelper_iwmmxt.cpp
-!ios:contains(QT_CPU_FEATURES.$$QT_ARCH, neon) {
+!ios:neon {
CONFIG += no_clang_integrated_as
- SOURCES += painting/qdrawhelper_neon.cpp
- HEADERS += painting/qdrawhelper_neon_p.h
+ NEON_SOURCES += painting/qdrawhelper_neon.cpp
+ NEON_HEADERS += painting/qdrawhelper_neon_p.h
NEON_ASM += ../3rdparty/pixman/pixman-arm-neon-asm.S painting/qdrawhelper_neon_asm.S
}
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 21bc896769..33531252bf 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -2280,7 +2280,7 @@ bool Configure::checkAvailability(const QString &part)
available = (platform() == QNX || platform() == BLACKBERRY)
&& tryCompileProject("unix/lgmon");
} else if (part == "NEON") {
- available = (dictionary["QT_ARCH"] == "arm") && tryCompileProject("unix/neon");
+ available = dictionary["QT_CPU_FEATURES"].contains("neon");
} else if (part == "FONT_CONFIG") {
available = tryCompileProject("unix/fontconfig");
}