Remove detection for MMX support and related technology

This also removes the check for SSE, but the check for SSE2 and
further technologies is kept. If SSE2 is present, then SSE is too. We
don't have any code that uses the original SSE instructions only.

Remove the CMOV detection, since we don't use that anywhere and we're
not likely to ever use them..

Change-Id: I3faf2c555ad1c007c52a54644138902f716c1fe1
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
This commit is contained in:
Thiago Macieira 2011-12-29 19:24:54 -02:00 committed by Qt by Nokia
parent accfdc85e5
commit a1b30b49ef
12 changed files with 17 additions and 330 deletions

View File

@ -1,51 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** This file is part of the config.tests of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <mm3dnow.h>
#if defined(__GNUC__) && __GNUC__ < 4 && __GNUC_MINOR__ < 3
#error GCC < 3.2 is known to create internal compiler errors with our MMX code
#endif
int main(int, char**)
{
_m_femms();
return 0;
}

View File

@ -1,3 +0,0 @@
SOURCES = 3dnow.cpp
CONFIG -= x11 qt
mac:CONFIG -= app_bundle

View File

@ -1,51 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** This file is part of the config.tests of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <mmintrin.h>
#if defined(__GNUC__) && __GNUC__ < 4 && __GNUC_MINOR__ < 3
#error GCC < 3.2 is known to create internal compiler errors with our MMX code
#endif
int main(int, char**)
{
_mm_empty();
return 0;
}

View File

@ -1,3 +0,0 @@
SOURCES = mmx.cpp
CONFIG -= x11 qt
mac:CONFIG -= app_bundle

View File

@ -1,52 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** This file is part of the config.tests of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <xmmintrin.h>
#if defined(__GNUC__) && __GNUC__ < 4 && __GNUC_MINOR__ < 3
#error GCC < 3.2 is known to create internal compiler errors with our MMX code
#endif
int main(int, char**)
{
__m64 a = _mm_setzero_si64();
a = _mm_shuffle_pi16(a, 0);
return _m_to_int(a);
}

View File

@ -1,3 +0,0 @@
SOURCES = sse.cpp
CONFIG -= x11 qt
mac:CONFIG -= app_bundle

63
configure vendored
View File

