diff options
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/arch/qatomic_mips.h | 10 | ||||
-rw-r--r-- | src/corelib/global/archdetect.cpp | 2 | ||||
-rw-r--r-- | src/corelib/global/qglobalstatic.h | 11 | ||||
-rw-r--r-- | src/corelib/global/qprocessordetection.h | 15 |
4 files changed, 29 insertions, 9 deletions
diff --git a/src/corelib/arch/qatomic_mips.h b/src/corelib/arch/qatomic_mips.h index 463612212b..7bfe16a450 100644 --- a/src/corelib/arch/qatomic_mips.h +++ b/src/corelib/arch/qatomic_mips.h @@ -110,13 +110,19 @@ template <typename T> struct QAtomicOps : QBasicAtomicOps<sizeof(T)> template <int size> template <typename T> inline void QBasicAtomicOps<size>::acquireMemoryFence(const T &) Q_DECL_NOTHROW { - asm volatile ("sync 0x11" ::: "memory"); + asm volatile (".set push\n" + ".set mips32\n" + "sync 0x11\n" + ".set pop\n" ::: "memory"); } template <int size> template <typename T> inline void QBasicAtomicOps<size>::releaseMemoryFence(const T &) Q_DECL_NOTHROW { - asm volatile ("sync 0x12" ::: "memory"); + asm volatile (".set push\n" + ".set mips32\n" + "sync 0x11\n" + ".set pop\n" ::: "memory"); } template <int size> template <typename T> inline diff --git a/src/corelib/global/archdetect.cpp b/src/corelib/global/archdetect.cpp index 9540e391ba..e35595e727 100644 --- a/src/corelib/global/archdetect.cpp +++ b/src/corelib/global/archdetect.cpp @@ -73,6 +73,8 @@ # define ARCH_PROCESSOR "s390" #elif defined(Q_PROCESSOR_SH) # define ARCH_PROCESSOR "sh" +#elif defined(Q_PROCESSORS_SPARC_64) +# define ARCH_PROCESSOR "sparc64" #elif defined(Q_PROCESSOR_SPARC_V9) # define ARCH_PROCESSOR "sparcv9" #elif defined(Q_PROCESSOR_SPARC) diff --git a/src/corelib/global/qglobalstatic.h b/src/corelib/global/qglobalstatic.h index e9330a4b9e..31e2e634a8 100644 --- a/src/corelib/global/qglobalstatic.h +++ b/src/corelib/global/qglobalstatic.h @@ -68,8 +68,17 @@ enum GuardValues { // until the constructor returns ... // We better avoid these kind of problems by using our own locked implementation. +#if defined(Q_OS_UNIX) && defined(Q_CC_INTEL) +// Work around Intel issue ID 6000058488: +// local statics inside an inline function inside an anonymous namespace are global +// symbols (this affects the IA-64 C++ ABI, so OS X and Linux only) +# define Q_GLOBAL_STATIC_INTERNAL_DECORATION Q_DECL_HIDDEN +#else +# define Q_GLOBAL_STATIC_INTERNAL_DECORATION Q_DECL_HIDDEN inline +#endif + #define Q_GLOBAL_STATIC_INTERNAL(ARGS) \ - Q_DECL_HIDDEN inline Type *innerFunction() \ + Q_GLOBAL_STATIC_INTERNAL_DECORATION Type *innerFunction() \ { \ struct HolderBase { \ ~HolderBase() Q_DECL_NOTHROW \ diff --git a/src/corelib/global/qprocessordetection.h b/src/corelib/global/qprocessordetection.h index 384df8fd54..c9fb728593 100644 --- a/src/corelib/global/qprocessordetection.h +++ b/src/corelib/global/qprocessordetection.h @@ -294,12 +294,15 @@ SPARC is big-endian only prior to V9, while V9 is bi-endian with big-endian as the default byte order. Assume all SPARC systems are big-endian. */ -// #elif defined(__sparc__) -// # define Q_PROCESSOR_SPARC -// # if defined(__sparc_v9__) -// # define Q_PROCESSOR_SPARC_V9 -// # endif -// # define Q_BYTE_ORDER Q_BIG_ENDIAN +#elif defined(__sparc__) +# define Q_PROCESSOR_SPARC +# if defined(__sparc_v9__) +# define Q_PROCESSOR_SPARC_V9 +# endif +# if defined(__sparc64__) +# define Q_PROCESSOR_SPARC_64 +# endif +# define Q_BYTE_ORDER Q_BIG_ENDIAN #endif |