Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/gui/painting/qdrawhelper_sse2.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
9 | void qt_blend_argb32_on_argb32_sse2(uchar *destPixels, int dbpl, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 | const uchar *srcPixels, int sbpl, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
11 | int w, int h, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
12 | int const_alpha) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
13 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
14 | const quint32 *src = (const quint32 *) srcPixels; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
15 | quint32 *dst = (quint32 *) destPixels; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
16 | if (const_alpha == 256
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
17 | const __m128i alphaMask = _mm_set1_epi32(0xff000000); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
18 | const __m128i nullVector = _mm_set1_epi32(0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
19 | const __m128i half = _mm_set1_epi16(0x80); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
20 | const __m128i one = _mm_set1_epi16(0xff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
21 | const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
22 | for (int y = 0; y < h
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
23 | { int x = 0; for (; x < static_cast<int>(qMin(static_cast<quintptr>(w), ((4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3)))
never executed: else if (s != 0dst[x] = s;
never executed: }dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s)); never executed: for (; x < w-3end of block
never executed: else if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, nullVector)) != 0xffffend of block
never executed: } }end of block never executed: for (; x < wend of block
never executed: else if (s != 0dst[x] = s;
never executed: }dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s)); never executed: };end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
24 | dst = (quint32 *)(((uchar *) dst) + dbpl); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
25 | src = (const quint32 *)(((const uchar *) src) + sbpl); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
26 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
27 | } never executed: else if (const_alpha != 0end of block
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
28 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
29 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
30 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
31 | const_alpha = (const_alpha * 255) >> 8; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
32 | const __m128i nullVector = _mm_set1_epi32(0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
33 | const __m128i half = _mm_set1_epi16(0x80); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
34 | const __m128i one = _mm_set1_epi16(0xff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
35 | const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
36 | const __m128i constAlphaVector = _mm_set1_epi16(const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
37 | for (int y = 0; y < h
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
38 | { int x = 0; for (; x < static_cast<int>(qMin(static_cast<quintptr>(w), ((4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3)))
never executed: }end of block never executed: for (; x < w-3end of block
never executed: }end of block never executed: for (; x < wend of block
never executed: }end of block never executed: }end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
39 | dst = (quint32 *)(((uchar *) dst) + dbpl); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
40 | src = (const quint32 *)(((const uchar *) src) + sbpl); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
41 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
42 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
43 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
44 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
45 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
46 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
47 | void qt_blend_rgb32_on_rgb32(uchar *destPixels, int dbpl, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
48 | const uchar *srcPixels, int sbpl, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
49 | int w, int h, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
50 | int const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
51 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
52 | void qt_blend_rgb32_on_rgb32_sse2(uchar *destPixels, int dbpl, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
53 | const uchar *srcPixels, int sbpl, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
54 | int w, int h, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
55 | int const_alpha) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
56 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
57 | const quint32 *src = (const quint32 *) srcPixels; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
58 | quint32 *dst = (quint32 *) destPixels; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
59 | if (const_alpha != 256
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
60 | if (const_alpha != 0
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
61 | const __m128i nullVector = _mm_set1_epi32(0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
62 | const __m128i half = _mm_set1_epi16(0x80); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
63 | const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
64 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
65 | const_alpha = (const_alpha * 255) >> 8; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
66 | int one_minus_const_alpha = 255 - const_alpha; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
67 | const __m128i constAlphaVector = _mm_set1_epi16(const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
68 | const __m128i oneMinusConstAlpha = _mm_set1_epi16(one_minus_const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
69 | for (int y = 0; y < h
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
70 | int x = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
71 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
72 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
73 | for (; x < static_cast<int>(qMin(static_cast<quintptr>(w), ((4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3)))
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
74 | dst[x] = INTERPOLATE_PIXEL_255(src[x], const_alpha, dst[x], one_minus_const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
75 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
76 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
77 | for (; x < w-3
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
78 | __m128i srcVector = _mm_loadu_si128((const __m128i *)&src[x]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
79 | if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVector, nullVector)) != 0xffff
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
80 | const __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
81 | __m128i result; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
82 | { __m128i srcVectorAG = _mm_srli_epi16(srcVector, 8); __m128i dstVectorAG = _mm_srli_epi16(dstVector, 8); __m128i srcVectorAGalpha = _mm_mullo_epi16(srcVectorAG, constAlphaVector); __m128i dstVectorAGoneMinusAlphalpha = _mm_mullo_epi16(dstVectorAG, oneMinusConstAlpha); __m128i finalAG = _mm_add_epi16(srcVectorAGalpha, dstVectorAGoneMinusAlphalpha); finalAG = _mm_add_epi16(finalAG, _mm_srli_epi16(finalAG, 8)); finalAG = _mm_add_epi16(finalAG, half); finalAG = _mm_andnot_si128(colorMask, finalAG); __m128i srcVectorRB = _mm_and_si128(srcVector, colorMask); __m128i dstVectorRB = _mm_and_si128(dstVector, colorMask); __m128i srcVectorRBalpha = _mm_mullo_epi16(srcVectorRB, constAlphaVector); __m128i dstVectorRBoneMinusAlphalpha = _mm_mullo_epi16(dstVectorRB, oneMinusConstAlpha); __m128i finalRB = _mm_add_epi16(srcVectorRBalpha, dstVectorRBoneMinusAlphalpha); finalRB = _mm_add_epi16(finalRB, _mm_srli_epi16(finalRB, 8)); finalRB = _mm_add_epi16(finalRB, half); finalRB = _mm_srli_epi16(finalRB, 8); result = _mm_or_si128(finalAG, finalRB); }; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
83 | _mm_store_si128((__m128i *)&dst[x], result); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
84 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
85 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
86 | for (; x<w
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
87 | dst[x] = INTERPOLATE_PIXEL_255(src[x], const_alpha, dst[x], one_minus_const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
88 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
89 | dst = (quint32 *)(((uchar *) dst) + dbpl); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
90 | src = (const quint32 *)(((const uchar *) src) + sbpl); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
91 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
92 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
93 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
94 | qt_blend_rgb32_on_rgb32(destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
95 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
96 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
97 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
98 | void comp_func_SourceOver_sse2(uint *destPixels, const uint *srcPixels, int length, uint const_alpha) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
99 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
100 | ((!(const_alpha < 256)) ? qt_assert("const_alpha < 256",__FILE__,143) : qt_noop()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
101 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
102 | const quint32 *src = (const quint32 *) srcPixels; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
103 | quint32 *dst = (quint32 *) destPixels; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
104 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
105 | const __m128i nullVector = _mm_set1_epi32(0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
106 | const __m128i half = _mm_set1_epi16(0x80); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
107 | const __m128i one = _mm_set1_epi16(0xff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
108 | const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
109 | if (const_alpha == 255
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
110 | const __m128i alphaMask = _mm_set1_epi32(0xff000000); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
111 | { int x = 0; for (; x < static_cast<int>(qMin(static_cast<quintptr>(length), ((4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3)))
never executed: else if (s != 0dst[x] = s;
never executed: }dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s)); never executed: for (; x < length-3end of block
never executed: else if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, nullVector)) != 0xffffend of block
never executed: } }end of block never executed: for (; x < lengthend of block
never executed: else if (s != 0dst[x] = s;
never executed: }dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s)); never executed: };end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
112 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
113 | const __m128i constAlphaVector = _mm_set1_epi16(const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
114 | { int x = 0; for (; x < static_cast<int>(qMin(static_cast<quintptr>(length), ((4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3)))
never executed: }end of block never executed: for (; x < length-3end of block
never executed: }end of block never executed: for (; x < lengthend of block
never executed: }end of block never executed: };end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
115 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
116 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
117 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
118 | void comp_func_Plus_sse2(uint *dst, const uint *src, int length, uint const_alpha) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
119 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
120 | int x = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
121 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
122 | if (const_alpha == 255
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
123 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
124 | for (; x < static_cast<int>(qMin(static_cast<quintptr>(length), ((4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3)))
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
125 | dst[x] = comp_func_Plus_one_pixel(dst[x], src[x]); never executed: dst[x] = comp_func_Plus_one_pixel(dst[x], src[x]); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
126 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
127 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
128 | for (; x < length - 3
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
129 | const __m128i srcVector = _mm_loadu_si128((const __m128i *)&src[x]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
130 | const __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
131 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
132 | const __m128i result = _mm_adds_epu8(srcVector, dstVector); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
133 | _mm_store_si128((__m128i *)&dst[x], result); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
134 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
135 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
136 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
137 | for (; x < length
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
138 | dst[x] = comp_func_Plus_one_pixel(dst[x], src[x]); never executed: dst[x] = comp_func_Plus_one_pixel(dst[x], src[x]); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
139 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
140 | const int one_minus_const_alpha = 255 - const_alpha; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
141 | const __m128i constAlphaVector = _mm_set1_epi16(const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
142 | const __m128i oneMinusConstAlpha = _mm_set1_epi16(one_minus_const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
143 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
144 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
145 | for (; x < static_cast<int>(qMin(static_cast<quintptr>(length), ((4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3)))
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
146 | dst[x] = comp_func_Plus_one_pixel_const_alpha(dst[x], src[x], const_alpha, one_minus_const_alpha); never executed: dst[x] = comp_func_Plus_one_pixel_const_alpha(dst[x], src[x], const_alpha, one_minus_const_alpha); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
147 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
148 | const __m128i half = _mm_set1_epi16(0x80); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
149 | const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
150 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
151 | for (; x < length - 3
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
152 | const __m128i srcVector = _mm_loadu_si128((const __m128i *)&src[x]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
153 | const __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
154 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
155 | __m128i result = _mm_adds_epu8(srcVector, dstVector); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
156 | { __m128i srcVectorAG = _mm_srli_epi16(result, 8); __m128i dstVectorAG = _mm_srli_epi16(dstVector, 8); __m128i srcVectorAGalpha = _mm_mullo_epi16(srcVectorAG, constAlphaVector); __m128i dstVectorAGoneMinusAlphalpha = _mm_mullo_epi16(dstVectorAG, oneMinusConstAlpha); __m128i finalAG = _mm_add_epi16(srcVectorAGalpha, dstVectorAGoneMinusAlphalpha); finalAG = _mm_add_epi16(finalAG, _mm_srli_epi16(finalAG, 8)); finalAG = _mm_add_epi16(finalAG, half); finalAG = _mm_andnot_si128(colorMask, finalAG); __m128i srcVectorRB = _mm_and_si128(result, colorMask); __m128i dstVectorRB = _mm_and_si128(dstVector, colorMask); __m128i srcVectorRBalpha = _mm_mullo_epi16(srcVectorRB, constAlphaVector); __m128i dstVectorRBoneMinusAlphalpha = _mm_mullo_epi16(dstVectorRB, oneMinusConstAlpha); __m128i finalRB = _mm_add_epi16(srcVectorRBalpha, dstVectorRBoneMinusAlphalpha); finalRB = _mm_add_epi16(finalRB, _mm_srli_epi16(finalRB, 8)); finalRB = _mm_add_epi16(finalRB, half); finalRB = _mm_srli_epi16(finalRB, 8); result = _mm_or_si128(finalAG, finalRB); } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
157 | _mm_store_si128((__m128i *)&dst[x], result); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
158 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
159 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
160 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
161 | for (; x < length
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
162 | dst[x] = comp_func_Plus_one_pixel_const_alpha(dst[x], src[x], const_alpha, one_minus_const_alpha); never executed: dst[x] = comp_func_Plus_one_pixel_const_alpha(dst[x], src[x], const_alpha, one_minus_const_alpha); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
163 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
164 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
165 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
166 | void comp_func_Source_sse2(uint *dst, const uint *src, int length, uint const_alpha) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
167 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
168 | if (const_alpha == 255
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
169 | ::memcpy(dst, src, length * sizeof(uint)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
170 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
171 | const int ialpha = 255 - const_alpha; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
172 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
173 | int x = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
174 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
175 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
176 | for (; x < static_cast<int>(qMin(static_cast<quintptr>(length), ((4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3)))
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
177 | dst[x] = INTERPOLATE_PIXEL_255(src[x], const_alpha, dst[x], ialpha); never executed: dst[x] = INTERPOLATE_PIXEL_255(src[x], const_alpha, dst[x], ialpha); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
178 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
179 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
180 | const __m128i half = _mm_set1_epi16(0x80); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
181 | const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
182 | const __m128i constAlphaVector = _mm_set1_epi16(const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
183 | const __m128i oneMinusConstAlpha = _mm_set1_epi16(ialpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
184 | for (; x < length - 3
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
185 | const __m128i srcVector = _mm_loadu_si128((const __m128i *)&src[x]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
186 | __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
187 | { __m128i srcVectorAG = _mm_srli_epi16(srcVector, 8); __m128i dstVectorAG = _mm_srli_epi16(dstVector, 8); __m128i srcVectorAGalpha = _mm_mullo_epi16(srcVectorAG, constAlphaVector); __m128i dstVectorAGoneMinusAlphalpha = _mm_mullo_epi16(dstVectorAG, oneMinusConstAlpha); __m128i finalAG = _mm_add_epi16(srcVectorAGalpha, dstVectorAGoneMinusAlphalpha); finalAG = _mm_add_epi16(finalAG, _mm_srli_epi16(finalAG, 8)); finalAG = _mm_add_epi16(finalAG, half); finalAG = _mm_andnot_si128(colorMask, finalAG); __m128i srcVectorRB = _mm_and_si128(srcVector, colorMask); __m128i dstVectorRB = _mm_and_si128(dstVector, colorMask); __m128i srcVectorRBalpha = _mm_mullo_epi16(srcVectorRB, constAlphaVector); __m128i dstVectorRBoneMinusAlphalpha = _mm_mullo_epi16(dstVectorRB, oneMinusConstAlpha); __m128i finalRB = _mm_add_epi16(srcVectorRBalpha, dstVectorRBoneMinusAlphalpha); finalRB = _mm_add_epi16(finalRB, _mm_srli_epi16(finalRB, 8)); finalRB = _mm_add_epi16(finalRB, half); finalRB = _mm_srli_epi16(finalRB, 8); dstVector = _mm_or_si128(finalAG, finalRB); } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
188 | _mm_store_si128((__m128i *)&dst[x], dstVector); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
189 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
190 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
191 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
192 | for (; x < length
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
193 | dst[x] = INTERPOLATE_PIXEL_255(src[x], const_alpha, dst[x], ialpha); never executed: dst[x] = INTERPOLATE_PIXEL_255(src[x], const_alpha, dst[x], ialpha); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
194 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
195 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
196 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
197 | void qt_memfill32(quint32 *dest, quint32 value, int count) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
198 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
199 | if (count < 7
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
200 | switch (count) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
201 | case never executed: 6:case 6: never executed: *dest++ = value;case 6: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
202 | case never executed: 5:case 5: never executed: case 5: code before this statement never executed: *dest++ = value;case 5: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
203 | case never executed: 4:case 4: never executed: case 4: code before this statement never executed: *dest++ = value;case 4: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
204 | case never executed: 3:case 3: never executed: case 3: code before this statement never executed: *dest++ = value;case 3: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
205 | case never executed: 2:case 2: never executed: case 2: code before this statement never executed: *dest++ = value;case 2: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
206 | case never executed: 1:case 1: never executed: case 1: code before this statement never executed: *dest = value;case 1: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
207 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
208 | return; never executed: return; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
209 | }; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
210 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
211 | const int align = (quintptr)(dest) & 0xf; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
212 | switch (align) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
213 | case never executed: 4:case 4: never executed: *dest++ = value; --count;case 4: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
214 | case never executed: 8:case 8: never executed: case 8: code before this statement never executed: *dest++ = value; --count;case 8: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
215 | case never executed: 12:case 12: never executed: case 12: code before this statement never executed: *dest++ = value; --count;case 12: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
216 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
217 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
218 | const int rest = count & 0x3; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
219 | if (rest
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
220 | switch (rest) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
221 | case never executed: 3:case 3: never executed: dest[count - 3] = value;case 3: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
222 | case never executed: 2:case 2: never executed: case 2: code before this statement never executed: dest[count - 2] = value;case 2: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
223 | case never executed: 1:case 1: never executed: case 1: code before this statement never executed: dest[count - 1] = value;case 1: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
224 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
225 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
226 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
227 | int count128 = count / 4; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
228 | __m128i *dst128 = reinterpret_cast<__m128i*>(dest); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
229 | __m128i *end128 = dst128 + count128; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
230 | const __m128i value128 = _mm_set_epi32(value, value, value, value); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
231 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
232 | while (dst128 + 3 < end128
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
233 | _mm_stream_si128(dst128 + 0, value128); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
234 | _mm_stream_si128(dst128 + 1, value128); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
235 | _mm_stream_si128(dst128 + 2, value128); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
236 | _mm_stream_si128(dst128 + 3, value128); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
237 | dst128 += 4; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
238 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
239 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
240 | switch (count128 & 0x3) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
241 | case never executed: 3:case 3: never executed: _mm_stream_si128(dst128++, value128);case 3: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
242 | case never executed: 2:case 2: never executed: case 2: code before this statement never executed: _mm_stream_si128(dst128++, value128);case 2: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
243 | case never executed: 1:case 1: never executed: case 1: code before this statement never executed: _mm_stream_si128(dst128++, value128);case 1: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
244 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
245 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
246 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
247 | void comp_func_solid_SourceOver_sse2(uint *destPixels, int length, uint color, uint const_alpha) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
248 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
249 | if ((
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
250 | qt_memfill32(destPixels, color, length); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
251 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
252 | if (const_alpha != 255
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
253 | color = BYTE_MUL(color, const_alpha); never executed: color = BYTE_MUL(color, const_alpha); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
254 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
255 | const quint32 minusAlphaOfColor = qAlpha(~color); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
256 | int x = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
257 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
258 | quint32 *dst = (quint32 *) destPixels; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
259 | const __m128i colorVector = _mm_set1_epi32(color); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
260 | const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
261 | const __m128i half = _mm_set1_epi16(0x80); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
262 | const __m128i minusAlphaOfColorVector = _mm_set1_epi16(minusAlphaOfColor); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
263 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
264 | for (; x < static_cast<int>(qMin(static_cast<quintptr>(length), ((4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3)))
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
265 | destPixels[x] = color + BYTE_MUL(destPixels[x], minusAlphaOfColor); never executed: destPixels[x] = color + BYTE_MUL(destPixels[x], minusAlphaOfColor); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
266 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
267 | for (; x < length-3
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
268 | __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
269 | { __m128i pixelVectorAG = _mm_srli_epi16(dstVector, 8); __m128i pixelVectorRB = _mm_and_si128(dstVector, colorMask); pixelVectorAG = _mm_mullo_epi16(pixelVectorAG, minusAlphaOfColorVector); pixelVectorRB = _mm_mullo_epi16(pixelVectorRB, minusAlphaOfColorVector); pixelVectorRB = _mm_add_epi16(pixelVectorRB, _mm_srli_epi16(pixelVectorRB, 8)); pixelVectorRB = _mm_add_epi16(pixelVectorRB, half); pixelVectorAG = _mm_add_epi16(pixelVectorAG, _mm_srli_epi16(pixelVectorAG, 8)); pixelVectorAG = _mm_add_epi16(pixelVectorAG, half); pixelVectorRB = _mm_srli_epi16(pixelVectorRB, 8); pixelVectorAG = _mm_andnot_si128(colorMask, pixelVectorAG); dstVector = _mm_or_si128(pixelVectorAG, pixelVectorRB); }; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
270 | dstVector = _mm_add_epi8(colorVector, dstVector); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
271 | _mm_store_si128((__m128i *)&dst[x], dstVector); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
272 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
273 | for (;x < length
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
274 | destPixels[x] = color + BYTE_MUL(destPixels[x], minusAlphaOfColor); never executed: destPixels[x] = color + BYTE_MUL(destPixels[x], minusAlphaOfColor); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
275 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
276 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
277 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
278 | void qt_memfill16(quint16 *dest, quint16 value, int count) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
279 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
280 | if (count < 3
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
281 | switch (count) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
282 | case never executed: 2:case 2: never executed: *dest++ = value;case 2: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
283 | case never executed: 1:case 1: never executed: case 1: code before this statement never executed: *dest = value;case 1: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
284 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
285 | return; never executed: return; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
286 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
287 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
288 | const int align = (quintptr)(dest) & 0x3; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
289 | switch (align) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
290 | case never executed: 2:case 2: never executed: *dest++ = value; --count;case 2: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
291 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
292 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
293 | const quint32 value32 = (value << 16) | value; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
294 | qt_memfill32(reinterpret_cast<quint32*>(dest), value32, count / 2); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
295 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
296 | if (count & 0x1
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
297 | dest[count - 1] = value; never executed: dest[count - 1] = value; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
298 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
299 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
300 | void qt_bitmapblit32_sse2_base(QRasterBuffer *rasterBuffer, int x, int y, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
301 | quint32 color, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
302 | const uchar *src, int width, int height, int stride) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
303 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
304 | quint32 *dest = reinterpret_cast<quint32*>(rasterBuffer->scanLine(y)) + x; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
305 | const int destStride = rasterBuffer->bytesPerLine() / sizeof(quint32); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
306 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
307 | const __m128i c128 = _mm_set1_epi32(color); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
308 | const __m128i maskmask1 = _mm_set_epi32(0x10101010, 0x20202020, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
309 | 0x40404040, 0x80808080); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
310 | const __m128i maskadd1 = _mm_set_epi32(0x70707070, 0x60606060, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
311 | 0x40404040, 0x00000000); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
312 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
313 | if (width > 4
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
314 | const __m128i maskmask2 = _mm_set_epi32(0x01010101, 0x02020202, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
315 | 0x04040404, 0x08080808); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
316 | const __m128i maskadd2 = _mm_set_epi32(0x7f7f7f7f, 0x7e7e7e7e, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
317 | 0x7c7c7c7c, 0x78787878); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
318 | while (height--
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
319 | for (int x = 0; x < width
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
320 | const quint8 s = src[x >> 3]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
321 | if (!s
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
322 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
323 | __m128i mask1 = _mm_set1_epi8(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
324 | __m128i mask2 = mask1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
325 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
326 | mask1 = _mm_and_si128(mask1, maskmask1); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
327 | mask1 = _mm_add_epi8(mask1, maskadd1); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
328 | _mm_maskmoveu_si128(c128, mask1, (char*)(dest + x)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
329 | mask2 = _mm_and_si128(mask2, maskmask2); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
330 | mask2 = _mm_add_epi8(mask2, maskadd2); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
331 | _mm_maskmoveu_si128(c128, mask2, (char*)(dest + x + 4)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
332 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
333 | dest += destStride; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
334 | src += stride; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
335 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
336 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
337 | while (height--
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
338 | const quint8 s = *src; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
339 | if (s
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
340 | __m128i mask1 = _mm_set1_epi8(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
341 | mask1 = _mm_and_si128(mask1, maskmask1); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
342 | mask1 = _mm_add_epi8(mask1, maskadd1); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
343 | _mm_maskmoveu_si128(c128, mask1, (char*)(dest)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
344 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
345 | dest += destStride; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
346 | src += stride; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
347 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
348 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
349 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
350 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
351 | void qt_bitmapblit32_sse2(QRasterBuffer *rasterBuffer, int x, int y, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
352 | const QRgba64 &color, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
353 | const uchar *src, int width, int height, int stride) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
354 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
355 | qt_bitmapblit32_sse2_base(rasterBuffer, x, y, color.toArgb32(), src, width, height, stride); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
356 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
357 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
358 | void qt_bitmapblit8888_sse2(QRasterBuffer *rasterBuffer, int x, int y, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
359 | const QRgba64 &color, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
360 | const uchar *src, int width, int height, int stride) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
361 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
362 | qt_bitmapblit32_sse2_base(rasterBuffer, x, y, ARGB2RGBA(color.toArgb32()), src, width, height, stride); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
363 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
364 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
365 | void qt_bitmapblit16_sse2(QRasterBuffer *rasterBuffer, int x, int y, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
366 | const QRgba64 &color, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
367 | const uchar *src, int width, int height, int stride) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
368 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
369 | const quint16 c = qConvertRgb32To16(color.toArgb32()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
370 | quint16 *dest = reinterpret_cast<quint16*>(rasterBuffer->scanLine(y)) + x; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
371 | const int destStride = rasterBuffer->bytesPerLine() / sizeof(quint16); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
372 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
373 | const __m128i c128 = _mm_set1_epi16(c); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
374 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
375 | const __m128i maskmask = _mm_set_epi16(0x0101, 0x0202, 0x0404, 0x0808, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
376 | 0x1010, 0x2020, 0x4040, 0x8080); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
377 | const __m128i maskadd = _mm_set_epi16(0x7f7f, 0x7e7e, 0x7c7c, 0x7878, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
378 | 0x7070, 0x6060, 0x4040, 0x0000); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
379 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
380 | while (height--
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
381 | for (int x = 0; x < width
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
382 | const quint8 s = src[x >> 3]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
383 | if (!s
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
384 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
385 | __m128i mask = _mm_set1_epi8(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
386 | mask = _mm_and_si128(mask, maskmask); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
387 | mask = _mm_add_epi8(mask, maskadd); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
388 | _mm_maskmoveu_si128(c128, mask, (char*)(dest + x)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
389 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
390 | dest += destStride; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
391 | src += stride; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
392 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
393 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
394 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
395 | class QSimdSse2 | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
396 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
397 | public: | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
398 | typedef __m128i Int32x4; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
399 | typedef __m128 Float32x4; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
400 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
401 | union Vect_buffer_i { Int32x4 v; int i[4]; }; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
402 | union Vect_buffer_f { Float32x4 v; float f[4]; }; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
403 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
404 | static inline Float32x4 v_dup(float x) { return never executed: _mm_set1_ps(x);return _mm_set1_ps(x); never executed: }return _mm_set1_ps(x); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
405 | static inline Float32x4 v_dup(double x) { return never executed: _mm_set1_ps(x);return _mm_set1_ps(x); never executed: }return _mm_set1_ps(x); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
406 | static inline Int32x4 v_dup(int x) { return never executed: _mm_set1_epi32(x);return _mm_set1_epi32(x); never executed: }return _mm_set1_epi32(x); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
407 | static inline Int32x4 v_dup(uint x) { return never executed: _mm_set1_epi32(x);return _mm_set1_epi32(x); never executed: }return _mm_set1_epi32(x); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
408 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
409 | static inline Float32x4 v_add(Float32x4 a, Float32x4 b) { return never executed: _mm_add_ps(a, b);return _mm_add_ps(a, b); never executed: }return _mm_add_ps(a, b); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
410 | static inline Int32x4 v_add(Int32x4 a, Int32x4 b) { return never executed: _mm_add_epi32(a, b);return _mm_add_epi32(a, b); never executed: }return _mm_add_epi32(a, b); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
411 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
412 | static inline Float32x4 v_max(Float32x4 a, Float32x4 b) { return never executed: _mm_max_ps(a, b);return _mm_max_ps(a, b); never executed: }return _mm_max_ps(a, b); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
413 | static inline Float32x4 v_min(Float32x4 a, Float32x4 b) { return never executed: _mm_min_ps(a, b);return _mm_min_ps(a, b); never executed: }return _mm_min_ps(a, b); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
414 | static inline Int32x4 v_min_16(Int32x4 a, Int32x4 b) { return never executed: _mm_min_epi16(a, b);return _mm_min_epi16(a, b); never executed: }return _mm_min_epi16(a, b); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
415 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
416 | static inline Int32x4 v_and(Int32x4 a, Int32x4 b) { return never executed: _mm_and_si128(a, b);return _mm_and_si128(a, b); never executed: }return _mm_and_si128(a, b); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
417 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
418 | static inline Float32x4 v_sub(Float32x4 a, Float32x4 b) { return never executed: _mm_sub_ps(a, b);return _mm_sub_ps(a, b); never executed: }return _mm_sub_ps(a, b); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
419 | static inline Int32x4 v_sub(Int32x4 a, Int32x4 b) { return never executed: _mm_sub_epi32(a, b);return _mm_sub_epi32(a, b); never executed: }return _mm_sub_epi32(a, b); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
420 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
421 | static inline Float32x4 v_mul(Float32x4 a, Float32x4 b) { return never executed: _mm_mul_ps(a, b);return _mm_mul_ps(a, b); never executed: }return _mm_mul_ps(a, b); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
422 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
423 | static inline Float32x4 v_sqrt(Float32x4 x) { return never executed: _mm_sqrt_ps(x);return _mm_sqrt_ps(x); never executed: }return _mm_sqrt_ps(x); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
424 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
425 | static inline Int32x4 v_toInt(Float32x4 x) { return never executed: _mm_cvttps_epi32(x);return _mm_cvttps_epi32(x); never executed: }return _mm_cvttps_epi32(x); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
426 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
427 | static inline Int32x4 v_greaterOrEqual(Float32x4 a, Float32x4 b) { return never executed: _mm_castps_si128(_mm_cmpgt_ps(a, b));return _mm_castps_si128(_mm_cmpgt_ps(a, b)); never executed: }return _mm_castps_si128(_mm_cmpgt_ps(a, b)); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
428 | }; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
429 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
430 | const uint * qt_fetch_radial_gradient_sse2(uint *buffer, const Operator *op, const QSpanData *data, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
431 | int y, int x, int length) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
432 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
433 | return never executed: qt_fetch_radial_gradient_template<QRadialFetchSimd<QSimdSse2>,uint>(buffer, op, data, y, x, length);return qt_fetch_radial_gradient_template<QRadialFetchSimd<QSimdSse2>,uint>(buffer, op, data, y, x, length); never executed: return qt_fetch_radial_gradient_template<QRadialFetchSimd<QSimdSse2>,uint>(buffer, op, data, y, x, length); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
434 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
435 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
436 | void qt_scale_image_argb32_on_argb32_sse2(uchar *destPixels, int dbpl, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
437 | const uchar *srcPixels, int sbpl, int srch, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
438 | const QRectF &targetRect, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
439 | const QRectF &sourceRect, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
440 | const QRect &clip, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
441 | int const_alpha) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
442 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
443 | if (const_alpha != 256
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
444 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
445 | extern void qt_scale_image_argb32_on_argb32(uchar *destPixels, int dbpl, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
446 | const uchar *srcPixels, int sbpl, int srch, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
447 | const QRectF &targetRect, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
448 | const QRectF &sourceRect, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
449 | const QRect &clip, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
450 | int const_alpha); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
451 | return never executed: qt_scale_image_argb32_on_argb32(destPixels, dbpl, srcPixels, sbpl, srch, targetRect, sourceRect, clip, const_alpha);return qt_scale_image_argb32_on_argb32(destPixels, dbpl, srcPixels, sbpl, srch, targetRect, sourceRect, clip, const_alpha); never executed: return qt_scale_image_argb32_on_argb32(destPixels, dbpl, srcPixels, sbpl, srch, targetRect, sourceRect, clip, const_alpha); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
452 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
453 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
454 | qreal sx = targetRect.width() / (qreal) sourceRect.width(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
455 | qreal sy = targetRect.height() / (qreal) sourceRect.height(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
456 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
457 | int ix = 0x00010000 / sx; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
458 | int iy = 0x00010000 / sy; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
459 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
460 | int cx1 = clip.x(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
461 | int cx2 = clip.x() + clip.width(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
462 | int cy1 = clip.top(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
463 | int cy2 = clip.y() + clip.height(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
464 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
465 | int tx1 = qRound(targetRect.left()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
466 | int tx2 = qRound(targetRect.right()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
467 | int ty1 = qRound(targetRect.top()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
468 | int ty2 = qRound(targetRect.bottom()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
469 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
470 | if (tx2 < tx1
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
471 | qSwap(tx2, tx1); never executed: qSwap(tx2, tx1); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
472 | if (ty2 < ty1
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
473 | qSwap(ty2, ty1); never executed: qSwap(ty2, ty1); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
474 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
475 | if (tx1 < cx1
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
476 | tx1 = cx1; never executed: tx1 = cx1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
477 | if (tx2 >= cx2
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
478 | tx2 = cx2; never executed: tx2 = cx2; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
479 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
480 | if (tx1 >= tx2
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
481 | return; never executed: return; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
482 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
483 | if (ty1 < cy1
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
484 | ty1 = cy1; never executed: ty1 = cy1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
485 | if (ty2 >= cy2
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
486 | ty2 = cy2; never executed: ty2 = cy2; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
487 | if (ty1 >= ty2
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
488 | return; never executed: return; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
489 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
490 | int h = ty2 - ty1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
491 | int w = tx2 - tx1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
492 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
493 | quint32 basex; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
494 | quint32 srcy; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
495 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
496 | if (sx < 0
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
497 | int dstx = qFloor((tx1 + qreal(0.5) - targetRect.right()) * ix) + 1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
498 | basex = quint32(sourceRect.right() * 65536) + dstx; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
499 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
500 | int dstx = qCeil((tx1 + qreal(0.5) - targetRect.left()) * ix) - 1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
501 | basex = quint32(sourceRect.left() * 65536) + dstx; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
502 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
503 | if (sy < 0
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
504 | int dsty = qFloor((ty1 + qreal(0.5) - targetRect.bottom()) * iy) + 1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
505 | srcy = quint32(sourceRect.bottom() * 65536) + dsty; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
506 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
507 | int dsty = qCeil((ty1 + qreal(0.5) - targetRect.top()) * iy) - 1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
508 | srcy = quint32(sourceRect.top() * 65536) + dsty; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
509 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
510 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
511 | quint32 *dst = ((quint32 *) (destPixels + ty1 * dbpl)) + tx1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
512 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
513 | const __m128i nullVector = _mm_set1_epi32(0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
514 | const __m128i half = _mm_set1_epi16(0x80); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
515 | const __m128i one = _mm_set1_epi16(0xff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
516 | const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
517 | const __m128i alphaMask = _mm_set1_epi32(0xff000000); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
518 | const __m128i ixVector = _mm_set1_epi32(4*ix); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
519 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
520 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
521 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
522 | int yend = (srcy + iy * (h - 1)) >> 16; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
523 | if (yend < 0
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
524 | -- never executed: h;--h; never executed: --h; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
525 | int xend = (basex + ix * (w - 1)) >> 16; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
526 | if (xend < 0
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
527 | -- never executed: w;--w; never executed: --w; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
528 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
529 | while (h--
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
530 | const uint *src = (const quint32 *) (srcPixels + (srcy >> 16) * sbpl); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
531 | int srcx = basex; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
532 | int x = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
533 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
534 | for (; x < static_cast<int>(qMin(static_cast<quintptr>(w), ((4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3)))
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
535 | uint s = src[srcx >> 16]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
536 | dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
537 | srcx += ix; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
538 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
539 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
540 | __m128i srcxVector = _mm_set_epi32(srcx, srcx + ix, srcx + ix + ix, srcx + ix + ix + ix); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
541 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
542 | for (; x<w - 3
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
543 | union Vect_buffer { __m128i vect; quint32 i[4]; }; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
544 | Vect_buffer addr; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
545 | addr.vect = _mm_srli_epi32(srcxVector, 16); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
546 | srcxVector = _mm_add_epi32(srcxVector, ixVector); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
547 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
548 | const __m128i srcVector = _mm_set_epi32(src[addr.i[0]], src[addr.i[1]], src[addr.i[2]], src[addr.i[3]]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
549 | { const __m128i srcVectorAlpha = _mm_and_si128(srcVector, alphaMask); if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, alphaMask)) == 0xffff
never executed: else if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, nullVector)) != 0xffffend of block
never executed: };end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
550 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
551 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
552 | for (; x<w
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
553 | uint s = src[(basex + x*ix) >> 16]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
554 | dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
555 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
556 | dst = (quint32 *)(((uchar *) dst) + dbpl); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
557 | srcy += iy; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
558 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
559 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
560 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
561 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
562 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
Switch to Source code | Preprocessed file |