summaryrefslogtreecommitdiffstats
path: root/src/gui/painting/qdrawhelper_neon.cpp
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-03-30 01:00:07 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-03-30 01:00:07 +0100
commit0a7302abbc47a0db25f119ee4f5144bbaf0d9d6f (patch)
treee4b05a56e09bb6401a9ee863725da2f0e52858f1 /src/gui/painting/qdrawhelper_neon.cpp
parent8d154810f56b9d831f78f454fb2b05e98c246313 (diff)
parent20b7e18146e28e73cba52a63a3415c6828f1f6f5 (diff)
Merge remote-tracking branch 'origin/5.12' into 5.13
Diffstat (limited to 'src/gui/painting/qdrawhelper_neon.cpp')
-rw-r--r--src/gui/painting/qdrawhelper_neon.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/gui/painting/qdrawhelper_neon.cpp b/src/gui/painting/qdrawhelper_neon.cpp
index 3fcbcfd053..8196a87b24 100644
--- a/src/gui/painting/qdrawhelper_neon.cpp
+++ b/src/gui/painting/qdrawhelper_neon.cpp
@@ -50,7 +50,18 @@ QT_BEGIN_NAMESPACE
void qt_memfill32(quint32 *dest, quint32 value, qsizetype count)
{
const int epilogueSize = count % 16;
-#if !defined(Q_PROCESSOR_ARM_64)
+#if defined(Q_CC_GHS) || defined(Q_CC_MSVC)
+ // inline assembler free version:
+ if (count >= 16) {
+ quint32 *const neonEnd = dest + count - epilogueSize;
+ const uint32x4_t valueVector1 = vdupq_n_u32(value);
+ const uint32x4x4_t valueVector4 = { valueVector1, valueVector1, valueVector1, valueVector1 };
+ do {
+ vst4q_u32(dest, valueVector4);
+ dest += 16;
+ } while (dest != neonEnd);
+ }
+#elif !defined(Q_PROCESSOR_ARM_64)
if (count >= 16) {
quint32 *const neonEnd = dest + count - epilogueSize;
register uint32x4_t valueVector1 asm ("q0") = vdupq_n_u32(value);