From 3ae34b7ead938dc716e2fad2fa686d6867466255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 2 May 2017 14:29:15 +0200 Subject: [PATCH] Make qNextPowerOfTwo constexpr when building as C++14 Change-Id: Ic29dcbf1c4b70516ebb436b90962e3fdeb0e5608 Reviewed-by: Allan Sandfeld Jensen Reviewed-by: Thiago Macieira --- src/corelib/kernel/qmath.h | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/corelib/kernel/qmath.h b/src/corelib/kernel/qmath.h index 68f6a65c87..305e9065e9 100644 --- a/src/corelib/kernel/qmath.h +++ b/src/corelib/kernel/qmath.h @@ -244,16 +244,13 @@ Q_DECL_CONSTEXPR inline double qRadiansToDegrees(double radians) } -#if defined(QT_HAS_BUILTIN_CLZ) -inline quint32 qNextPowerOfTwo(quint32 v) +Q_DECL_RELAXED_CONSTEXPR inline quint32 qNextPowerOfTwo(quint32 v) { +#if defined(QT_HAS_BUILTIN_CLZ) if (v == 0) return 1; return 2U << (31 ^ QAlgorithmsPrivate::qt_builtin_clz(v)); -} #else -inline quint32 qNextPowerOfTwo(quint32 v) -{ v |= v >> 1; v |= v >> 2; v |= v >> 4; @@ -261,19 +258,16 @@ inline quint32 qNextPowerOfTwo(quint32 v) v |= v >> 16; ++v; return v; -} #endif +} -#if defined(QT_HAS_BUILTIN_CLZLL) -inline quint64 qNextPowerOfTwo(quint64 v) +Q_DECL_RELAXED_CONSTEXPR inline quint64 qNextPowerOfTwo(quint64 v) { +#if defined(QT_HAS_BUILTIN_CLZLL) if (v == 0) return 1; return Q_UINT64_C(2) << (63 ^ QAlgorithmsPrivate::qt_builtin_clzll(v)); -} #else -inline quint64 qNextPowerOfTwo(quint64 v) -{ v |= v >> 1; v |= v >> 2; v |= v >> 4; @@ -282,15 +276,15 @@ inline quint64 qNextPowerOfTwo(quint64 v) v |= v >> 32; ++v; return v; -} #endif +} -inline quint32 qNextPowerOfTwo(qint32 v) +Q_DECL_RELAXED_CONSTEXPR inline quint32 qNextPowerOfTwo(qint32 v) { return qNextPowerOfTwo(quint32(v)); } -inline quint64 qNextPowerOfTwo(qint64 v) +Q_DECL_RELAXED_CONSTEXPR inline quint64 qNextPowerOfTwo(qint64 v) { return qNextPowerOfTwo(quint64(v)); }