@ -725,9 +725,6 @@ CFG_PRECOMPILE=auto
CFG_SEPARATE_DEBUG_INFO=no
CFG_SEPARATE_DEBUG_INFO_NOCOPY=no
CFG_REDUCE_EXPORTS=auto
CFG_MMX=auto
CFG_3DNOW=auto
CFG_SSE=auto
CFG_SSE2=auto
CFG_SSE3=auto
CFG_SSSE3=auto
@ -1471,27 +1468,6 @@ while [ "$#" -gt 0 ]; do
UNKNOWN_OPT=yes
fi
;;
mmx)
if [ "$VAL" = "no" ]; then
CFG_MMX="$VAL"
else
UNKNOWN_OPT=yes
fi
;;
3dnow)
if [ "$VAL" = "no" ]; then
CFG_3DNOW="$VAL"
else
UNKNOWN_OPT=yes
fi
;;
sse)
if [ "$VAL" = "no" ]; then
CFG_SSE="$VAL"
else
UNKNOWN_OPT=yes
fi
;;
sse2)
if [ "$VAL" = "no" ]; then
CFG_SSE2="$VAL"
@ -2927,7 +2903,7 @@ Usage: $relconf [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir
[-nomake <part>] [-R <string>] [-l <string>] [-no-rpath] [-rpath] [-continue]
[-verbose] [-v] [-silent] [-no-nis] [-nis] [-no-cups] [-cups] [-no-iconv]
[-iconv] [-no-pch] [-pch] [-no-dbus] [-dbus] [-dbus-linked] [-no-gui]
[-no-separate-debug-info] [-no-mmx] [-no-3dnow] [-no-sse] [-no-sse2]
[-no-separate-debug-info] [-no-sse2]
[-no-sse3] [-no-ssse3] [-no-sse4.1] [-no-sse4.2] [-no-avx] [-no-neon]
[-qtnamespace <namespace>] [-qtlibinfix <infix>] [-separate-debug-info]
[-no-phonon-backend] [-phonon-backend] [-no-media-backend] [-media-backend]
@ -3099,9 +3075,6 @@ fi
cat << EOF
-no-mmx ............ Do not compile with use of MMX instructions.
-no-3dnow .......... Do not compile with use of 3DNOW instructions.
-no-sse ............ Do not compile with use of SSE instructions.
-no-sse2 ........... Do not compile with use of SSE2 instructions.
-no-sse3 ........... Do not compile with use of SSE3 instructions.
-no-ssse3 .......... Do not compile with use of SSSE3 instructions.
@ -3963,33 +3936,6 @@ else
CFG_USE_FLOATMATH=no
fi
# detect mmx support
if [ "${CFG_MMX}" = "auto" ]; then
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/mmx "mmx" $L_FLAGS $I_FLAGS $l_FLAGS "-mmmx"; then
CFG_MMX=yes
else
CFG_MMX=no
fi
fi
# detect 3dnow support
if [ "${CFG_3DNOW}" = "auto" ]; then
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/3dnow "3dnow" $L_FLAGS $I_FLAGS $l_FLAGS "-m3dnow"; then
CFG_3DNOW=yes
else
CFG_3DNOW=no
fi
fi
# detect sse support
if [ "${CFG_SSE}" = "auto" ]; then
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/sse "sse" $L_FLAGS $I_FLAGS $l_FLAGS "-msse"; then
CFG_SSE=yes
else
CFG_SSE=no
fi
fi
# detect sse2 support
if [ "${CFG_SSE2}" = "auto" ]; then
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/sse2 "sse2" $L_FLAGS $I_FLAGS $l_FLAGS "-msse2"; then
@ -5603,9 +5549,6 @@ fi
if [ "$CFG_SEPARATE_DEBUG_INFO_NOCOPY" = "yes" ] ; then
QT_CONFIG="$QT_CONFIG separate_debug_info_nocopy"
fi
[ "$CFG_MMX" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG mmx"
[ "$CFG_3DNOW" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG 3dnow"
[ "$CFG_SSE" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse"
[ "$CFG_SSE2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse2"
[ "$CFG_SSE3" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse3"
[ "$CFG_SSSE3" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG ssse3"
@ -6565,8 +6508,8 @@ echo "Declarative debugging ...$CFG_DECLARATIVE_DEBUG"
echo "STL support ............ $CFG_STL"
echo "PCH support ............ $CFG_PRECOMPILE"
if [ "$CFG_ARCH" = "i386" -o "$CFG_ARCH" = "x86_64" ]; then
echo "MMX/3DNOW/SSE/SSE2/SSE3. ${CFG_MMX}/${CFG_3DNOW}/${CFG_SSE}/${CFG_SSE2}/${CFG_SSE3}"
echo "SSSE3/SSE4.1/SSE4.2..... ${CFG_SSSE3}/${CFG_SSE4_1}/${CFG_SSE4_2}"
echo "SSE2/SSE3/SSSE3......... ${CFG_SSE2}/${CFG_SSE3}/${CFG_SSSE3}"
echo "SSE4.1/SSE4.2........... ${CFG_SSSE3}/${CFG_SSE4_1}/${CFG_SSE4_2}"
echo "AVX..................... ${CFG_AVX}"
elif [ "$CFG_ARCH" = "arm" ]; then
echo "iWMMXt support ......... ${CFG_IWMMXT}"

View File

@ -204,9 +204,6 @@ mac {
}
#SIMD defines:
mmx:DEFINES += QT_HAVE_MMX
3dnow:DEFINES += QT_HAVE_3DNOW
sse:DEFINES += QT_HAVE_SSE QT_HAVE_MMXEXT
sse2:DEFINES += QT_HAVE_SSE2
sse3:DEFINES += QT_HAVE_SSE3
ssse3:DEFINES += QT_HAVE_SSSE3

View File

@ -88,14 +88,6 @@ static inline uint detectProcessorFeatures()
}
#elif defined(_X86_)
features = 0;
#if defined QT_HAVE_MMX
if (IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE))
features |= MMX;
#endif
#if defined QT_HAVE_3DNOW
if (IsProcessorFeaturePresent(PF_3DNOW_INSTRUCTIONS_AVAILABLE))
features |= MMX3DNOW;
#endif
return features;
#endif
features = 0;
@ -255,18 +247,6 @@ static inline uint detectProcessorFeatures()
// result now contains the standard feature bits
if (result & (1u << 15))
features |= CMOV;
if (result & (1u << 23))
features |= MMX;
if (extended_result & (1u << 22))
features |= MMXEXT;
if (extended_result & (1u << 31))
features |= MMX3DNOW;
if (extended_result & (1u << 30))
features |= MMX3DNOWEXT;
if (result & (1u << 25))
features |= SSE;
if (result & (1u << 26))
features |= SSE2;
if (feature_result & (1u))
@ -286,7 +266,7 @@ static inline uint detectProcessorFeatures()
#elif defined(__x86_64) || defined(Q_OS_WIN64)
static inline uint detectProcessorFeatures()
{
uint features = MMX|SSE|SSE2|CMOV;
uint features = SSE2;
uint feature_result = 0;
#if defined (Q_OS_WIN64)
@ -330,15 +310,9 @@ static inline uint detectProcessorFeatures()
/*
* Use kdesdk/scripts/generate_string_table.pl to update the table below.
* Here's the data (don't forget the ONE leading space):
mmx
mmxext
mmx3dnow
mmx3dnowext
sse
sse2
cmov
iwmmxt
neon
sse2
sse3
ssse3
sse4.1
@ -348,15 +322,9 @@ static inline uint detectProcessorFeatures()
// begin generated
static const char features_string[] =
" mmx\0"
" mmxext\0"
" mmx3dnow\0"
" mmx3dnowext\0"
" sse\0"
" sse2\0"
" cmov\0"
" iwmmxt\0"
" neon\0"
" sse2\0"
" sse3\0"
" ssse3\0"
" sse4.1\0"
@ -365,8 +333,8 @@ static const char features_string[] =
"\0";
static const int features_indices[] = {
0, 5, 13, 23, 36, 41, 47, 53,
61, 67, 73, 80, 88, 96, -1
0, 8, 14, 20, 26, 33, 41, 49,
-1
};
// end generated

View File

@ -133,30 +133,19 @@ QT_BEGIN_HEADER
#endif
#endif
// 3D now intrinsics
#if defined(QT_HAVE_3DNOW)
#include <mm3dnow.h>
#endif
QT_BEGIN_NAMESPACE
enum CPUFeatures {
None = 0,
MMX = 0x1,
MMXEXT = 0x2,
MMX3DNOW = 0x4,
MMX3DNOWEXT = 0x8,
SSE = 0x10,
SSE2 = 0x20,
CMOV = 0x40,
IWMMXT = 0x80,
NEON = 0x100,
SSE3 = 0x200,
SSSE3 = 0x400,
SSE4_1 = 0x800,
SSE4_2 = 0x1000,
AVX = 0x2000
IWMMXT = 0x1,
NEON = 0x2,
SSE2 = 0x4,
SSE3 = 0x8,
SSSE3 = 0x10,
SSE4_1 = 0x20,
SSE4_2 = 0x40,
AVX = 0x80
};
Q_CORE_EXPORT uint qDetectCPUFeatures();

View File

@ -144,10 +144,6 @@ win32:!contains(QT_CONFIG, directwrite) {
QMAKE_EXTRA_COMPILERS += iwmmxt_compiler
}
} else {
mmx: SOURCES += $$MMX_SOURCES
3dnow: SOURCES += $$MMX3DNOW_SOURCES
3dnow:sse: SOURCES += $$SSE3DNOW_SOURCES
sse: SOURCES += $$SSE_SOURCES
sse2: SOURCES += $$SSE2_SOURCES
ssse3: SOURCES += $$SSSE3_SOURCES
iwmmxt: SOURCES += $$IWMMXT_SOURCES

View File

@ -200,9 +200,6 @@ Configure::Configure(int& argc, char** argv)
dictionary[ "EXCEPTIONS" ] = "yes";
dictionary[ "WIDGETS" ] = "yes";
dictionary[ "RTTI" ] = "yes";
dictionary[ "MMX" ] = "auto";
dictionary[ "3DNOW" ] = "auto";
dictionary[ "SSE" ] = "auto";
dictionary[ "SSE2" ] = "auto";
dictionary[ "IWMMXT" ] = "auto";
dictionary[ "SYNCQT" ] = "auto";
@ -797,18 +794,6 @@ void Configure::parseCmdLine()
cout << "Setting accessibility to NO" << endl;
}
else if (configCmdLine.at(i) == "-no-mmx")
dictionary[ "MMX" ] = "no";
else if (configCmdLine.at(i) == "-mmx")
dictionary[ "MMX" ] = "yes";
else if (configCmdLine.at(i) == "-no-3dnow")
dictionary[ "3DNOW" ] = "no";
else if (configCmdLine.at(i) == "-3dnow")
dictionary[ "3DNOW" ] = "yes";
else if (configCmdLine.at(i) == "-no-sse")
dictionary[ "SSE" ] = "no";
else if (configCmdLine.at(i) == "-sse")
dictionary[ "SSE" ] = "yes";
else if (configCmdLine.at(i) == "-no-sse2")
dictionary[ "SSE2" ] = "no";
else if (configCmdLine.at(i) == "-sse2")
@ -1374,10 +1359,7 @@ void Configure::applySpecSpecifics()
dictionary[ "STL" ] = "no";
dictionary[ "EXCEPTIONS" ] = "no";
dictionary[ "RTTI" ] = "no";
dictionary[ "3DNOW" ] = "no";
dictionary[ "SSE" ] = "no";
dictionary[ "SSE2" ] = "no";
dictionary[ "MMX" ] = "no";
dictionary[ "IWMMXT" ] = "no";
dictionary[ "CE_CRT" ] = "yes";
dictionary[ "DIRECTSHOW" ] = "no";
@ -1468,7 +1450,7 @@ bool Configure::displayHelp()
"[-qt-zlib] [-system-zlib] [-qt-pcre] [-system-pcre] [-no-gif]\n"
"[-no-libpng] [-qt-libpng] [-system-libpng]\n"
"[-no-libjpeg] [-qt-libjpeg] [-system-libjpeg]\n"
"[-mmx] [-no-mmx] [-3dnow] [-no-3dnow] [-sse] [-no-sse] [-sse2] [-no-sse2]\n"
"[-sse2] [-no-sse2]\n"
"[-no-iwmmxt] [-iwmmxt] [-openssl] [-openssl-linked]\n"
"[-no-openssl] [-no-dbus] [-dbus] [-dbus-linked] [-platform <spec>]\n"
"[-qtnamespace <namespace>] [-qtlibinfix <infix>] [-no-phonon]\n"
@ -1611,12 +1593,6 @@ bool Configure::displayHelp()
desc("RTTI", "no", "-no-rtti", "Do not compile runtime type information.");
desc("RTTI", "yes", "-rtti", "Compile runtime type information.\n");
desc("MMX", "no", "-no-mmx", "Do not compile with use of MMX instructions");
desc("MMX", "yes", "-mmx", "Compile with use of MMX instructions");
desc("3DNOW", "no", "-no-3dnow", "Do not compile with use of 3DNOW instructions");
desc("3DNOW", "yes", "-3dnow", "Compile with use of 3DNOW instructions");
desc("SSE", "no", "-no-sse", "Do not compile with use of SSE instructions");
desc("SSE", "yes", "-sse", "Compile with use of SSE instructions");
desc("SSE2", "no", "-no-sse2", "Do not compile with use of SSE2 instructions");
desc("SSE2", "yes", "-sse2", "Compile with use of SSE2 instructions");
desc("OPENSSL", "no", "-no-openssl", "Do not compile in OpenSSL support");
@ -1862,10 +1838,6 @@ bool Configure::checkAvailability(const QString &part)
available = (dictionary.value("XQMAKESPEC").startsWith("wince"));
else if (part == "SSE2")
available = (dictionary.value("QMAKESPEC") != "win32-msvc");
else if (part == "3DNOW")
available = (dictionary.value("QMAKESPEC") != "win32-msvc") && (dictionary.value("QMAKESPEC") != "win32-icc") && findFile("mm3dnow.h");
else if (part == "MMX" || part == "SSE")
available = (dictionary.value("QMAKESPEC") != "win32-msvc");
else if (part == "OPENSSL")
available = findFile("openssl\\ssl.h");
else if (part == "DBUS")
@ -1974,12 +1946,6 @@ void Configure::autoDetection()
dictionary["SQL_SQLITE2"] = checkAvailability("SQL_SQLITE2") ? defaultTo("SQL_SQLITE2") : "no";
if (dictionary["SQL_IBASE"] == "auto")
dictionary["SQL_IBASE"] = checkAvailability("SQL_IBASE") ? defaultTo("SQL_IBASE") : "no";
if (dictionary["MMX"] == "auto")
dictionary["MMX"] = checkAvailability("MMX") ? "yes" : "no";
if (dictionary["3DNOW"] == "auto")
dictionary["3DNOW"] = checkAvailability("3DNOW") ? "yes" : "no";
if (dictionary["SSE"] == "auto")
dictionary["SSE"] = checkAvailability("SSE") ? "yes" : "no";
if (dictionary["SSE2"] == "auto")
dictionary["SSE2"] = checkAvailability("SSE2") ? "yes" : "no";
if (dictionary["IWMMXT"] == "auto")
@ -2621,12 +2587,6 @@ void Configure::generateQConfigPri()
configStream << " exceptions_off";
if (dictionary[ "RTTI" ] == "yes")
configStream << " rtti";
if (dictionary[ "MMX" ] == "yes")
configStream << " mmx";
if (dictionary[ "3DNOW" ] == "yes")
configStream << " 3dnow";
if (dictionary[ "SSE" ] == "yes")
configStream << " sse";
if (dictionary[ "SSE2" ] == "yes")
configStream << " sse2";
if (dictionary[ "IWMMXT" ] == "yes")
@ -3034,9 +2994,6 @@ void Configure::displayConfig()
cout << "STL support................." << dictionary[ "STL" ] << endl;
cout << "Exception support..........." << dictionary[ "EXCEPTIONS" ] << endl;
cout << "RTTI support................" << dictionary[ "RTTI" ] << endl;
cout << "MMX support................." << dictionary[ "MMX" ] << endl;
cout << "3DNOW support..............." << dictionary[ "3DNOW" ] << endl;
cout << "SSE support................." << dictionary[ "SSE" ] << endl;
cout << "SSE2 support................" << dictionary[ "SSE2" ] << endl;
cout << "IWMMXT support.............." << dictionary[ "IWMMXT" ] << endl;
cout << "OpenGL support.............." << dictionary[ "OPENGL" ] << endl;