diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2012-04-02 20:52:28 -0300 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-02 10:09:31 +0200 |
commit | 978937ab4a44179224a3021f89555bfa988fe687 (patch) | |
tree | 2dbe36298a7218566549a7fe3dc7c059a3b0ac8c /src/gui/image/qjpeghandler.cpp | |
parent | f58390e0f495e229d9f2f1301c3a9dec978af9c2 (diff) |
Make the CPU detection much more efficient in user code
First, check that the option in question hasn't been already enabled
by the compiler, via compiler switches. If it has been, then we don't
need to verify anything, and we can assume that it's safe to use such
instructions. For example, on an x86-64 build, qCpuHasFeature(SSE2) is
always a constant true.
If the compile-time check fails, then we proceed to try and detect the
processor features at runtime. But instead of insisting on a call to
qDetectCPUFeatures, allow the code using the detection to read from a
variable and simply test it for values. Only if the variable isn't
initialised should it make a function call. The Q_ASSUME allows this
code to be very efficient even with multiple uses of qCpuHasFeature.
Change the uninitialised value from -1 to 0 so that simpler
instructions can be used to check for non-initialisation.
The qDetectCPUFeatures function is renamed to qDetectCpuFeatures to
match the Qt coding style and also to catch uses this code that need
to be adapted.
Change-Id: I24ca5a6ad21075e2e249e1a4f8f5057b8f68ce7c
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/gui/image/qjpeghandler.cpp')
-rw-r--r-- | src/gui/image/qjpeghandler.cpp | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/src/gui/image/qjpeghandler.cpp b/src/gui/image/qjpeghandler.cpp index eff106a486..057bfc2592 100644 --- a/src/gui/image/qjpeghandler.cpp +++ b/src/gui/image/qjpeghandler.cpp @@ -873,20 +873,18 @@ bool QJpegHandlerPrivate::read(QImage *image) QJpegHandler::QJpegHandler() : d(new QJpegHandlerPrivate(this)) { - const uint features = qDetectCPUFeatures(); - Q_UNUSED(features); #if defined(QT_COMPILER_SUPPORTS_NEON) // from qimage_neon.cpp Q_GUI_EXPORT void QT_FASTCALL qt_convert_rgb888_to_rgb32_neon(quint32 *dst, const uchar *src, int len); - if (features & NEON) + if (qCpuHasFeature(NEON)) rgb888ToRgb32ConverterPtr = qt_convert_rgb888_to_rgb32_neon; #endif // QT_COMPILER_SUPPORTS_NEON #if defined(QT_COMPILER_SUPPORTS_SSSE3) // from qimage_ssse3.cpp Q_GUI_EXPORT void QT_FASTCALL qt_convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len); - if (features & SSSE3) + if (qCpuHasFeature(SSSE3)) rgb888ToRgb32ConverterPtr = qt_convert_rgb888_to_rgb32_ssse3; #endif // QT_COMPILER_SUPPORTS_SSSE3 } |