Remove the last remnants of iWMMXt in Qt
This code hasn't been tested for at least 4 years. It's not maintained and probably doesn't work. Change-Id: I4b9a5179e34111b400914f91caa6b741b69771bb Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
This commit is contained in:
parent
9c22b5c30a
commit
11bbacf194
@ -1,48 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the config.tests of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:LGPL$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and Digia. For licensing terms and
|
|
||||||
** conditions see http://qt.digia.com/licensing. For further information
|
|
||||||
** use the contact form at http://qt.digia.com/contact-us.
|
|
||||||
**
|
|
||||||
** GNU Lesser General Public License Usage
|
|
||||||
** Alternatively, 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, Digia gives you certain additional
|
|
||||||
** rights. These rights are described in the Digia 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.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include <mmintrin.h>
|
|
||||||
|
|
||||||
int main(int, char**)
|
|
||||||
{
|
|
||||||
_mm_unpackhi_pi16(_mm_setzero_si64(), _mm_setzero_si64());
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,4 +0,0 @@
|
|||||||
SOURCES = iwmmxt.cpp
|
|
||||||
CONFIG -= x11 qt
|
|
||||||
isEmpty(QMAKE_CFLAGS_IWMMXT):error("This compiler does not support iWMMXt")
|
|
||||||
else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_IWMMXT
|
|
18
configure
vendored
18
configure
vendored
@ -683,7 +683,6 @@ CFG_AVX2=auto
|
|||||||
CFG_REDUCE_RELOCATIONS=auto
|
CFG_REDUCE_RELOCATIONS=auto
|
||||||
CFG_ACCESSIBILITY=auto
|
CFG_ACCESSIBILITY=auto
|
||||||
CFG_ACCESSIBILITY_ATSPI_BRIDGE=no # will be enabled depending on dbus and accessibility being enabled
|
CFG_ACCESSIBILITY_ATSPI_BRIDGE=no # will be enabled depending on dbus and accessibility being enabled
|
||||||
CFG_IWMMXT=no
|
|
||||||
CFG_NEON=auto
|
CFG_NEON=auto
|
||||||
CFG_MIPS_DSP=auto
|
CFG_MIPS_DSP=auto
|
||||||
CFG_MIPS_DSPR2=auto
|
CFG_MIPS_DSPR2=auto
|
||||||
@ -1569,9 +1568,6 @@ while [ "$#" -gt 0 ]; do
|
|||||||
UNKNOWN_OPT=yes
|
UNKNOWN_OPT=yes
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
iwmmxt)
|
|
||||||
CFG_IWMMXT="yes"
|
|
||||||
;;
|
|
||||||
mips_dsp)
|
mips_dsp)
|
||||||
if [ "$VAL" = "no" ]; then
|
if [ "$VAL" = "no" ]; then
|
||||||
CFG_MIPS_DSP="$VAL"
|
CFG_MIPS_DSP="$VAL"
|
||||||
@ -4117,16 +4113,6 @@ if [ "${CFG_AVX2}" = "auto" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check iWMMXt support
|
|
||||||
if [ "$CFG_IWMMXT" = "yes" ]; then
|
|
||||||
compileTest unix/iwmmxt "iwmmxt"
|
|
||||||
if [ $? != "0" ]; then
|
|
||||||
echo "The iWMMXt functionality test failed!"
|
|
||||||
echo " Please make sure your compiler supports iWMMXt intrinsics!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check Neon support
|
# check Neon support
|
||||||
if [ "$CFG_NEON" = "auto" ]; then
|
if [ "$CFG_NEON" = "auto" ]; then
|
||||||
# no compile test, just check what the compiler has
|
# no compile test, just check what the compiler has
|
||||||
@ -5651,7 +5637,6 @@ fi
|
|||||||
[ "$CFG_SSE4_2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse4_2"
|
[ "$CFG_SSE4_2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse4_2"
|
||||||
[ "$CFG_AVX" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG avx"
|
[ "$CFG_AVX" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG avx"
|
||||||
[ "$CFG_AVX2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG avx2"
|
[ "$CFG_AVX2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG avx2"
|
||||||
[ "$CFG_IWMMXT" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG iwmmxt"
|
|
||||||
[ "$CFG_NEON" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG neon"
|
[ "$CFG_NEON" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG neon"
|
||||||
if [ "$CFG_ARCH" = "mips" ]; then
|
if [ "$CFG_ARCH" = "mips" ]; then
|
||||||
[ "$CFG_MIPS_DSP" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG mips_dsp"
|
[ "$CFG_MIPS_DSP" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG mips_dsp"
|
||||||
@ -6079,7 +6064,6 @@ fi
|
|||||||
echo "" >>"$outpath/src/corelib/global/qconfig.h.new"
|
echo "" >>"$outpath/src/corelib/global/qconfig.h.new"
|
||||||
echo "// Compiler sub-arch support" >>"$outpath/src/corelib/global/qconfig.h.new"
|
echo "// Compiler sub-arch support" >>"$outpath/src/corelib/global/qconfig.h.new"
|
||||||
for SUBARCH in SSE2 SSE3 SSSE3 SSE4_1 SSE4_2 AVX AVX2 \
|
for SUBARCH in SSE2 SSE3 SSSE3 SSE4_1 SSE4_2 AVX AVX2 \
|
||||||
IWMMXT \
|
|
||||||
MIPS_DSP MIPS_DSPR2; do
|
MIPS_DSP MIPS_DSPR2; do
|
||||||
eval "VAL=\$CFG_$SUBARCH"
|
eval "VAL=\$CFG_$SUBARCH"
|
||||||
case "$VAL" in
|
case "$VAL" in
|
||||||
@ -6524,7 +6508,7 @@ if [ "$CFG_ARCH" = "i386" -o "$CFG_ARCH" = "x86_64" ]; then
|
|||||||
echo " SSE4.1/SSE4.2 ........ ${CFG_SSE4_1}/${CFG_SSE4_2}"
|
echo " SSE4.1/SSE4.2 ........ ${CFG_SSE4_1}/${CFG_SSE4_2}"
|
||||||
echo " AVX/AVX2 ............. ${CFG_AVX}/${CFG_AVX2}"
|
echo " AVX/AVX2 ............. ${CFG_AVX}/${CFG_AVX2}"
|
||||||
elif [ "$CFG_ARCH" = "arm" ]; then
|
elif [ "$CFG_ARCH" = "arm" ]; then
|
||||||
echo " iWMMXt/Neon .......... ${CFG_IWMMXT}/${CFG_NEON}"
|
echo " Neon ................. ${CFG_NEON}"
|
||||||
elif [ "$CFG_ARCH" = "mips" ]; then
|
elif [ "$CFG_ARCH" = "mips" ]; then
|
||||||
echo " DSP/DSPr2 ............ ${CFG_MIPS_DSP}/${CFG_MIPS_DSPR2}"
|
echo " DSP/DSPr2 ............ ${CFG_MIPS_DSP}/${CFG_MIPS_DSPR2}"
|
||||||
fi
|
fi
|
||||||
|
@ -79,5 +79,4 @@ QMAKE_CFLAGS_SSE4_1 += -msse4.1
|
|||||||
QMAKE_CFLAGS_SSE4_2 += -msse4.2
|
QMAKE_CFLAGS_SSE4_2 += -msse4.2
|
||||||
QMAKE_CFLAGS_AVX += -mavx
|
QMAKE_CFLAGS_AVX += -mavx
|
||||||
QMAKE_CFLAGS_AVX2 += -mavx2
|
QMAKE_CFLAGS_AVX2 += -mavx2
|
||||||
QMAKE_CFLAGS_IWMMXT += -mcpu=iwmmxt
|
|
||||||
QMAKE_CFLAGS_NEON += -mfpu=neon
|
QMAKE_CFLAGS_NEON += -mfpu=neon
|
||||||
|
@ -29,7 +29,6 @@ QMAKE_CFLAGS_SSE4_1 += -msse4.1
|
|||||||
QMAKE_CFLAGS_SSE4_2 += -msse4.2
|
QMAKE_CFLAGS_SSE4_2 += -msse4.2
|
||||||
QMAKE_CFLAGS_AVX += -mavx
|
QMAKE_CFLAGS_AVX += -mavx
|
||||||
QMAKE_CFLAGS_AVX2 += -mavx2
|
QMAKE_CFLAGS_AVX2 += -mavx2
|
||||||
QMAKE_CFLAGS_IWMMXT += -mcpu=iwmmxt
|
|
||||||
QMAKE_CFLAGS_NEON += -mfpu=neon
|
QMAKE_CFLAGS_NEON += -mfpu=neon
|
||||||
|
|
||||||
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS -lang-c++
|
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS -lang-c++
|
||||||
|
@ -40,7 +40,6 @@ QMAKE_CFLAGS_SSE4_1 = -msse4.1
|
|||||||
QMAKE_CFLAGS_SSE4_2 = -msse4.2
|
QMAKE_CFLAGS_SSE4_2 = -msse4.2
|
||||||
QMAKE_CFLAGS_AVX = -mavx
|
QMAKE_CFLAGS_AVX = -mavx
|
||||||
QMAKE_CFLAGS_AVX2 = -mavx2
|
QMAKE_CFLAGS_AVX2 = -mavx2
|
||||||
QMAKE_CFLAGS_IWMMXT = -mcpu=iwmmxt
|
|
||||||
QMAKE_CFLAGS_NEON = -mfpu=neon
|
QMAKE_CFLAGS_NEON = -mfpu=neon
|
||||||
|
|
||||||
QMAKE_CXX = $${CROSS_COMPILE}g++
|
QMAKE_CXX = $${CROSS_COMPILE}g++
|
||||||
|
@ -1069,7 +1069,6 @@
|
|||||||
# undef QT_COMPILER_SUPPORTS_AVX2
|
# undef QT_COMPILER_SUPPORTS_AVX2
|
||||||
#endif
|
#endif
|
||||||
#if !defined(Q_PROCESSOR_ARM)
|
#if !defined(Q_PROCESSOR_ARM)
|
||||||
# undef QT_COMPILER_SUPPORTS_IWMMXT
|
|
||||||
# undef QT_COMPILER_SUPPORTS_NEON
|
# undef QT_COMPILER_SUPPORTS_NEON
|
||||||
#endif
|
#endif
|
||||||
#if !defined(Q_PROCESSOR_MIPS)
|
#if !defined(Q_PROCESSOR_MIPS)
|
||||||
|
@ -54,14 +54,13 @@
|
|||||||
# include <intrin.h>
|
# include <intrin.h>
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#elif defined(Q_OS_LINUX) && (defined(Q_PROCESSOR_ARM) || defined(Q_PROCESSOR_MIPS_32) || defined(QT_COMPILER_SUPPORTS_IWMMXT))
|
#elif defined(Q_OS_LINUX) && (defined(Q_PROCESSOR_ARM) || defined(Q_PROCESSOR_MIPS_32))
|
||||||
#include "private/qcore_unix_p.h"
|
#include "private/qcore_unix_p.h"
|
||||||
|
|
||||||
// the kernel header definitions for HWCAP_*
|
// the kernel header definitions for HWCAP_*
|
||||||
// (the ones we need/may need anyway)
|
// (the ones we need/may need anyway)
|
||||||
|
|
||||||
// copied from <asm/hwcap.h> (ARM)
|
// copied from <asm/hwcap.h> (ARM)
|
||||||
#define HWCAP_IWMMXT 512
|
|
||||||
#define HWCAP_CRUNCH 1024
|
#define HWCAP_CRUNCH 1024
|
||||||
#define HWCAP_THUMBEE 2048
|
#define HWCAP_THUMBEE 2048
|
||||||
#define HWCAP_NEON 4096
|
#define HWCAP_NEON 4096
|
||||||
@ -86,8 +85,6 @@ static inline uint detectProcessorFeatures()
|
|||||||
uint features = 0;
|
uint features = 0;
|
||||||
|
|
||||||
#if defined (ARM)
|
#if defined (ARM)
|
||||||
if (IsProcessorFeaturePresent(PF_ARM_INTEL_WMMX))
|
|
||||||
features |= IWMMXT;
|
|
||||||
# ifdef PF_ARM_NEON
|
# ifdef PF_ARM_NEON
|
||||||
if (IsProcessorFeaturePresent(PF_ARM_NEON))
|
if (IsProcessorFeaturePresent(PF_ARM_NEON))
|
||||||
features |= ARM_NEON;
|
features |= ARM_NEON;
|
||||||
@ -101,7 +98,7 @@ static inline uint detectProcessorFeatures()
|
|||||||
return features;
|
return features;
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(Q_PROCESSOR_ARM) || defined(QT_COMPILER_SUPPORTS_IWMMXT)
|
#elif defined(Q_PROCESSOR_ARM)
|
||||||
static inline uint detectProcessorFeatures()
|
static inline uint detectProcessorFeatures()
|
||||||
{
|
{
|
||||||
uint features = 0;
|
uint features = 0;
|
||||||
@ -121,8 +118,6 @@ static inline uint detectProcessorFeatures()
|
|||||||
int max = nread / (sizeof vector[0]);
|
int max = nread / (sizeof vector[0]);
|
||||||
for (int i = 0; i < max; i += 2)
|
for (int i = 0; i < max; i += 2)
|
||||||
if (vector[i] == AT_HWCAP) {
|
if (vector[i] == AT_HWCAP) {
|
||||||
if (vector[i+1] & HWCAP_IWMMXT)
|
|
||||||
features |= IWMMXT;
|
|
||||||
if (vector[i+1] & HWCAP_NEON)
|
if (vector[i+1] & HWCAP_NEON)
|
||||||
features |= NEON;
|
features |= NEON;
|
||||||
break;
|
break;
|
||||||
@ -135,10 +130,7 @@ static inline uint detectProcessorFeatures()
|
|||||||
// fall back if /proc/self/auxv wasn't found
|
// fall back if /proc/self/auxv wasn't found
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(QT_COMPILER_SUPPORTS_IWMMXT)
|
#if defined(__ARM_NEON__)
|
||||||
// runtime detection only available when running as a previlegied process
|
|
||||||
features = IWMMXT;
|
|
||||||
#elif defined(__ARM_NEON__)
|
|
||||||
features = NEON;
|
features = NEON;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -470,7 +462,7 @@ static inline uint detectProcessorFeatures()
|
|||||||
/*
|
/*
|
||||||
* Use kdesdk/scripts/generate_string_table.pl to update the table below.
|
* Use kdesdk/scripts/generate_string_table.pl to update the table below.
|
||||||
* Here's the data (don't forget the ONE leading space):
|
* Here's the data (don't forget the ONE leading space):
|
||||||
iwmmxt
|
|
||||||
neon
|
neon
|
||||||
sse2
|
sse2
|
||||||
sse3
|
sse3
|
||||||
@ -487,7 +479,7 @@ static inline uint detectProcessorFeatures()
|
|||||||
|
|
||||||
// begin generated
|
// begin generated
|
||||||
static const char features_string[] =
|
static const char features_string[] =
|
||||||
" iwmmxt\0"
|
"\0"
|
||||||
" neon\0"
|
" neon\0"
|
||||||
" sse2\0"
|
" sse2\0"
|
||||||
" sse3\0"
|
" sse3\0"
|
||||||
@ -503,8 +495,8 @@ static const char features_string[] =
|
|||||||
"\0";
|
"\0";
|
||||||
|
|
||||||
static const int features_indices[] = {
|
static const int features_indices[] = {
|
||||||
0, 8, 14, 20, 26, 33, 41, 49,
|
0, 1, 7, 13, 19, 26, 34, 42,
|
||||||
54, 60, 65, 70, 75, -1
|
47, 53, 58, 63, 68, -1
|
||||||
};
|
};
|
||||||
// end generated
|
// end generated
|
||||||
|
|
||||||
|
@ -63,7 +63,6 @@
|
|||||||
* Supported XXX are:
|
* Supported XXX are:
|
||||||
* Flag | Arch | GCC | Intel CC | MSVC |
|
* Flag | Arch | GCC | Intel CC | MSVC |
|
||||||
* ARM_NEON | ARM | I & C | None | ? |
|
* ARM_NEON | ARM | I & C | None | ? |
|
||||||
* IWMMXT | ARM | I & C | None | I & C |
|
|
||||||
* SSE2 | x86 | I & C | I & C | I & C |
|
* SSE2 | x86 | I & C | I & C | I & C |
|
||||||
* SSE3 | x86 | I & C | I & C | I only |
|
* SSE3 | x86 | I & C | I & C | I only |
|
||||||
* SSSE3 | x86 | I & C | I & C | I only |
|
* SSSE3 | x86 | I & C | I & C | I only |
|
||||||
@ -236,31 +235,12 @@
|
|||||||
#define QT_FUNCTION_TARGET_STRING_ARM_NEON "neon"
|
#define QT_FUNCTION_TARGET_STRING_ARM_NEON "neon"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// IWMMXT intrinsics
|
|
||||||
#if defined(QT_COMPILER_SUPPORTS_IWMMXT)
|
|
||||||
#include <mmintrin.h>
|
|
||||||
#if defined(Q_OS_WINCE)
|
|
||||||
# include "qplatformdefs.h"
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(QT_COMPILER_SUPPORTS_IWMMXT)
|
|
||||||
#if !defined(__IWMMXT__) && !defined(Q_OS_WINCE)
|
|
||||||
# include <xmmintrin.h>
|
|
||||||
#elif defined(Q_OS_WINCE_STD) && defined(_X86_)
|
|
||||||
# pragma warning(disable: 4391)
|
|
||||||
# include <xmmintrin.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#undef QT_COMPILER_SUPPORTS_SIMD_ALWAYS
|
#undef QT_COMPILER_SUPPORTS_SIMD_ALWAYS
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
enum CPUFeatures {
|
enum CPUFeatures {
|
||||||
IWMMXT = 0x1,
|
|
||||||
NEON = 0x2, ARM_NEON = NEON,
|
NEON = 0x2, ARM_NEON = NEON,
|
||||||
SSE2 = 0x4,
|
SSE2 = 0x4,
|
||||||
SSE3 = 0x8,
|
SSE3 = 0x8,
|
||||||
@ -309,9 +289,6 @@ static const uint qCompilerCpuFeatures = 0
|
|||||||
#if defined __ARM_NEON__
|
#if defined __ARM_NEON__
|
||||||
| NEON
|
| NEON
|
||||||
#endif
|
#endif
|
||||||
#if defined __IWMMXT__
|
|
||||||
| IWMMXT
|
|
||||||
#endif
|
|
||||||
#if defined __mips_dsp
|
#if defined __mips_dsp
|
||||||
| DSP
|
| DSP
|
||||||
#endif
|
#endif
|
||||||
@ -320,7 +297,6 @@ static const uint qCompilerCpuFeatures = 0
|
|||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
extern Q_CORE_EXPORT QBasicAtomicInt qt_cpu_features;
|
extern Q_CORE_EXPORT QBasicAtomicInt qt_cpu_features;
|
||||||
Q_CORE_EXPORT void qDetectCpuFeatures();
|
Q_CORE_EXPORT void qDetectCpuFeatures();
|
||||||
|
|
||||||
|
@ -93,7 +93,6 @@ SOURCES += \
|
|||||||
|
|
||||||
SSE2_SOURCES += painting/qdrawhelper_sse2.cpp
|
SSE2_SOURCES += painting/qdrawhelper_sse2.cpp
|
||||||
SSSE3_SOURCES += painting/qdrawhelper_ssse3.cpp
|
SSSE3_SOURCES += painting/qdrawhelper_ssse3.cpp
|
||||||
IWMMXT_SOURCES += painting/qdrawhelper_iwmmxt.cpp
|
|
||||||
|
|
||||||
!ios {
|
!ios {
|
||||||
CONFIG += no_clang_integrated_as
|
CONFIG += no_clang_integrated_as
|
||||||
|
@ -6801,14 +6801,6 @@ void qInitDrawhelperAsm()
|
|||||||
functionForModeSolidAsm = qt_functionForModeSolid_SSE2;
|
functionForModeSolidAsm = qt_functionForModeSolid_SSE2;
|
||||||
#endif // SSE2
|
#endif // SSE2
|
||||||
|
|
||||||
#ifdef QT_COMPILER_SUPPORTS_IWMMXT
|
|
||||||
if (features & IWMMXT) {
|
|
||||||
functionForModeAsm = qt_functionForMode_IWMMXT;
|
|
||||||
functionForModeSolidAsm = qt_functionForModeSolid_IWMMXT;
|
|
||||||
qDrawHelper[QImage::Format_ARGB32_Premultiplied].blendColor = qt_blend_color_argb_iwmmxt;
|
|
||||||
}
|
|
||||||
#endif // IWMMXT
|
|
||||||
|
|
||||||
#if defined(__ARM_NEON__) && !defined(Q_OS_IOS)
|
#if defined(__ARM_NEON__) && !defined(Q_OS_IOS)
|
||||||
qBlendFunctions[QImage::Format_RGB32][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_neon;
|
qBlendFunctions[QImage::Format_RGB32][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_neon;
|
||||||
qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_neon;
|
qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_neon;
|
||||||
|
@ -1,158 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:LGPL$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and Digia. For licensing terms and
|
|
||||||
** conditions see http://qt.digia.com/licensing. For further information
|
|
||||||
** use the contact form at http://qt.digia.com/contact-us.
|
|
||||||
**
|
|
||||||
** GNU Lesser General Public License Usage
|
|
||||||
** Alternatively, 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, Digia gives you certain additional
|
|
||||||
** rights. These rights are described in the Digia 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.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#ifdef QT_COMPILER_SUPPORTS_IWMMXT
|
|
||||||
|
|
||||||
#include <mmintrin.h>
|
|
||||||
#if defined(Q_OS_WINCE)
|
|
||||||
# include "qplatformdefs.h"
|
|
||||||
#endif
|
|
||||||
#if !defined(__IWMMXT__) && !defined(Q_OS_WINCE)
|
|
||||||
# include <xmmintrin.h>
|
|
||||||
#elif defined(Q_OS_WINCE_STD) && defined(_X86_)
|
|
||||||
# pragma warning(disable: 4391)
|
|
||||||
# include <xmmintrin.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <private/qdrawhelper_sse_p.h>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
|
|
||||||
#ifndef _MM_SHUFFLE
|
|
||||||
#define _MM_SHUFFLE(fp3,fp2,fp1,fp0) \
|
|
||||||
(((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | (fp0))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct QIWMMXTIntrinsics : public QMMXCommonIntrinsics
|
|
||||||
{
|
|
||||||
static inline m64 alpha(m64 x) {
|
|
||||||
return _mm_shuffle_pi16 (x, _MM_SHUFFLE(3, 3, 3, 3));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline m64 _load_alpha(uint x, const m64 &mmx_0x0000) {
|
|
||||||
m64 t = _mm_unpacklo_pi8(_mm_cvtsi32_si64(x), mmx_0x0000);
|
|
||||||
return _mm_shuffle_pi16(t, _MM_SHUFFLE(0, 0, 0, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void end() {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CompositionFunctionSolid qt_functionForModeSolid_IWMMXT[numCompositionFunctions] = {
|
|
||||||
comp_func_solid_SourceOver<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_solid_DestinationOver<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_solid_Clear<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_solid_Source<QIWMMXTIntrinsics>,
|
|
||||||
0,
|
|
||||||
comp_func_solid_SourceIn<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_solid_DestinationIn<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_solid_SourceOut<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_solid_DestinationOut<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_solid_SourceAtop<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_solid_DestinationAtop<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_solid_XOR<QIWMMXTIntrinsics>,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // svg 1.2 modes
|
|
||||||
rasterop_solid_SourceOrDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_SourceAndDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_SourceXorDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_NotSourceAndNotDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_NotSourceOrNotDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_NotSourceXorDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_NotSource<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_NotSourceAndDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_SourceAndNotDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_NotSourceOrDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_SourceOrNotDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_ClearDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_SetDestination<QIWMMXTIntrinsics>,
|
|
||||||
rasterop_solid_NotDestination<QIWMMXTIntrinsics>
|
|
||||||
};
|
|
||||||
|
|
||||||
CompositionFunction qt_functionForMode_IWMMXT[] = {
|
|
||||||
comp_func_SourceOver<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_DestinationOver<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_Clear<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_Source<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_Destination,
|
|
||||||
comp_func_SourceIn<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_DestinationIn<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_SourceOut<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_DestinationOut<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_SourceAtop<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_DestinationAtop<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_XOR<QIWMMXTIntrinsics>,
|
|
||||||
comp_func_Plus,
|
|
||||||
comp_func_Multiply,
|
|
||||||
comp_func_Screen,
|
|
||||||
comp_func_Overlay,
|
|
||||||
comp_func_Darken,
|
|
||||||
comp_func_Lighten,
|
|
||||||
comp_func_ColorDodge,
|
|
||||||
comp_func_ColorBurn,
|
|
||||||
comp_func_HardLight,
|
|
||||||
comp_func_SoftLight,
|
|
||||||
comp_func_Difference,
|
|
||||||
comp_func_Exclusion,
|
|
||||||
rasterop_SourceOrDestination,
|
|
||||||
rasterop_SourceAndDestination,
|
|
||||||
rasterop_SourceXorDestination,
|
|
||||||
rasterop_NotSourceAndNotDestination,
|
|
||||||
rasterop_NotSourceOrNotDestination,
|
|
||||||
rasterop_NotSourceXorDestination,
|
|
||||||
rasterop_NotSource,
|
|
||||||
rasterop_NotSourceAndDestination,
|
|
||||||
rasterop_SourceAndNotDestination,
|
|
||||||
rasterop_NotSourceOrDestination,
|
|
||||||
rasterop_SourceOrNotDestination,
|
|
||||||
rasterop_ClearDestination,
|
|
||||||
rasterop_SetDestination,
|
|
||||||
rasterop_NotDestination
|
|
||||||
};
|
|
||||||
|
|
||||||
void qt_blend_color_argb_iwmmxt(int count, const QSpan *spans, void *userData)
|
|
||||||
{
|
|
||||||
qt_blend_color_argb_x86<QIWMMXTIntrinsics>(count, spans, userData,
|
|
||||||
(CompositionFunctionSolid*)qt_functionForModeSolid_IWMMXT);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // QT_COMPILER_SUPPORTS_IWMMXT
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
|
@ -82,13 +82,6 @@ extern CompositionFunction qt_functionForMode_SSE2[];
|
|||||||
extern CompositionFunctionSolid qt_functionForModeSolid_SSE2[];
|
extern CompositionFunctionSolid qt_functionForModeSolid_SSE2[];
|
||||||
#endif // __SSE2__
|
#endif // __SSE2__
|
||||||
|
|
||||||
#ifdef QT_COMPILER_SUPPORTS_IWMMXT
|
|
||||||
void qt_blend_color_argb_iwmmxt(int count, const QSpan *spans, void *userData);
|
|
||||||
|
|
||||||
extern CompositionFunction qt_functionForMode_IWMMXT[];
|
|
||||||
extern CompositionFunctionSolid qt_functionForModeSolid_IWMMXT[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const int numCompositionFunctions = 38;
|
static const int numCompositionFunctions = 38;
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -170,7 +170,6 @@ Configure::Configure(int& argc, char** argv)
|
|||||||
dictionary[ "SSE4_2" ] = "auto";
|
dictionary[ "SSE4_2" ] = "auto";
|
||||||
dictionary[ "AVX" ] = "auto";
|
dictionary[ "AVX" ] = "auto";
|
||||||
dictionary[ "AVX2" ] = "auto";
|
dictionary[ "AVX2" ] = "auto";
|
||||||
dictionary[ "IWMMXT" ] = "auto";
|
|
||||||
dictionary[ "SYNCQT" ] = "auto";
|
dictionary[ "SYNCQT" ] = "auto";
|
||||||
dictionary[ "CE_CRT" ] = "no";
|
dictionary[ "CE_CRT" ] = "no";
|
||||||
dictionary[ "CETEST" ] = "auto";
|
dictionary[ "CETEST" ] = "auto";
|
||||||
@ -858,10 +857,6 @@ void Configure::parseCmdLine()
|
|||||||
dictionary[ "AVX2" ] = "no";
|
dictionary[ "AVX2" ] = "no";
|
||||||
else if (configCmdLine.at(i) == "-avx2")
|
else if (configCmdLine.at(i) == "-avx2")
|
||||||
dictionary[ "AVX2" ] = "yes";
|
dictionary[ "AVX2" ] = "yes";
|
||||||
else if (configCmdLine.at(i) == "-no-iwmmxt")
|
|
||||||
dictionary[ "IWMMXT" ] = "no";
|
|
||||||
else if (configCmdLine.at(i) == "-iwmmxt")
|
|
||||||
dictionary[ "IWMMXT" ] = "yes";
|
|
||||||
|
|
||||||
else if (configCmdLine.at(i) == "-no-openssl") {
|
else if (configCmdLine.at(i) == "-no-openssl") {
|
||||||
dictionary[ "OPENSSL"] = "no";
|
dictionary[ "OPENSSL"] = "no";
|
||||||
@ -1657,15 +1652,12 @@ void Configure::applySpecSpecifics()
|
|||||||
dictionary[ "SSE4_2" ] = "no";
|
dictionary[ "SSE4_2" ] = "no";
|
||||||
dictionary[ "AVX" ] = "no";
|
dictionary[ "AVX" ] = "no";
|
||||||
dictionary[ "AVX2" ] = "no";
|
dictionary[ "AVX2" ] = "no";
|
||||||
dictionary[ "IWMMXT" ] = "no";
|
|
||||||
dictionary[ "CE_CRT" ] = "yes";
|
dictionary[ "CE_CRT" ] = "yes";
|
||||||
dictionary[ "LARGE_FILE" ] = "no";
|
dictionary[ "LARGE_FILE" ] = "no";
|
||||||
dictionary[ "ANGLE" ] = "no";
|
dictionary[ "ANGLE" ] = "no";
|
||||||
dictionary[ "DYNAMICGL" ] = "no";
|
dictionary[ "DYNAMICGL" ] = "no";
|
||||||
// We only apply MMX/IWMMXT for mkspecs we know they work
|
|
||||||
if (dictionary[ "XQMAKESPEC" ].startsWith("wincewm")) {
|
if (dictionary[ "XQMAKESPEC" ].startsWith("wincewm")) {
|
||||||
dictionary[ "MMX" ] = "yes";
|
dictionary[ "MMX" ] = "yes";
|
||||||
dictionary[ "IWMMXT" ] = "yes";
|
|
||||||
}
|
}
|
||||||
} else if (dictionary.value("XQMAKESPEC").startsWith("linux")) { //TODO actually wrong.
|
} else if (dictionary.value("XQMAKESPEC").startsWith("linux")) { //TODO actually wrong.
|
||||||
//TODO
|
//TODO
|
||||||
@ -2006,8 +1998,6 @@ bool Configure::displayHelp()
|
|||||||
|
|
||||||
// Qt\Windows CE only options go below here -----------------------------------------------------------------------------
|
// Qt\Windows CE only options go below here -----------------------------------------------------------------------------
|
||||||
desc("Qt for Windows CE only:\n\n");
|
desc("Qt for Windows CE only:\n\n");
|
||||||
desc("IWMMXT", "no", "-no-iwmmxt", "Do not compile with use of IWMMXT instructions.");
|
|
||||||
desc("IWMMXT", "yes", "-iwmmxt", "Do compile with use of IWMMXT instructions. (Qt for Windows CE on Arm only)\n");
|
|
||||||
desc("CE_CRT", "no", "-no-crt" , "Do not add the C runtime to default deployment rules.");
|
desc("CE_CRT", "no", "-no-crt" , "Do not add the C runtime to default deployment rules.");
|
||||||
desc("CE_CRT", "yes", "-qt-crt", "Qt identifies C runtime during project generation.");
|
desc("CE_CRT", "yes", "-qt-crt", "Qt identifies C runtime during project generation.");
|
||||||
desc( "-crt <path>", "Specify path to C runtime used for project generation.\n");
|
desc( "-crt <path>", "Specify path to C runtime used for project generation.\n");
|
||||||
@ -2208,8 +2198,6 @@ bool Configure::checkAvailability(const QString &part)
|
|||||||
available = findFile("sqlite.h") && findFile("sqlite.lib");
|
available = findFile("sqlite.h") && findFile("sqlite.lib");
|
||||||
else if (part == "SQL_IBASE")
|
else if (part == "SQL_IBASE")
|
||||||
available = findFile("ibase.h") && (findFile("gds32_ms.lib") || findFile("gds32.lib"));
|
available = findFile("ibase.h") && (findFile("gds32_ms.lib") || findFile("gds32.lib"));
|
||||||
else if (part == "IWMMXT")
|
|
||||||
available = (dictionary.value("XQMAKESPEC").startsWith("wince"));
|
|
||||||
else if (part == "OPENGL_ES_2")
|
else if (part == "OPENGL_ES_2")
|
||||||
available = (dictionary.value("XQMAKESPEC").startsWith("wince"));
|
available = (dictionary.value("XQMAKESPEC").startsWith("wince"));
|
||||||
else if (part == "SSE2")
|
else if (part == "SSE2")
|
||||||
@ -2383,8 +2371,6 @@ void Configure::autoDetection()
|
|||||||
dictionary["AVX"] = checkAvailability("AVX") ? "yes" : "no";
|
dictionary["AVX"] = checkAvailability("AVX") ? "yes" : "no";
|
||||||
if (dictionary["AVX2"] == "auto")
|
if (dictionary["AVX2"] == "auto")
|
||||||
dictionary["AVX2"] = checkAvailability("AVX2") ? "yes" : "no";
|
dictionary["AVX2"] = checkAvailability("AVX2") ? "yes" : "no";
|
||||||
if (dictionary["IWMMXT"] == "auto")
|
|
||||||
dictionary["IWMMXT"] = checkAvailability("IWMMXT") ? "yes" : "no";
|
|
||||||
if (dictionary["NEON"] == "auto")
|
if (dictionary["NEON"] == "auto")
|
||||||
dictionary["NEON"] = checkAvailability("NEON") ? "yes" : "no";
|
dictionary["NEON"] = checkAvailability("NEON") ? "yes" : "no";
|
||||||
if (dictionary["OPENSSL"] == "auto")
|
if (dictionary["OPENSSL"] == "auto")
|
||||||
@ -3059,8 +3045,6 @@ void Configure::generateCachefile()
|
|||||||
moduleStream << " avx";
|
moduleStream << " avx";
|
||||||
if (dictionary[ "AVX2" ] == "yes")
|
if (dictionary[ "AVX2" ] == "yes")
|
||||||
moduleStream << " avx2";
|
moduleStream << " avx2";
|
||||||
if (dictionary[ "IWMMXT" ] == "yes")
|
|
||||||
moduleStream << " iwmmxt";
|
|
||||||
if (dictionary[ "NEON" ] == "yes")
|
if (dictionary[ "NEON" ] == "yes")
|
||||||
moduleStream << " neon";
|
moduleStream << " neon";
|
||||||
if (dictionary[ "LARGE_FILE" ] == "yes")
|
if (dictionary[ "LARGE_FILE" ] == "yes")
|
||||||
@ -3500,8 +3484,6 @@ void Configure::generateConfigfiles()
|
|||||||
tmpStream << "#define QT_COMPILER_SUPPORTS_AVX 1" << endl;
|
tmpStream << "#define QT_COMPILER_SUPPORTS_AVX 1" << endl;
|
||||||
if (dictionary[ "AVX2" ] == "yes")
|
if (dictionary[ "AVX2" ] == "yes")
|
||||||
tmpStream << "#define QT_COMPILER_SUPPORTS_AVX2 1" << endl;
|
tmpStream << "#define QT_COMPILER_SUPPORTS_AVX2 1" << endl;
|
||||||
if (dictionary[ "IWMMXT" ] == "yes")
|
|
||||||
tmpStream << "#define QT_COMPILER_SUPPORTS_IWMMXT 1" << endl;
|
|
||||||
|
|
||||||
if (dictionary["QREAL"] != "double") {
|
if (dictionary["QREAL"] != "double") {
|
||||||
tmpStream << "#define QT_COORD_TYPE " << dictionary["QREAL"] << endl;
|
tmpStream << "#define QT_COORD_TYPE " << dictionary["QREAL"] << endl;
|
||||||
@ -3663,7 +3645,6 @@ void Configure::displayConfig()
|
|||||||
sout << "AVX support................." << dictionary[ "AVX" ] << endl;
|
sout << "AVX support................." << dictionary[ "AVX" ] << endl;
|
||||||
sout << "AVX2 support................" << dictionary[ "AVX2" ] << endl;
|
sout << "AVX2 support................" << dictionary[ "AVX2" ] << endl;
|
||||||
sout << "NEON support................" << dictionary[ "NEON" ] << endl;
|
sout << "NEON support................" << dictionary[ "NEON" ] << endl;
|
||||||
sout << "IWMMXT support.............." << dictionary[ "IWMMXT" ] << endl;
|
|
||||||
sout << "OpenGL support.............." << dictionary[ "OPENGL" ] << endl;
|
sout << "OpenGL support.............." << dictionary[ "OPENGL" ] << endl;
|
||||||
sout << "Large File support.........." << dictionary[ "LARGE_FILE" ] << endl;
|
sout << "Large File support.........." << dictionary[ "LARGE_FILE" ] << endl;
|
||||||
sout << "NIS support................." << dictionary[ "NIS" ] << endl;
|
sout << "NIS support................." << dictionary[ "NIS" ] << endl;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user