diff options
author | Shane Kearns <shane.kearns@sosco.com> | 2009-11-04 21:26:00 (GMT) |
---|---|---|
committer | Shane Kearns <shane.kearns@sosco.com> | 2009-11-06 12:55:23 (GMT) |
commit | 7442be794787c710812d46052b74d73042795aac (patch) | |
tree | c3c21b0715f7d906cb8f6a762693b1b09bf6d20c /src/corelib/global | |
parent | d3ecece1432a3b0a2cb579270d7b3f5a2afaa674 (diff) | |
download | Qt-7442be794787c710812d46052b74d73042795aac.zip Qt-7442be794787c710812d46052b74d73042795aac.tar.gz Qt-7442be794787c710812d46052b74d73042795aac.tar.bz2 |
Binary compatibility of Symbian ARMv5 and ARMv6 builds
Use ARMv6 atomics where available
Use OS atomics otherwise
Integrate ARMV6 atomics to Symbian builds
Use compiler defined macros to detect if ARMv6 instructions are available
This defines the QT_HAVE_ARMV6 macro, replacing the way it was defined
by the Symbian build system previously in qpainting.pri.
qatomic_symbian now uses qatomic_arm or qatomic_armv6 automatically
Port armv6 atomics to implement generic atomics interface
The inline atomics are not inlined when we build for thumb using RVCT.
So there is no performance improvement of using the "inline" versions vs
a shared version called through a function call.
The generic atomics interface is good for binary compatibility, as the
same symbols are exported in all versions now.
Changed the fallback generic atomics implementation from the unix one
to a symbian specific one using RFastLock (identical code to the windows
generic atomics, except for RFastLock replaces Win32 CRITICAL_SECTION)
Note: GCCE atomics still need porting
Tell git to ignore .lst listing files (produced by sbs/abld listing)
ARMv6 support for GCCE compiler and fallback implementation using OS
When building corelib with GCCE and -march=armv6, QT_HAVE_ARMV6 will be
defined. This patch adds copies of the asm functions in GCC syntax.
When building for the Symbian emulator, or ARMv5, then Symbian OS atomic
functions are used as a fallback - these are more efficient than the unix
atomics, and don't require data import (which the ARMv5 atomics use, but
the OS loader doesn't support fully)
Symbian OS functions are always used for QBasicAtomicInt::ref / deref,
because these are faster than the generic function in all cases.
They are machine coded for ARMv6, and are used internally by RFastLock.
Reviewed-By: axis
Reviewed-By: Brad
Diffstat (limited to 'src/corelib/global')
-rw-r--r-- | src/corelib/global/qglobal.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index d113e02..9558256 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -437,13 +437,18 @@ namespace QT_NAMESPACE {} #elif defined(__GCCE__) # define Q_CC_GCCE # define QT_VISIBILITY_AVAILABLE +# if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) +# define QT_HAVE_ARMV6 +# endif /* ARM Realview Compiler Suite RVCT compiler also defines __EDG__ and __GNUC__ (if --gnu flag is given), so check for it before that */ #elif defined(__ARMCC__) || defined(__CC_ARM) # define Q_CC_RVCT - +# if __TARGET_ARCH_ARM >= 6 +# define QT_HAVE_ARMV6 +# endif #elif defined(__GNUC__) # define Q_CC_GNU # define Q_C_CALLBACKS |