From d08f59d083c0d915bbd0d74972ee380763447f3d Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 31 Jan 2022 14:47:46 -0800 Subject: qsimd: simplify the code slightly Only x86 requires more than 32 different bits in the CPU feature variable, so enforce the need for 64-bit atomics only for it. Everyone else can stick to 32-bit atomics, which are supported everywhere. Change-Id: I54f205f6b7314351b078fffd16cf7c7d50a84102 Reviewed-by: Marc Mutz Reviewed-by: Edward Welbourne --- src/corelib/global/qsimd.cpp | 13 +++---------- src/corelib/global/qsimd_p.h | 10 ++++------ 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/corelib/global/qsimd.cpp b/src/corelib/global/qsimd.cpp index 5692b6ef03..8ff98ec7cd 100644 --- a/src/corelib/global/qsimd.cpp +++ b/src/corelib/global/qsimd.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2019 Intel Corporation. +** Copyright (C) 2021 The Qt Company Ltd. +** Copyright (C) 2022 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -583,11 +583,7 @@ static const int features_count = (sizeof features_indices) / (sizeof features_i // record what CPU features were enabled by default in this Qt build static const quint64 minFeature = qCompilerCpuFeatures; -#ifdef Q_ATOMIC_INT64_IS_SUPPORTED -Q_CORE_EXPORT QBasicAtomicInteger qt_cpu_features[1] = { Q_BASIC_ATOMIC_INITIALIZER(0) }; -#else -Q_CORE_EXPORT QBasicAtomicInteger qt_cpu_features[2] = { Q_BASIC_ATOMIC_INITIALIZER(0), Q_BASIC_ATOMIC_INITIALIZER(0) }; -#endif +QBasicAtomicInteger qt_cpu_features[1] = { 0 }; quint64 qDetectCpuFeatures() { @@ -626,9 +622,6 @@ quint64 qDetectCpuFeatures() } qt_cpu_features[0].storeRelaxed(f | quint32(QSimdInitialized)); -#ifndef Q_ATOMIC_INT64_IS_SUPPORTED - qt_cpu_features[1].storeRelaxed(f >> 32); -#endif return f; } diff --git a/src/corelib/global/qsimd_p.h b/src/corelib/global/qsimd_p.h index 57ef30d567..cb02b31990 100644 --- a/src/corelib/global/qsimd_p.h +++ b/src/corelib/global/qsimd_p.h @@ -357,11 +357,12 @@ static const quint64 qCompilerCpuFeatures = 0 ; #endif -#ifdef Q_ATOMIC_INT64_IS_SUPPORTED -extern Q_CORE_EXPORT QBasicAtomicInteger qt_cpu_features[1]; +#ifdef Q_PROCESSOR_X86 +using QCpuFeatureType = quint64; #else -extern Q_CORE_EXPORT QBasicAtomicInteger qt_cpu_features[2]; +using QCpuFeatureType = unsigned; #endif +extern Q_CORE_EXPORT QBasicAtomicInteger qt_cpu_features[1]; Q_CORE_EXPORT quint64 qDetectCpuFeatures(); #if defined(Q_PROCESSOR_X86) && QT_COMPILER_SUPPORTS_HERE(RDRND) && !defined(QT_BOOTSTRAPPED) @@ -376,9 +377,6 @@ static inline qsizetype qRandomCpu(void *, qsizetype) noexcept static inline quint64 qCpuFeatures() { quint64 features = qt_cpu_features[0].loadRelaxed(); -#ifndef Q_ATOMIC_INT64_IS_SUPPORTED - features |= quint64(qt_cpu_features[1].loadRelaxed()) << 32; -#endif if (Q_UNLIKELY(features == 0)) { features = qDetectCpuFeatures(); Q_ASSUME(features != 0); -- cgit v1.2.3