5#include <private/qimage_p.h>
6#include <private/qsimd_p.h>
8#ifdef QT_COMPILER_SUPPORTS_SSSE3
26 const __m128i shuffleMask = _mm_set_epi8(
char(0xff), 9, 10, 11,
char(0xff), 6, 7, 8,
char(0xff), 3, 4, 5,
char(0xff), 0, 1, 2);
29 const __m128i shuffleMaskEnd = _mm_set_epi8(
char(0xff), 13, 14, 15,
char(0xff), 10, 11, 12,
char(0xff), 7, 8, 9,
char(0xff), 4, 5, 6);
32 const __m128i alphaMask = _mm_set1_epi32(0xff000000);
34 const __m128i *inVectorPtr = (
const __m128i *)
src;
35 __m128i *dstVectorPtr = (__m128i *)(
dst +
i);
37 for (;
i < (
len - 15);
i += 16) {
48 __m128i firstSrcVector = _mm_lddqu_si128(inVectorPtr);
49 __m128i outputVector = _mm_shuffle_epi8(firstSrcVector, shuffleMask);
50 _mm_store_si128(dstVectorPtr, _mm_or_si128(outputVector, alphaMask));
56 __m128i secondSrcVector = _mm_lddqu_si128(inVectorPtr);
57 __m128i srcVector = _mm_alignr_epi8(secondSrcVector, firstSrcVector, 12);
58 outputVector = _mm_shuffle_epi8(srcVector, shuffleMask);
59 _mm_store_si128(dstVectorPtr, _mm_or_si128(outputVector, alphaMask));
62 firstSrcVector = secondSrcVector;
65 secondSrcVector = _mm_lddqu_si128(inVectorPtr);
66 srcVector = _mm_alignr_epi8(secondSrcVector, firstSrcVector, 8);
67 outputVector = _mm_shuffle_epi8(srcVector, shuffleMask);
68 _mm_store_si128(dstVectorPtr, _mm_or_si128(outputVector, alphaMask));
74 outputVector = _mm_shuffle_epi8(secondSrcVector, shuffleMaskEnd);
75 _mm_store_si128(dstVectorPtr, _mm_or_si128(outputVector, alphaMask));
99 for (
int i = 0;
i <
src->height; ++
i) {
101 src_data +=
src->bytes_per_line;
102 dest_data = (
quint32 *)((
uchar*)dest_data + dest->bytes_per_line);
@ Format_RGBA8888_Premultiplied
@ Format_ARGB32_Premultiplied
Combined button and popup list for selecting options.
Q_GUI_EXPORT void QT_FASTCALL qt_convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len)
constexpr QRgb qRgb(int r, int g, int b)
#define ALIGNMENT_PROLOGUE_16BYTES(ptr, i, length)
#define SIMD_EPILOGUE(i, length, max)