Move qt_memfill32-based implementation of qt_memfill16 to generic

The SSE2 implementation and the one in qdrawhelper.cpp are almost
identical. And if we make it so qt_memfill16 can tail-call to
qt_memfill32, there's no need for inlining, so there's no need to keep
it in qdrawhelper_sse2.cpp

Change-Id: I343f2beed55440a7ac0bfffd15637027771c2254
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
bb10
Thiago Macieira 2018-11-02 15:46:52 -07:00
parent f3652429de
commit 6c1339ef4b
3 changed files with 9 additions and 40 deletions

View File

@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Copyright (C) 2016 Intel Corporation.
** Copyright (C) 2018 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
@ -6249,28 +6249,21 @@ void qt_memfill64(quint64 *dest, quint64 color, qsizetype count)
qt_memfill_template<quint64>(dest, color, count);
}
#if !defined(__SSE2__)
void qt_memfill16(quint16 *dest, quint16 value, qsizetype count)
{
if (count < 3) {
switch (count) {
case 2: *dest++ = value; Q_FALLTHROUGH();
case 1: *dest = value;
}
return;
const int align = quintptr(dest) & 0x3;
if (align) {
*dest++ = value;
--count;
}
const int align = (quintptr)(dest) & 0x3;
switch (align) {
case 2: *dest++ = value; --count;
}
const quint32 value32 = (value << 16) | value;
qt_memfill(reinterpret_cast<quint32*>(dest), value32, count / 2);
if (count & 0x1)
dest[count - 1] = value;
const quint32 value32 = (value << 16) | value;
qt_memfill32(reinterpret_cast<quint32*>(dest), value32, count / 2);
}
#endif
#if !defined(__SSE2__) && !defined(__ARM_NEON__) && !defined(__MIPS_DSP__)
void qt_memfill32(quint32 *dest, quint32 color, qsizetype count)
{

View File

@ -314,29 +314,6 @@ void QT_FASTCALL comp_func_solid_SourceOver_sse2(uint *destPixels, int length, u
}
}
void qt_memfill16(quint16 *dest, quint16 value, qsizetype count)
{
if (count < 3) {
switch (count) {
case 2: *dest++ = value; Q_FALLTHROUGH();
case 1: *dest = value;
}
return;
}
const int align = (quintptr)(dest) & 0x3;
if (align) {
*dest++ = value;
--count;
}
if (count & 0x1)
dest[count - 1] = value;
const quint32 value32 = (value << 16) | value;
qt_memfill32(reinterpret_cast<quint32*>(dest), value32, count / 2);
}
void qt_bitmapblit32_sse2_base(QRasterBuffer *rasterBuffer, int x, int y,
quint32 color,
const uchar *src, int width, int height, int stride)

View File

@ -58,7 +58,6 @@ QT_BEGIN_NAMESPACE
#ifdef __SSE2__
void qt_memfill32(quint32 *dest, quint32 value, qsizetype count);
void qt_memfill16(quint16 *dest, quint16 value, qsizetype count);
void qt_bitmapblit32_sse2(QRasterBuffer *rasterBuffer, int x, int y,
const QRgba64 &color,
const uchar *src, int width, int height, int stride);