Replace usage of Q_DECL_ALIGN with C++11 alignas keyword
The macro is not documented, so can be considered private API. Pre-C++11 compilers that don't support alignas will no longer be supported with Qt 6. The macro definition for the standard case of compilers supporting the alignof keyword is left in place. Task-number: QTBUG-76414 Change-Id: I7d722e4faf09ae998a972d3ed914de808ab316d7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
226a60baf5
commit
3ea6a13a01
@ -91,7 +91,6 @@
|
|||||||
# define Q_OUTOFLINE_TEMPLATE inline
|
# define Q_OUTOFLINE_TEMPLATE inline
|
||||||
# define Q_COMPILER_MANGLES_RETURN_TYPE
|
# define Q_COMPILER_MANGLES_RETURN_TYPE
|
||||||
# define Q_FUNC_INFO __FUNCSIG__
|
# define Q_FUNC_INFO __FUNCSIG__
|
||||||
# define Q_DECL_ALIGN(n) __declspec(align(n))
|
|
||||||
# define Q_ASSUME_IMPL(expr) __assume(expr)
|
# define Q_ASSUME_IMPL(expr) __assume(expr)
|
||||||
# define Q_UNREACHABLE_IMPL() __assume(0)
|
# define Q_UNREACHABLE_IMPL() __assume(0)
|
||||||
# define Q_NORETURN __declspec(noreturn)
|
# define Q_NORETURN __declspec(noreturn)
|
||||||
@ -223,7 +222,6 @@
|
|||||||
# define Q_FUNC_INFO __PRETTY_FUNCTION__
|
# define Q_FUNC_INFO __PRETTY_FUNCTION__
|
||||||
# define Q_TYPEOF(expr) __typeof__(expr)
|
# define Q_TYPEOF(expr) __typeof__(expr)
|
||||||
# define Q_DECL_DEPRECATED __attribute__ ((__deprecated__))
|
# define Q_DECL_DEPRECATED __attribute__ ((__deprecated__))
|
||||||
# define Q_DECL_ALIGN(n) __attribute__((__aligned__(n)))
|
|
||||||
# define Q_DECL_UNUSED __attribute__((__unused__))
|
# define Q_DECL_UNUSED __attribute__((__unused__))
|
||||||
# define Q_LIKELY(expr) __builtin_expect(!!(expr), true)
|
# define Q_LIKELY(expr) __builtin_expect(!!(expr), true)
|
||||||
# define Q_UNLIKELY(expr) __builtin_expect(!!(expr), false)
|
# define Q_UNLIKELY(expr) __builtin_expect(!!(expr), false)
|
||||||
@ -271,7 +269,6 @@
|
|||||||
# error "Compiler not supported"
|
# error "Compiler not supported"
|
||||||
# elif __xlC__ >= 0x0600
|
# elif __xlC__ >= 0x0600
|
||||||
# define Q_TYPEOF(expr) __typeof__(expr)
|
# define Q_TYPEOF(expr) __typeof__(expr)
|
||||||
# define Q_DECL_ALIGN(n) __attribute__((__aligned__(n)))
|
|
||||||
# define Q_PACKED __attribute__((__packed__))
|
# define Q_PACKED __attribute__((__packed__))
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@ -447,7 +444,6 @@
|
|||||||
/* see http://developers.sun.com/sunstudio/support/Ccompare.html */
|
/* see http://developers.sun.com/sunstudio/support/Ccompare.html */
|
||||||
# if __SUNPRO_CC >= 0x590
|
# if __SUNPRO_CC >= 0x590
|
||||||
# define Q_TYPEOF(expr) __typeof__(expr)
|
# define Q_TYPEOF(expr) __typeof__(expr)
|
||||||
# define Q_DECL_ALIGN(n) __attribute__((__aligned__(n)))
|
|
||||||
# endif
|
# endif
|
||||||
# if __SUNPRO_CC >= 0x550
|
# if __SUNPRO_CC >= 0x550
|
||||||
# define Q_DECL_EXPORT __global
|
# define Q_DECL_EXPORT __global
|
||||||
@ -484,9 +480,6 @@
|
|||||||
# define Q_DECL_EXPORT __declspec(dllexport)
|
# define Q_DECL_EXPORT __declspec(dllexport)
|
||||||
# define Q_DECL_IMPORT __declspec(dllimport)
|
# define Q_DECL_IMPORT __declspec(dllimport)
|
||||||
# endif
|
# endif
|
||||||
# if __HP_aCC-0 >= 061200
|
|
||||||
# define Q_DECL_ALIGN(n) __attribute__((aligned(n)))
|
|
||||||
# endif
|
|
||||||
# if __HP_aCC-0 >= 062000
|
# if __HP_aCC-0 >= 062000
|
||||||
# define Q_DECL_EXPORT __attribute__((visibility("default")))
|
# define Q_DECL_EXPORT __attribute__((visibility("default")))
|
||||||
# define Q_DECL_HIDDEN __attribute__((visibility("hidden")))
|
# define Q_DECL_HIDDEN __attribute__((visibility("hidden")))
|
||||||
@ -1127,8 +1120,7 @@
|
|||||||
# define Q_ALIGNOF(x) alignof(x)
|
# define Q_ALIGNOF(x) alignof(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(Q_COMPILER_ALIGNAS)
|
#ifndef Q_DECL_ALIGN
|
||||||
# undef Q_DECL_ALIGN
|
|
||||||
# define Q_DECL_ALIGN(n) alignas(n)
|
# define Q_DECL_ALIGN(n) alignas(n)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -765,7 +765,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
|
|
||||||
#if defined(__SSSE3__)
|
#if defined(__SSSE3__)
|
||||||
using ShuffleMask = uchar[16];
|
using ShuffleMask = uchar[16];
|
||||||
Q_DECL_ALIGN(16) static const ShuffleMask shuffleMasks[3] = {
|
alignas(16) static const ShuffleMask shuffleMasks[3] = {
|
||||||
// 16-bit
|
// 16-bit
|
||||||
{1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14},
|
{1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14},
|
||||||
// 32-bit
|
// 32-bit
|
||||||
|
@ -355,7 +355,7 @@ struct QRandomGenerator::SystemAndGlobalGenerators
|
|||||||
// the state in case another thread tries to lock the mutex. It's not
|
// the state in case another thread tries to lock the mutex. It's not
|
||||||
// a common scenario, but since sizeof(QRandomGenerator) >= 2560, the
|
// a common scenario, but since sizeof(QRandomGenerator) >= 2560, the
|
||||||
// overhead is actually acceptable.
|
// overhead is actually acceptable.
|
||||||
// 2) We use both Q_DECL_ALIGN and std::aligned_storage<..., 64> because
|
// 2) We use both alignas and std::aligned_storage<..., 64> because
|
||||||
// some implementations of std::aligned_storage can't align to more
|
// some implementations of std::aligned_storage can't align to more
|
||||||
// than a primitive type's alignment.
|
// than a primitive type's alignment.
|
||||||
// 3) We don't store the entire system QRandomGenerator, only the space
|
// 3) We don't store the entire system QRandomGenerator, only the space
|
||||||
@ -364,7 +364,7 @@ struct QRandomGenerator::SystemAndGlobalGenerators
|
|||||||
QBasicMutex globalPRNGMutex;
|
QBasicMutex globalPRNGMutex;
|
||||||
struct ShortenedSystem { uint type; } system_;
|
struct ShortenedSystem { uint type; } system_;
|
||||||
SystemGenerator sys;
|
SystemGenerator sys;
|
||||||
Q_DECL_ALIGN(64) std::aligned_storage<sizeof(QRandomGenerator64), 64>::type global_;
|
alignas(64) std::aligned_storage<sizeof(QRandomGenerator64), 64>::type global_;
|
||||||
|
|
||||||
#ifdef Q_COMPILER_CONSTEXPR
|
#ifdef Q_COMPILER_CONSTEXPR
|
||||||
constexpr SystemAndGlobalGenerators()
|
constexpr SystemAndGlobalGenerators()
|
||||||
|
@ -85,7 +85,7 @@ private:
|
|||||||
|
|
||||||
class QStaticByteArrayMatcherBase
|
class QStaticByteArrayMatcherBase
|
||||||
{
|
{
|
||||||
Q_DECL_ALIGN(16)
|
alignas(16)
|
||||||
struct Skiptable {
|
struct Skiptable {
|
||||||
uchar data[256];
|
uchar data[256];
|
||||||
} m_skiptable;
|
} m_skiptable;
|
||||||
|
@ -197,7 +197,7 @@ void qt_memfill24_ssse3(quint24 *dest, quint24 color, qsizetype count)
|
|||||||
quint24 *end = dest + count;
|
quint24 *end = dest + count;
|
||||||
|
|
||||||
constexpr uchar x = 2, y = 1, z = 0;
|
constexpr uchar x = 2, y = 1, z = 0;
|
||||||
Q_DECL_ALIGN(__m128i) static const uchar
|
alignas(__m128i) static const uchar
|
||||||
shuffleMask[16 + 1] = { x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y };
|
shuffleMask[16 + 1] = { x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y };
|
||||||
|
|
||||||
__m128i mval1 = _mm_shuffle_epi8(m, _mm_load_si128(reinterpret_cast<const __m128i *>(shuffleMask)));
|
__m128i mval1 = _mm_shuffle_epi8(m, _mm_load_si128(reinterpret_cast<const __m128i *>(shuffleMask)));
|
||||||
|
@ -3214,9 +3214,7 @@ void tst_Collections::forwardDeclared()
|
|||||||
{ typedef QSet<T1> C; C *x = 0; /* C::iterator i; */ C::const_iterator j; Q_UNUSED(x) }
|
{ typedef QSet<T1> C; C *x = 0; /* C::iterator i; */ C::const_iterator j; Q_UNUSED(x) }
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(Q_DECL_ALIGN)
|
class alignas(4) Aligned4
|
||||||
|
|
||||||
class Q_DECL_ALIGN(4) Aligned4
|
|
||||||
{
|
{
|
||||||
char i;
|
char i;
|
||||||
public:
|
public:
|
||||||
@ -3242,7 +3240,7 @@ Q_STATIC_ASSERT(alignof(Aligned4) % 4 == 0);
|
|||||||
# define BIGGEST_ALIGNMENT_TO_TEST 128
|
# define BIGGEST_ALIGNMENT_TO_TEST 128
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class Q_DECL_ALIGN(BIGGEST_ALIGNMENT_TO_TEST) AlignedBiggest
|
class alignas(BIGGEST_ALIGNMENT_TO_TEST) AlignedBiggest
|
||||||
{
|
{
|
||||||
char i;
|
char i;
|
||||||
public:
|
public:
|
||||||
@ -3325,13 +3323,6 @@ void tst_Collections::alignment()
|
|||||||
testAssociativeContainerAlignment<QHash<AlignedBiggest, AlignedBiggest> >();
|
testAssociativeContainerAlignment<QHash<AlignedBiggest, AlignedBiggest> >();
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
void tst_Collections::alignment()
|
|
||||||
{
|
|
||||||
QSKIP("Compiler doesn't support necessary extension keywords");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef QT_NO_TEMPLATE_TEMPLATE_PARAMETERS
|
#ifndef QT_NO_TEMPLATE_TEMPLATE_PARAMETERS
|
||||||
|
|
||||||
template<template<class> class C>
|
template<template<class> class C>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user