From 86ac3a98b50a29882e896a0703ec9201e71fe989 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 24 Jun 2014 17:03:53 -0700 Subject: 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 --- configure | 11 +++++++++++ mkspecs/features/simd.prf | 2 +- src/gui/image/image.pri | 4 +--- src/gui/painting/painting.pri | 6 +++--- tools/configure/configureapp.cpp | 2 +- 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"); } -- cgit v1.2.3