GCC Code Coverage Report


Directory: avs_core/
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 11.9% 877 / 0 / 7355
Functions: 18.2% 27 / 0 / 148
Branches: 6.3% 128 / 0 / 2040

convert/intel/convert_bits_sse.cpp
Line Branch Exec Source
1 // Avisynth v2.5. Copyright 2002-2009 Ben Rudiak-Gould et al.
2 // http://avisynth.nl
3
4 // This program is free software; you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation; either version 2 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA, or visit
17 // http://www.gnu.org/copyleft/gpl.html .
18 //
19 // Linking Avisynth statically or dynamically with other modules is making a
20 // combined work based on Avisynth. Thus, the terms and conditions of the GNU
21 // General Public License cover the whole combination.
22 //
23 // As a special exception, the copyright holders of Avisynth give you
24 // permission to link Avisynth with independent modules that communicate with
25 // Avisynth solely through the interfaces defined in avisynth.h, regardless of the license
26 // terms of these independent modules, and to copy and distribute the
27 // resulting combined work under terms of your choice, provided that
28 // every copy of the combined work is accompanied by a complete copy of
29 // the source code of Avisynth (the version of Avisynth used to produce the
30 // combined work), being distributed under the terms of the GNU General
31 // Public License plus this exception. An independent module is a module
32 // which is not derived from or based on Avisynth, such as 3rd-party filters,
33 // import and export plugins, or graphical user interfaces.
34
35 #include "../convert_bits.h"
36 #include "convert_bits_sse.h"
37 #include "../convert_helper.h"
38
39 #include <avs/alignment.h>
40 #include <avs/minmax.h>
41 #include <avs/config.h>
42 #include <tuple>
43 #include <map>
44 #include <algorithm>
45
46 #ifdef AVS_WINDOWS
47 #include <avs/win.h>
48 #else
49 #include <avs/posix.h>
50 #endif
51
52 // Intrinsics base header + really required extension headers
53 #if defined(_MSC_VER)
54 #include <intrin.h> // MSVC
55 #else
56 #include <x86intrin.h> // GCC/MinGW/Clang/LLVM
57 #endif
58 #include <smmintrin.h> // SSE4.1
59
60 // float to 8 bit, float to 10/12/14/16 bit
61
62 // sse4.1
63 template<typename pixel_t, bool chroma, bool fulls, bool fulld>
64 #if defined(GCC) || defined(CLANG)
65 __attribute__((__target__("sse4.1")))
66 #endif
67 5116 void convert_32_to_uintN_sse41(const BYTE *srcp, BYTE *dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth)
68 {
69 5116 const float* srcp0 = reinterpret_cast<const float*>(srcp);
70 5116 pixel_t* dstp0 = reinterpret_cast<pixel_t*>(dstp);
71
72 5116 src_pitch = src_pitch / sizeof(float);
73 5116 dst_pitch = dst_pitch / sizeof(pixel_t);
74
75 5116 const int src_width = src_rowsize / sizeof(float);
76
77
7/32
void convert_32_to_uintN_sse41<unsigned char, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_32_to_uintN_sse41<unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_32_to_uintN_sse41<unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_32_to_uintN_sse41<unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_32_to_uintN_sse41<unsigned char, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_32_to_uintN_sse41<unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_32_to_uintN_sse41<unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_32_to_uintN_sse41<unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_32_to_uintN_sse41<unsigned short, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_32_to_uintN_sse41<unsigned short, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_32_to_uintN_sse41<unsigned short, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_32_to_uintN_sse41<unsigned short, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 5110 times.
void convert_32_to_uintN_sse41<unsigned short, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_32_to_uintN_sse41<unsigned short, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 24 not taken.
void convert_32_to_uintN_sse41<unsigned short, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 24 not taken.
void convert_32_to_uintN_sse41<unsigned short, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
5116 bits_conv_constants d;
78 get_bits_conv_constants(d, chroma, fulls, fulld, source_bitdepth, target_bitdepth);
79
80 5116 auto dst_offset_plus_round = d.dst_offset + 0.5f;
81 5116 constexpr auto dst_pixel_min = 0;
82 5116 const auto dst_pixel_max = (1 << target_bitdepth) - 1;
83
84 5116 auto src_offset_ps = _mm_set1_ps(d.src_offset);
85 10232 auto factor_ps = _mm_set1_ps(d.mul_factor);
86 5116 auto dst_offset_plus_round_ps = _mm_set1_ps(dst_offset_plus_round);
87 5116 auto dst_pixel_min_ps = _mm_set1_ps((float)dst_pixel_min);
88 5116 auto dst_pixel_max_ps = _mm_set1_ps((float)dst_pixel_max);
89
90
14/32
void convert_32_to_uintN_sse41<unsigned char, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 102 → 65 not taken.
✗ Branch 102 → 103 not taken.
void convert_32_to_uintN_sse41<unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 102 → 65 taken 4 times.
✓ Branch 102 → 103 taken 1 time.
void convert_32_to_uintN_sse41<unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 98 → 65 not taken.
✗ Branch 98 → 99 not taken.
void convert_32_to_uintN_sse41<unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 98 → 65 taken 5 times.
✓ Branch 98 → 99 taken 1 time.
void convert_32_to_uintN_sse41<unsigned char, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 98 → 65 not taken.
✗ Branch 98 → 99 not taken.
void convert_32_to_uintN_sse41<unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 98 → 65 not taken.
✗ Branch 98 → 99 not taken.
void convert_32_to_uintN_sse41<unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 98 → 65 not taken.
✗ Branch 98 → 99 not taken.
void convert_32_to_uintN_sse41<unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 98 → 65 not taken.
✗ Branch 98 → 99 not taken.
void convert_32_to_uintN_sse41<unsigned short, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 100 → 65 not taken.
✗ Branch 100 → 101 not taken.
void convert_32_to_uintN_sse41<unsigned short, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 100 → 65 taken 5 times.
✓ Branch 100 → 101 taken 1 time.
void convert_32_to_uintN_sse41<unsigned short, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 96 → 65 taken 4 times.
✓ Branch 96 → 97 taken 1 time.
void convert_32_to_uintN_sse41<unsigned short, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 96 → 65 taken 5110 times.
✓ Branch 96 → 97 taken 5110 times.
void convert_32_to_uintN_sse41<unsigned short, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 96 → 65 not taken.
✗ Branch 96 → 97 not taken.
void convert_32_to_uintN_sse41<unsigned short, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 96 → 65 taken 5 times.
✓ Branch 96 → 97 taken 1 time.
void convert_32_to_uintN_sse41<unsigned short, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 96 → 65 taken 5 times.
✓ Branch 96 → 97 taken 1 time.
void convert_32_to_uintN_sse41<unsigned short, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 96 → 65 not taken.
✗ Branch 96 → 97 not taken.
10254 for (int y = 0; y < src_height; y++)
91 {
92
14/32
void convert_32_to_uintN_sse41<unsigned char, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 100 → 66 not taken.
✗ Branch 100 → 101 not taken.
void convert_32_to_uintN_sse41<unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 100 → 66 taken 16 times.
✓ Branch 100 → 101 taken 4 times.
void convert_32_to_uintN_sse41<unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 96 → 66 not taken.
✗ Branch 96 → 97 not taken.
void convert_32_to_uintN_sse41<unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 96 → 66 taken 10 times.
✓ Branch 96 → 97 taken 5 times.
void convert_32_to_uintN_sse41<unsigned char, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 96 → 66 not taken.
✗ Branch 96 → 97 not taken.
void convert_32_to_uintN_sse41<unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 96 → 66 not taken.
✗ Branch 96 → 97 not taken.
void convert_32_to_uintN_sse41<unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 96 → 66 not taken.
✗ Branch 96 → 97 not taken.
void convert_32_to_uintN_sse41<unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 96 → 66 not taken.
✗ Branch 96 → 97 not taken.
void convert_32_to_uintN_sse41<unsigned short, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 98 → 66 not taken.
✗ Branch 98 → 99 not taken.
void convert_32_to_uintN_sse41<unsigned short, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 98 → 66 taken 10 times.
✓ Branch 98 → 99 taken 5 times.
void convert_32_to_uintN_sse41<unsigned short, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 94 → 66 taken 16 times.
✓ Branch 94 → 95 taken 4 times.
void convert_32_to_uintN_sse41<unsigned short, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 94 → 66 taken 10220 times.
✓ Branch 94 → 95 taken 5110 times.
void convert_32_to_uintN_sse41<unsigned short, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 94 → 66 not taken.
✗ Branch 94 → 95 not taken.
void convert_32_to_uintN_sse41<unsigned short, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 94 → 66 taken 10 times.
✓ Branch 94 → 95 taken 5 times.
void convert_32_to_uintN_sse41<unsigned short, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 94 → 66 taken 10 times.
✓ Branch 94 → 95 taken 5 times.
void convert_32_to_uintN_sse41<unsigned short, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 94 → 66 not taken.
✗ Branch 94 → 95 not taken.
15430 for (int x = 0; x < src_width; x += 8) // 8 pixels at a time
93 {
94 __m128i result;
95 __m128i result_0, result_1;
96 10292 __m128 src_0 = _mm_load_ps(reinterpret_cast<const float*>(srcp0 + x));
97 20584 __m128 src_1 = _mm_load_ps(reinterpret_cast<const float*>(srcp0 + x + 4));
98 if constexpr (!chroma && !fulls) {
99 // when offset is different from 0
100 26 src_0 = _mm_sub_ps(src_0, src_offset_ps);
101 26 src_1 = _mm_sub_ps(src_1, src_offset_ps);
102 }
103 20584 src_0 = _mm_add_ps(_mm_mul_ps(src_0, factor_ps), dst_offset_plus_round_ps);
104 20584 src_1 = _mm_add_ps(_mm_mul_ps(src_1, factor_ps), dst_offset_plus_round_ps);
105
106 20584 src_0 = _mm_max_ps(_mm_min_ps(src_0, dst_pixel_max_ps), dst_pixel_min_ps);
107 20584 src_1 = _mm_max_ps(_mm_min_ps(src_1, dst_pixel_max_ps), dst_pixel_min_ps);
108 10292 result_0 = _mm_cvttps_epi32(src_0); // truncate
109 10292 result_1 = _mm_cvttps_epi32(src_1);
110 if constexpr (sizeof(pixel_t) == 2) {
111 10266 result = _mm_packus_epi32(result_0, result_1); // sse41
112 10266 _mm_store_si128(reinterpret_cast<__m128i*>(dstp0 + x), result);
113 }
114 else {
115 26 result = _mm_packs_epi32(result_0, result_1);
116 26 result = _mm_packus_epi16(result, result); // lo 8 byte
117 26 _mm_storel_epi64(reinterpret_cast<__m128i*>(dstp0 + x), result);
118 }
119
120 // c:
121 //const int pixel = (int)((srcp0[x] - src_offset) * mul_factor + dst_offset_plus_round);
122 //dstp0[x] = pixel_t(clamp(pixel, dst_pixel_min, dst_pixel_max));
123 }
124 5138 dstp0 += dst_pitch;
125 5138 srcp0 += src_pitch;
126 }
127 5116 }
128
129 // instantiate them
130 //template<typename pixel_t, bool chroma, bool fulls, bool fulld>
131 #define DEF_convert_32_to_uintN_functions(uint_X_t) \
132 template void convert_32_to_uintN_sse41<uint_X_t, false, true, true>(const BYTE* srcp8, BYTE* dstp8, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
133 template void convert_32_to_uintN_sse41<uint_X_t, true, true, true>(const BYTE* srcp8, BYTE* dstp8, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
134 template void convert_32_to_uintN_sse41<uint_X_t, false, true, false>(const BYTE* srcp8, BYTE* dstp8, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
135 template void convert_32_to_uintN_sse41<uint_X_t, true, true, false>(const BYTE* srcp8, BYTE* dstp8, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
136 template void convert_32_to_uintN_sse41<uint_X_t, false, false, true>(const BYTE* srcp8, BYTE* dstp8, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
137 template void convert_32_to_uintN_sse41<uint_X_t, true, false, true>(const BYTE* srcp8, BYTE* dstp8, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
138 template void convert_32_to_uintN_sse41<uint_X_t, false, false, false>(const BYTE* srcp8, BYTE* dstp8, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
139 template void convert_32_to_uintN_sse41<uint_X_t, true, false, false>(const BYTE* srcp8, BYTE* dstp8, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth);
140
141 DEF_convert_32_to_uintN_functions(uint8_t)
142 DEF_convert_32_to_uintN_functions(uint16_t)
143
144 #undef DEF_convert_32_to_uintN_functions
145
146 // YUV: bit shift 8-16 <=> 8-16 bits
147 // shift right or left, depending on expandrange
148 template<typename pixel_t_s, typename pixel_t_d>
149 #if defined(GCC) || defined(CLANG)
150 __attribute__((__target__("sse4.1")))
151 #endif
152 2 static void convert_uint_limited_sse41(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth)
153 {
154 2 const pixel_t_s* srcp0 = reinterpret_cast<const pixel_t_s*>(srcp);
155 2 pixel_t_d* dstp0 = reinterpret_cast<pixel_t_d*>(dstp);
156
157 2 src_pitch = src_pitch / sizeof(pixel_t_s);
158 2 dst_pitch = dst_pitch / sizeof(pixel_t_d);
159
160 2 const int src_width = src_rowsize / sizeof(pixel_t_s);
161
162
2/8
void convert_uint_limited_sse41<unsigned char, unsigned char>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 23 not taken.
void convert_uint_limited_sse41<unsigned char, unsigned short>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 25 not taken.
void convert_uint_limited_sse41<unsigned short, unsigned char>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 19 taken 1 time.
void convert_uint_limited_sse41<unsigned short, unsigned short>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 21 not taken.
2 if (target_bitdepth > source_bitdepth) // expandrange. pixel_t_d is always uint16_t
163 {
164 1 const int shift_bits = target_bitdepth - source_bitdepth;
165 1 __m128i shift = _mm_set_epi32(0, 0, 0, shift_bits);
166
2/8
void convert_uint_limited_sse41<unsigned char, unsigned char>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 6 not taken.
✗ Branch 22 → 35 not taken.
void convert_uint_limited_sse41<unsigned char, unsigned short>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 24 → 6 taken 5 times.
✓ Branch 24 → 37 taken 1 time.
void convert_uint_limited_sse41<unsigned short, unsigned char>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 18 → 6 not taken.
✗ Branch 18 → 46 not taken.
void convert_uint_limited_sse41<unsigned short, unsigned short>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 6 not taken.
✗ Branch 20 → 47 not taken.
6 for (int y = 0; y < src_height; y++)
167 {
168
2/8
void convert_uint_limited_sse41<unsigned char, unsigned char>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 7 not taken.
✗ Branch 20 → 21 not taken.
void convert_uint_limited_sse41<unsigned char, unsigned short>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 22 → 7 taken 10 times.
✓ Branch 22 → 23 taken 5 times.
void convert_uint_limited_sse41<unsigned short, unsigned char>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 7 not taken.
✗ Branch 16 → 17 not taken.
void convert_uint_limited_sse41<unsigned short, unsigned short>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 18 → 7 not taken.
✗ Branch 18 → 19 not taken.
15 for (int x = 0; x < src_width; x += 16)
169 {
170 __m128i src_lo, src_hi;
171 if constexpr (sizeof(pixel_t_s) == 1) {
172 20 auto src = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp0 + x)); // 16* uint8
173 10 src_lo = _mm_cvtepu8_epi16(src); // 8* uint16
174 20 src_hi = _mm_unpackhi_epi8(src, _mm_setzero_si128()); // 8* uint16
175 }
176 else {
177 src_lo = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp0 + x)); // 8* uint_16
178 src_hi = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp0 + x + 8)); // 8* uint_16
179 }
180 10 src_lo = _mm_sll_epi16(src_lo, shift);
181 10 src_hi = _mm_sll_epi16(src_hi, shift);
182 if constexpr (sizeof(pixel_t_d) == 1) {
183 // upconvert always to 2 bytes
184 assert(0);
185 }
186 else {
187 10 _mm_store_si128(reinterpret_cast<__m128i*>(dstp0 + x), src_lo);
188 10 _mm_store_si128(reinterpret_cast<__m128i*>(dstp0 + x + 8), src_hi);
189 }
190 }
191 5 dstp0 += dst_pitch;
192 5 srcp0 += src_pitch;
193 }
194 }
195 else
196 {
197 // reduce range
198 1 const int shift_bits = source_bitdepth - target_bitdepth;
199 1 const int round = 1 << (shift_bits - 1);
200 1 __m128i shift = _mm_set_epi32(0, 0, 0, shift_bits);
201 1 const auto round_simd = _mm_set1_epi16(round);
202
203
2/8
void convert_uint_limited_sse41<unsigned char, unsigned char>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 34 → 30 not taken.
✗ Branch 34 → 35 not taken.
void convert_uint_limited_sse41<unsigned char, unsigned short>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 36 → 32 not taken.
✗ Branch 36 → 37 not taken.
void convert_uint_limited_sse41<unsigned short, unsigned char>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 45 → 26 taken 5 times.
✓ Branch 45 → 46 taken 1 time.
void convert_uint_limited_sse41<unsigned short, unsigned short>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 46 → 28 not taken.
✗ Branch 46 → 47 not taken.
6 for (int y = 0; y < src_height; y++)
204 {
205
2/8
void convert_uint_limited_sse41<unsigned char, unsigned char>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 32 → 31 not taken.
✗ Branch 32 → 33 not taken.
void convert_uint_limited_sse41<unsigned char, unsigned short>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 34 → 33 not taken.
✗ Branch 34 → 35 not taken.
void convert_uint_limited_sse41<unsigned short, unsigned char>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 43 → 27 taken 10 times.
✓ Branch 43 → 44 taken 5 times.
void convert_uint_limited_sse41<unsigned short, unsigned short>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 44 → 29 not taken.
✗ Branch 44 → 45 not taken.
15 for (int x = 0; x < src_width; x += 16)
206 {
207 if constexpr (sizeof(pixel_t_s) == 1)
208 assert(0);
209 // downconvert always from 2 bytes
210 10 auto src_lo = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp0 + x)); // 8* uint_16
211 20 auto src_hi = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp0 + x + 8)); // 8* uint_16
212 20 src_lo = _mm_srl_epi16(_mm_adds_epu16(src_lo, round_simd), shift);
213 20 src_hi = _mm_srl_epi16(_mm_adds_epu16(src_hi, round_simd), shift);
214 if constexpr (sizeof(pixel_t_d) == 1) {
215 // to 8 bits
216 10 auto dst = _mm_packus_epi16(src_lo, src_hi);
217 10 _mm_store_si128(reinterpret_cast<__m128i*>(dstp0 + x), dst);
218 }
219 else {
220 _mm_store_si128(reinterpret_cast<__m128i*>(dstp0 + x), src_lo);
221 _mm_store_si128(reinterpret_cast<__m128i*>(dstp0 + x + 8), src_hi);
222 }
223 }
224 5 dstp0 += dst_pitch;
225 5 srcp0 += src_pitch;
226 }
227 }
228 2 }
229
230 template<typename pixel_t_s, typename pixel_t_d, bool chroma, bool fulls, bool fulld>
231 #if defined(GCC) || defined(CLANG)
232 __attribute__((__target__("sse4.1")))
233 #endif
234 11 void convert_uint_sse41(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth)
235 {
236 // limited to limited is bitshift, see in other function
237 if constexpr (!fulls && !fulld) {
238 2 convert_uint_limited_sse41< pixel_t_s, pixel_t_d>(srcp, dstp, src_rowsize, src_height, src_pitch, dst_pitch, source_bitdepth, target_bitdepth, dither_target_bitdepth);
239 2 return;
240 }
241
242 9 const pixel_t_s* srcp0 = reinterpret_cast<const pixel_t_s*>(srcp);
243 9 pixel_t_d* dstp0 = reinterpret_cast<pixel_t_d*>(dstp);
244
245 9 src_pitch = src_pitch / sizeof(pixel_t_s);
246 9 dst_pitch = dst_pitch / sizeof(pixel_t_d);
247
248 9 const int src_width = src_rowsize / sizeof(pixel_t_s);
249
250 if constexpr (sizeof(pixel_t_s) == 1 && sizeof(pixel_t_d) == 2) {
251
2/4
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 29 not taken.
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 29 not taken.
1 if (fulls && fulld && !chroma && source_bitdepth == 8 && target_bitdepth == 16) {
252 // special case 8->16 bit full scale: * 65535 / 255 = *257
253 1 __m128i zero = _mm_setzero_si128();
254 1 __m128i multiplier = _mm_set1_epi16(257);
255
256
2/2
✓ Branch 27 → 11 taken 5 times.
✓ Branch 27 → 28 taken 1 time.
6 for (int y = 0; y < src_height; y++)
257 {
258
2/2
✓ Branch 25 → 12 taken 10 times.
✓ Branch 25 → 26 taken 5 times.
15 for (int x = 0; x < src_width; x += 16)
259 {
260 20 __m128i src = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp0 + x)); // 16* uint8
261 10 __m128i src_lo = _mm_unpacklo_epi8(src, zero); // 8* uint16
262 10 __m128i src_hi = _mm_unpackhi_epi8(src, zero); // 8* uint16
263 // *257 mullo is faster than x*257 = (x<<8 + x) add/or solution (i7)
264 10 __m128i res_lo = _mm_mullo_epi16(src_lo, multiplier); // lower 16 bit of multiplication is enough
265 10 __m128i res_hi = _mm_mullo_epi16(src_hi, multiplier);
266 // dstp[x] = srcp0[x] * 257; // RGB: full range 0..255 <-> 0..65535 (257 = 65535 / 255)
267 10 _mm_store_si128(reinterpret_cast<__m128i*>(dstp0 + x), res_lo);
268 10 _mm_store_si128(reinterpret_cast<__m128i*>(dstp0 + x + 8), res_hi);
269 } // for x
270 5 dstp0 += dst_pitch;
271 5 srcp0 += src_pitch;
272 } // for y
273 1 return;
274 }
275 }
276
277 8 const int target_max = (1 << target_bitdepth) - 1;
278
279
5/48
void convert_uint_sse41<unsigned char, unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned char, unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned char, unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned char, unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned char, unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned char, unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned char, unsigned short, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 25 not taken.
void convert_uint_sse41<unsigned char, unsigned short, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 25 taken 2 times.
void convert_uint_sse41<unsigned char, unsigned short, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 29 → 30 not taken.
✗ Branch 29 → 51 not taken.
void convert_uint_sse41<unsigned char, unsigned short, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 25 not taken.
void convert_uint_sse41<unsigned char, unsigned short, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 25 not taken.
void convert_uint_sse41<unsigned char, unsigned short, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 25 not taken.
void convert_uint_sse41<unsigned short, unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 2 times.
void convert_uint_sse41<unsigned short, unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned short, unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned short, unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned short, unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned short, unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned short, unsigned short, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned short, unsigned short, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned short, unsigned short, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned short, unsigned short, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned short, unsigned short, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 2 → 3 taken 2 times.
✗ Branch 2 → 24 not taken.
void convert_uint_sse41<unsigned short, unsigned short, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
8 bits_conv_constants d;
280 get_bits_conv_constants(d, chroma, fulls, fulld, source_bitdepth, target_bitdepth);
281
282 8 auto vect_mul_factor = _mm_set1_ps(d.mul_factor);
283 8 auto vect_src_offset = _mm_set1_epi32(d.src_offset_i);
284 8 auto dst_offset_plus_round = d.dst_offset + 0.5f;
285 8 auto vect_dst_offset_plus_round = _mm_set1_ps(dst_offset_plus_round);
286
287 16 auto vect_target_max = _mm_set1_epi16(target_max);
288
289 8 auto zero = _mm_setzero_si128();
290
291
10/48
void convert_uint_sse41<unsigned char, unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 138 → 69 not taken.
✗ Branch 138 → 139 not taken.
void convert_uint_sse41<unsigned char, unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 130 → 69 not taken.
✗ Branch 130 → 131 not taken.
void convert_uint_sse41<unsigned char, unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 130 → 69 not taken.
✗ Branch 130 → 131 not taken.
void convert_uint_sse41<unsigned char, unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 138 → 69 not taken.
✗ Branch 138 → 139 not taken.
void convert_uint_sse41<unsigned char, unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 138 → 69 taken 5 times.
✓ Branch 138 → 139 taken 1 time.
void convert_uint_sse41<unsigned char, unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 138 → 69 not taken.
✗ Branch 138 → 139 not taken.
void convert_uint_sse41<unsigned char, unsigned short, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 138 → 70 not taken.
✗ Branch 138 → 139 not taken.
void convert_uint_sse41<unsigned char, unsigned short, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 130 → 70 taken 10 times.
✓ Branch 130 → 131 taken 2 times.
void convert_uint_sse41<unsigned char, unsigned short, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 156 → 96 not taken.
✗ Branch 156 → 157 not taken.
void convert_uint_sse41<unsigned char, unsigned short, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 138 → 70 not taken.
✗ Branch 138 → 139 not taken.
void convert_uint_sse41<unsigned char, unsigned short, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 138 → 70 not taken.
✗ Branch 138 → 139 not taken.
void convert_uint_sse41<unsigned char, unsigned short, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 138 → 70 not taken.
✗ Branch 138 → 139 not taken.
void convert_uint_sse41<unsigned short, unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 136 → 69 taken 10 times.
✓ Branch 136 → 137 taken 2 times.
void convert_uint_sse41<unsigned short, unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 128 → 69 not taken.
✗ Branch 128 → 129 not taken.
void convert_uint_sse41<unsigned short, unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 128 → 69 not taken.
✗ Branch 128 → 129 not taken.
void convert_uint_sse41<unsigned short, unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 69 not taken.
✗ Branch 136 → 137 not taken.
void convert_uint_sse41<unsigned short, unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 69 not taken.
✗ Branch 136 → 137 not taken.
void convert_uint_sse41<unsigned short, unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 69 not taken.
✗ Branch 136 → 137 not taken.
void convert_uint_sse41<unsigned short, unsigned short, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 135 → 69 not taken.
✗ Branch 135 → 136 not taken.
void convert_uint_sse41<unsigned short, unsigned short, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 127 → 69 not taken.
✗ Branch 127 → 128 not taken.
void convert_uint_sse41<unsigned short, unsigned short, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 127 → 69 not taken.
✗ Branch 127 → 128 not taken.
void convert_uint_sse41<unsigned short, unsigned short, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 135 → 69 taken 5 times.
✓ Branch 135 → 136 taken 1 time.
void convert_uint_sse41<unsigned short, unsigned short, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 135 → 69 taken 10 times.
✓ Branch 135 → 136 taken 2 times.
void convert_uint_sse41<unsigned short, unsigned short, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 135 → 69 not taken.
✗ Branch 135 → 136 not taken.
48 for (int y = 0; y < src_height; y++)
292 {
293
10/48
void convert_uint_sse41<unsigned char, unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 70 not taken.
✗ Branch 136 → 137 not taken.
void convert_uint_sse41<unsigned char, unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 128 → 70 not taken.
✗ Branch 128 → 129 not taken.
void convert_uint_sse41<unsigned char, unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 128 → 70 not taken.
✗ Branch 128 → 129 not taken.
void convert_uint_sse41<unsigned char, unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 70 not taken.
✗ Branch 136 → 137 not taken.
void convert_uint_sse41<unsigned char, unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 136 → 70 taken 10 times.
✓ Branch 136 → 137 taken 5 times.
void convert_uint_sse41<unsigned char, unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 70 not taken.
✗ Branch 136 → 137 not taken.
void convert_uint_sse41<unsigned char, unsigned short, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 71 not taken.
✗ Branch 136 → 137 not taken.
void convert_uint_sse41<unsigned char, unsigned short, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 128 → 71 taken 20 times.
✓ Branch 128 → 129 taken 10 times.
void convert_uint_sse41<unsigned char, unsigned short, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 154 → 97 not taken.
✗ Branch 154 → 155 not taken.
void convert_uint_sse41<unsigned char, unsigned short, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 71 not taken.
✗ Branch 136 → 137 not taken.
void convert_uint_sse41<unsigned char, unsigned short, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 71 not taken.
✗ Branch 136 → 137 not taken.
void convert_uint_sse41<unsigned char, unsigned short, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 71 not taken.
✗ Branch 136 → 137 not taken.
void convert_uint_sse41<unsigned short, unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 134 → 70 taken 20 times.
✓ Branch 134 → 135 taken 10 times.
void convert_uint_sse41<unsigned short, unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 126 → 70 not taken.
✗ Branch 126 → 127 not taken.
void convert_uint_sse41<unsigned short, unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 126 → 70 not taken.
✗ Branch 126 → 127 not taken.
void convert_uint_sse41<unsigned short, unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 134 → 70 not taken.
✗ Branch 134 → 135 not taken.
void convert_uint_sse41<unsigned short, unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 134 → 70 not taken.
✗ Branch 134 → 135 not taken.
void convert_uint_sse41<unsigned short, unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 134 → 70 not taken.
✗ Branch 134 → 135 not taken.
void convert_uint_sse41<unsigned short, unsigned short, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 133 → 70 not taken.
✗ Branch 133 → 134 not taken.
void convert_uint_sse41<unsigned short, unsigned short, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 125 → 70 not taken.
✗ Branch 125 → 126 not taken.
void convert_uint_sse41<unsigned short, unsigned short, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 125 → 70 not taken.
✗ Branch 125 → 126 not taken.
void convert_uint_sse41<unsigned short, unsigned short, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 133 → 70 taken 10 times.
✓ Branch 133 → 134 taken 5 times.
void convert_uint_sse41<unsigned short, unsigned short, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 133 → 70 taken 20 times.
✓ Branch 133 → 134 taken 10 times.
void convert_uint_sse41<unsigned short, unsigned short, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 133 → 70 not taken.
✗ Branch 133 → 134 not taken.
120 for (int x = 0; x < src_width; x += 16)
294 {
295 __m128i src_lo, src_hi;
296 if constexpr (sizeof(pixel_t_s) == 1) {
297 60 auto src = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp0 + x)); // 16* uint8
298 30 src_lo = _mm_cvtepu8_epi16(src); // 8* uint16
299 30 src_hi = _mm_unpackhi_epi8(src, zero); // 8* uint16
300 }
301 else {
302 50 src_lo = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp0 + x)); // 8* uint_16
303 100 src_hi = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp0 + x + 8)); // 8* uint_16
304 }
305
306 __m128i result1, result2;
307 {
308 // src: 8*uint16
309 // convert to int32, bias, to float
310 80 auto res_lo_i = _mm_cvtepu16_epi32(src_lo);
311 80 auto res_hi_i = _mm_unpackhi_epi16(src_lo, zero);
312 if constexpr (chroma || !fulls) {
313 // src_offset is not zero
314 60 res_lo_i = _mm_sub_epi32(res_lo_i, vect_src_offset);
315 60 res_hi_i = _mm_sub_epi32(res_hi_i, vect_src_offset);
316 }
317 80 auto res_lo = _mm_cvtepi32_ps(res_lo_i);
318 80 auto res_hi = _mm_cvtepi32_ps(res_hi_i);
319 // multiply, bias back+round
320 160 res_lo = _mm_add_ps(_mm_mul_ps(res_lo, vect_mul_factor), vect_dst_offset_plus_round);
321 160 res_hi = _mm_add_ps(_mm_mul_ps(res_hi, vect_mul_factor), vect_dst_offset_plus_round);
322 // convert back w/ truncate
323 80 auto result_l = _mm_cvttps_epi32(res_lo); // no banker's rounding
324 80 auto result_h = _mm_cvttps_epi32(res_hi);
325 // 0 min is ensured by packus
326 // back to 16 bit
327 80 result1 = _mm_packus_epi32(result_l, result_h); // 8 * 16 bit pixels
328 80 result1 = _mm_min_epu16(result1, vect_target_max);
329 }
330
331 // byte target: not yet
332 if constexpr (sizeof(pixel_t_d) == 2)
333 50 _mm_store_si128(reinterpret_cast<__m128i*>(dstp0 + x), result1);
334
335 {
336 // src: 8*uint16
337 // convert to int32, bias, to float
338 80 auto res_lo_i = _mm_cvtepu16_epi32(src_hi);
339 80 auto res_hi_i = _mm_unpackhi_epi16(src_hi, zero);
340 if constexpr (chroma || !fulls) {
341 // src_offset is not zero
342 60 res_lo_i = _mm_sub_epi32(res_lo_i, vect_src_offset);
343 60 res_hi_i = _mm_sub_epi32(res_hi_i, vect_src_offset);
344 }
345 80 auto res_lo = _mm_cvtepi32_ps(res_lo_i);
346 80 auto res_hi = _mm_cvtepi32_ps(res_hi_i);
347 // multiply, bias back+round
348 160 res_lo = _mm_add_ps(_mm_mul_ps(res_lo, vect_mul_factor), vect_dst_offset_plus_round);
349 160 res_hi = _mm_add_ps(_mm_mul_ps(res_hi, vect_mul_factor), vect_dst_offset_plus_round);
350 // convert back w/ truncate
351 80 auto result_l = _mm_cvttps_epi32(res_lo);
352 80 auto result_h = _mm_cvttps_epi32(res_hi);
353 // 0 min is ensured by packus
354 // back to 16 bit
355 80 result2 = _mm_packus_epi32(result_l, result_h); // 8 * 16 bit pixels
356 80 result2 = _mm_min_epu16(result2, vect_target_max);
357 }
358
359 if constexpr (sizeof(pixel_t_d) == 2)
360 50 _mm_store_si128(reinterpret_cast<__m128i*>(dstp0 + x + 8), result2);
361 else {
362 // byte target: store both
363 30 auto result12 = _mm_packus_epi16(result1, result2);
364 30 _mm_store_si128(reinterpret_cast<__m128i*>(dstp0 + x), result12);
365 }
366 } // for x
367
368 40 dstp0 += dst_pitch;
369 40 srcp0 += src_pitch;
370 }
371 6 }
372
373 // instantiate them all
374 // template<typename pixel_t_s, typename pixel_t_d, bool chroma, bool fulls, bool fulld>
375 #define convert_uint_sse4_functions(uint_X_t, uint_X_dest_t) \
376 template void convert_uint_sse41<uint_X_t, uint_X_dest_t, false, false, false>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
377 template void convert_uint_sse41<uint_X_t, uint_X_dest_t, false, false, true>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
378 template void convert_uint_sse41<uint_X_t, uint_X_dest_t, false, true, false>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
379 template void convert_uint_sse41<uint_X_t, uint_X_dest_t, false, true, true>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
380 template void convert_uint_sse41<uint_X_t, uint_X_dest_t, true, false, false>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
381 template void convert_uint_sse41<uint_X_t, uint_X_dest_t, true, false, true>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
382 template void convert_uint_sse41<uint_X_t, uint_X_dest_t, true, true, false>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
383 template void convert_uint_sse41<uint_X_t, uint_X_dest_t, true, true, true>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth);
384
385 convert_uint_sse4_functions(uint8_t, uint8_t)
386 convert_uint_sse4_functions(uint8_t, uint16_t)
387 convert_uint_sse4_functions(uint16_t, uint8_t)
388 convert_uint_sse4_functions(uint16_t, uint16_t)
389
390 #undef convert_uint_sse4_functions
391
392 // for optimization this one has extra template parameters
393 // TEMPLATE_NEED_BACKSCALE to support dither_target_bits being lower than target bit depth
394 template<typename pixel_t_s, typename pixel_t_d, bool chroma, bool fulls, bool fulld, bool TEMPLATE_NEED_BACKSCALE, bool TEMPLATE_LOW_DITHER_BITDEPTH>
395 #if defined(GCC) || defined(CLANG)
396 __attribute__((__target__("sse4.1")))
397 #endif
398 5 static void do_convert_ordered_dither_uint_sse41(const BYTE* srcp8, BYTE* dstp8, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth)
399 {
400 5 const pixel_t_s* srcp = reinterpret_cast<const pixel_t_s*>(srcp8);
401 5 pixel_t_d* dstp = reinterpret_cast<pixel_t_d*>(dstp8);
402 5 dst_pitch = dst_pitch / sizeof(pixel_t_d);
403
404 5 src_pitch = src_pitch / sizeof(pixel_t_s);
405 // we can safely process whole 16 (8 bit src) / 32 byte (16 bit source) chunks, Avisynth ensures at least 32 byte alignment
406 5 const int src_width = (src_rowsize / sizeof(pixel_t_s) + 15) & ~15;
407
408 // helps compiler optimization
409 if constexpr (sizeof(pixel_t_s) == 1)
410 1 source_bitdepth = 8;
411 if constexpr (sizeof(pixel_t_d) == 1) {
412 3 target_bitdepth = 8;
413 if (!TEMPLATE_NEED_BACKSCALE) {
414 2 dither_target_bitdepth = 8;
415 }
416 }
417
418 5 const int max_pixel_value_target = (1 << target_bitdepth) - 1;
419 5 const int max_pixel_value_dithered = (1 << dither_target_bitdepth) - 1;
420 // precheck ensures:
421 // target_bitdepth >= dither_target_bitdepth
422 // source_bitdepth - dither_target_bitdepth <= 8 (max precalculated table is 16x16)
423 5 const bool odd_diff = (source_bitdepth - dither_target_bitdepth) & 1;
424 5 const int dither_bit_diff = (source_bitdepth - dither_target_bitdepth);
425 5 const int dither_order = (dither_bit_diff + 1) / 2;
426 5 const int dither_mask = (1 << dither_order) - 1; // 9,10=2 11,12=4 13,14=8 15,16=16
427 // 10->8: 0x01 (2x2)
428 // 11->8: 0x03 (4x4)
429 // 12->8: 0x03 (4x4)
430 // 14->8: 0x07 (8x8)
431 // 16->8: 0x0F (16x16)
432 const BYTE* matrix;
433
5/360
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 8 taken 1 time.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 7 taken 1 time.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 8 not taken.
✗ Branch 3 → 12 not taken.
✗ Branch 3 → 16 not taken.
✗ Branch 3 → 20 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✓ Branch 2 → 15 taken 1 time.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✓ Branch 2 → 11 taken 1 time.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 7 not taken.
✗ Branch 2 → 11 not taken.
✗ Branch 2 → 15 not taken.
✗ Branch 2 → 19 not taken.
5 switch (dither_order) {
434
1/144
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
1 case 1: matrix = reinterpret_cast<const BYTE*>(odd_diff ? dither2x2a_data_sse2 : dither2x2_data_sse2); break;
435
2/144
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 8 → 9 taken 1 time.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 9 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
2 case 2: matrix = reinterpret_cast<const BYTE*>(odd_diff ? dither4x4a_data_sse2 : dither4x4_data_sse2); break;
436
1/144
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 11 → 12 taken 1 time.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
1 case 3: matrix = reinterpret_cast<const BYTE*>(odd_diff ? dither8x8a_data_sse2 : dither8x8_data_sse2); break;
437
1/144
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 18 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
1 case 4: matrix = reinterpret_cast<const BYTE*>(odd_diff ? dither16x16a_data : dither16x16_data); break; // no spec sse, already 16 bytes long
438 default: return; // n/a
439 }
440
441 5 const int bitdiff_between_dither_and_target = target_bitdepth - dither_target_bitdepth;
442
5/144
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✓ Branch 21 → 23 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 22 not taken.
5 assert(TEMPLATE_NEED_BACKSCALE == (target_bitdepth != dither_target_bitdepth)); // dither to x, target to y
443
444
5/144
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✓ Branch 23 → 25 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 25 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
5 assert(TEMPLATE_LOW_DITHER_BITDEPTH == (dither_target_bitdepth < 8));
445 // e.g. instead of 0,1 => -0.5,+0.5; 0,1,2,3 => -1.5,-0.5,0.5,1.5
446 5 const float half_maxcorr_value = ((1 << dither_bit_diff) - 1) / 2.0f;
447
448 5 const int source_max = (1 << source_bitdepth) - 1;
449 //-----------------------
450 // When calculating src_pixel, src and dst are of the same bit depth
451
5/144
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 47 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 46 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 46 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 47 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 46 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 24 → 25 taken 1 time.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 46 not taken.
5 bits_conv_constants d;
452 get_bits_conv_constants(d, chroma, fulls, fulld, source_bitdepth, source_bitdepth); // both is src_bitdepth
453
454 5 auto dst_offset_plus_round = d.dst_offset + 0.5f;
455 5 constexpr auto src_pixel_min = 0;
456 5 const auto src_pixel_max = source_max;
457 5 const float mul_factor_backfromlowdither = (float)max_pixel_value_target / max_pixel_value_dithered;
458 //-----------------------
459
460 10 const auto mul_factor_simd = _mm_set1_ps(d.mul_factor);
461 5 const auto mul_factor_backfromlowdither_simd = _mm_set1_ps(mul_factor_backfromlowdither);
462 5 const auto half_maxcorr_value_simd = _mm_set1_ps(half_maxcorr_value);
463 5 const auto zero = _mm_setzero_si128();
464 5 const BYTE* matrix_simd16 = matrix;
465 const BYTE* current_matrix_line;
466
467
10/144
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 112 → 85 not taken.
✗ Branch 112 → 113 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 125 → 86 not taken.
✗ Branch 125 → 126 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 227 → 86 not taken.
✗ Branch 227 → 228 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 178 → 85 not taken.
✗ Branch 178 → 179 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 191 → 86 not taken.
✗ Branch 191 → 192 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 297 → 86 not taken.
✗ Branch 297 → 298 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 178 → 85 not taken.
✗ Branch 178 → 179 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 191 → 86 not taken.
✗ Branch 191 → 192 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 297 → 86 not taken.
✗ Branch 297 → 298 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 112 → 85 not taken.
✗ Branch 112 → 113 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 125 → 86 not taken.
✗ Branch 125 → 126 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 227 → 86 taken 5 times.
✓ Branch 227 → 228 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 112 → 85 not taken.
✗ Branch 112 → 113 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 125 → 86 not taken.
✗ Branch 125 → 126 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 227 → 86 not taken.
✗ Branch 227 → 228 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 178 → 85 not taken.
✗ Branch 178 → 179 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 191 → 86 not taken.
✗ Branch 191 → 192 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 297 → 86 not taken.
✗ Branch 297 → 298 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 178 → 85 not taken.
✗ Branch 178 → 179 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 191 → 86 not taken.
✗ Branch 191 → 192 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 297 → 86 not taken.
✗ Branch 297 → 298 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 112 → 85 not taken.
✗ Branch 112 → 113 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 125 → 86 not taken.
✗ Branch 125 → 126 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 227 → 86 not taken.
✗ Branch 227 → 228 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 138 → 85 taken 7 times.
✓ Branch 138 → 139 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 151 → 86 not taken.
✗ Branch 151 → 152 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 225 → 86 not taken.
✗ Branch 225 → 226 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 208 → 85 not taken.
✗ Branch 208 → 209 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 221 → 86 not taken.
✗ Branch 221 → 222 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 295 → 86 not taken.
✗ Branch 295 → 296 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 208 → 85 not taken.
✗ Branch 208 → 209 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 221 → 86 not taken.
✗ Branch 221 → 222 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 295 → 86 not taken.
✗ Branch 295 → 296 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 138 → 85 taken 5 times.
✓ Branch 138 → 139 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 151 → 86 not taken.
✗ Branch 151 → 152 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 225 → 86 not taken.
✗ Branch 225 → 226 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 138 → 85 not taken.
✗ Branch 138 → 139 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 151 → 86 not taken.
✗ Branch 151 → 152 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 225 → 86 not taken.
✗ Branch 225 → 226 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 208 → 85 not taken.
✗ Branch 208 → 209 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 221 → 86 not taken.
✗ Branch 221 → 222 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 295 → 86 not taken.
✗ Branch 295 → 296 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 208 → 85 not taken.
✗ Branch 208 → 209 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 221 → 86 not taken.
✗ Branch 221 → 222 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 295 → 86 not taken.
✗ Branch 295 → 296 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 138 → 85 not taken.
✗ Branch 138 → 139 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 151 → 86 not taken.
✗ Branch 151 → 152 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 225 → 86 not taken.
✗ Branch 225 → 226 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 145 → 85 not taken.
✗ Branch 145 → 146 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 157 → 85 not taken.
✗ Branch 157 → 158 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 231 → 85 not taken.
✗ Branch 231 → 232 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 215 → 85 not taken.
✗ Branch 215 → 216 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 227 → 85 not taken.
✗ Branch 227 → 228 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 301 → 85 not taken.
✗ Branch 301 → 302 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 215 → 85 not taken.
✗ Branch 215 → 216 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 227 → 85 not taken.
✗ Branch 227 → 228 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 301 → 85 not taken.
✗ Branch 301 → 302 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 145 → 85 not taken.
✗ Branch 145 → 146 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 157 → 85 taken 17 times.
✓ Branch 157 → 158 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 231 → 85 not taken.
✗ Branch 231 → 232 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 145 → 85 not taken.
✗ Branch 145 → 146 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 157 → 85 not taken.
✗ Branch 157 → 158 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 231 → 85 not taken.
✗ Branch 231 → 232 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 215 → 85 not taken.
✗ Branch 215 → 216 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 227 → 85 not taken.
✗ Branch 227 → 228 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 301 → 85 not taken.
✗ Branch 301 → 302 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 215 → 85 taken 9 times.
✓ Branch 215 → 216 taken 1 time.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 227 → 85 not taken.
✗ Branch 227 → 228 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 301 → 85 not taken.
✗ Branch 301 → 302 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 145 → 85 not taken.
✗ Branch 145 → 146 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 157 → 85 not taken.
✗ Branch 157 → 158 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 231 → 85 not taken.
✗ Branch 231 → 232 not taken.
48 for (int y = 0; y < src_height; y++)
468 {
469 // int _y = (y & dither_mask) << dither_order; // for C version
470 43 current_matrix_line = matrix_simd16 + ((y & dither_mask) << 4); // always 16 byte boundary instead of dither order
471 43 __m128i corr = _mm_load_si128(reinterpret_cast<const __m128i*>(current_matrix_line)); // int corr = matrix[_y | (x & dither_mask)];
472 // convert corr to 16 bit
473 43 __m128i corr_lo = _mm_unpacklo_epi8(corr, zero);
474 43 __m128i corr_hi = _mm_unpackhi_epi8(corr, zero);
475
476
10/144
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 110 → 92 not taken.
✗ Branch 110 → 111 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 123 → 93 not taken.
✗ Branch 123 → 124 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 225 → 93 not taken.
✗ Branch 225 → 226 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 176 → 92 not taken.
✗ Branch 176 → 177 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 189 → 93 not taken.
✗ Branch 189 → 190 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 295 → 93 not taken.
✗ Branch 295 → 296 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 176 → 92 not taken.
✗ Branch 176 → 177 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 189 → 93 not taken.
✗ Branch 189 → 190 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 295 → 93 not taken.
✗ Branch 295 → 296 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 110 → 92 not taken.
✗ Branch 110 → 111 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 123 → 93 not taken.
✗ Branch 123 → 124 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 225 → 93 taken 10 times.
✓ Branch 225 → 226 taken 5 times.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 110 → 92 not taken.
✗ Branch 110 → 111 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 123 → 93 not taken.
✗ Branch 123 → 124 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 225 → 93 not taken.
✗ Branch 225 → 226 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 176 → 92 not taken.
✗ Branch 176 → 177 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 189 → 93 not taken.
✗ Branch 189 → 190 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 295 → 93 not taken.
✗ Branch 295 → 296 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 176 → 92 not taken.
✗ Branch 176 → 177 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 189 → 93 not taken.
✗ Branch 189 → 190 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 295 → 93 not taken.
✗ Branch 295 → 296 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 110 → 92 not taken.
✗ Branch 110 → 111 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 123 → 93 not taken.
✗ Branch 123 → 124 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 225 → 93 not taken.
✗ Branch 225 → 226 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 136 → 92 taken 14 times.
✓ Branch 136 → 137 taken 7 times.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 149 → 93 not taken.
✗ Branch 149 → 150 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 223 → 93 not taken.
✗ Branch 223 → 224 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 206 → 92 not taken.
✗ Branch 206 → 207 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 219 → 93 not taken.
✗ Branch 219 → 220 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 293 → 93 not taken.
✗ Branch 293 → 294 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 206 → 92 not taken.
✗ Branch 206 → 207 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 219 → 93 not taken.
✗ Branch 219 → 220 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 293 → 93 not taken.
✗ Branch 293 → 294 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 136 → 92 taken 10 times.
✓ Branch 136 → 137 taken 5 times.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 149 → 93 not taken.
✗ Branch 149 → 150 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 223 → 93 not taken.
✗ Branch 223 → 224 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 92 not taken.
✗ Branch 136 → 137 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 149 → 93 not taken.
✗ Branch 149 → 150 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 223 → 93 not taken.
✗ Branch 223 → 224 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 206 → 92 not taken.
✗ Branch 206 → 207 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 219 → 93 not taken.
✗ Branch 219 → 220 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 293 → 93 not taken.
✗ Branch 293 → 294 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 206 → 92 not taken.
✗ Branch 206 → 207 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 219 → 93 not taken.
✗ Branch 219 → 220 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 293 → 93 not taken.
✗ Branch 293 → 294 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 136 → 92 not taken.
✗ Branch 136 → 137 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 149 → 93 not taken.
✗ Branch 149 → 150 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 223 → 93 not taken.
✗ Branch 223 → 224 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 143 → 92 not taken.
✗ Branch 143 → 144 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 155 → 92 not taken.
✗ Branch 155 → 156 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 229 → 92 not taken.
✗ Branch 229 → 230 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 213 → 92 not taken.
✗ Branch 213 → 214 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 225 → 92 not taken.
✗ Branch 225 → 226 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 299 → 92 not taken.
✗ Branch 299 → 300 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 213 → 92 not taken.
✗ Branch 213 → 214 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 225 → 92 not taken.
✗ Branch 225 → 226 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 299 → 92 not taken.
✗ Branch 299 → 300 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 143 → 92 not taken.
✗ Branch 143 → 144 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 155 → 92 taken 34 times.
✓ Branch 155 → 156 taken 17 times.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 229 → 92 not taken.
✗ Branch 229 → 230 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 143 → 92 not taken.
✗ Branch 143 → 144 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 155 → 92 not taken.
✗ Branch 155 → 156 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 229 → 92 not taken.
✗ Branch 229 → 230 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 213 → 92 not taken.
✗ Branch 213 → 214 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 225 → 92 not taken.
✗ Branch 225 → 226 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 299 → 92 not taken.
✗ Branch 299 → 300 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 213 → 92 taken 18 times.
✓ Branch 213 → 214 taken 9 times.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 225 → 92 not taken.
✗ Branch 225 → 226 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 299 → 92 not taken.
✗ Branch 299 → 300 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 143 → 92 not taken.
✗ Branch 143 → 144 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 155 → 92 not taken.
✗ Branch 155 → 156 not taken.
void do_convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 229 → 92 not taken.
✗ Branch 229 → 230 not taken.
129 for (int x = 0; x < src_width; x += 16)
477 {
478 //const int corr = matrix[_y | (x & dither_mask)];
479
480 //int src_pixel = srcp[x];
481 __m128i src_lo, src_hi;
482 if constexpr (sizeof(pixel_t_s) == 1) {
483 20 auto src = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp + x)); // 16* uint8
484 10 src_lo = _mm_unpacklo_epi8(src, zero); // 8* uint16
485 10 src_hi = _mm_unpackhi_epi8(src, zero); // 8* uint16
486 }
487 else {
488 76 src_lo = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp + x)); // 8* uint16
489 134 src_hi = _mm_load_si128(reinterpret_cast<const __m128i*>(srcp + x + 8));
490 }
491
492 [[maybe_unused]] __m128i src_lo_lo;
493 [[maybe_unused]] __m128i src_lo_hi;
494 [[maybe_unused]] __m128i src_hi_lo;
495 [[maybe_unused]] __m128i src_hi_hi;
496 if constexpr (fulls != fulld) {
497 // goint to 32 float
498 // const float val = (srcp[x] - src_offset) * mul_factor + dst_offset_plus_round;
499 36 const auto src_offset_simd = _mm_set1_epi32(d.src_offset_i);
500 18 const auto dst_offset_plus_round_simd = _mm_set1_ps(dst_offset_plus_round);
501
502 54 auto src_lo_lo_ps = _mm_cvtepi32_ps(_mm_sub_epi32(_mm_unpacklo_epi16(src_lo, zero), src_offset_simd));
503 54 auto src_lo_hi_ps = _mm_cvtepi32_ps(_mm_sub_epi32(_mm_unpackhi_epi16(src_lo, zero), src_offset_simd));
504 36 src_lo_lo_ps = _mm_add_ps(_mm_mul_ps(src_lo_lo_ps, mul_factor_simd), dst_offset_plus_round_simd);
505 36 src_lo_hi_ps = _mm_add_ps(_mm_mul_ps(src_lo_hi_ps, mul_factor_simd), dst_offset_plus_round_simd);
506
507 54 auto src_hi_lo_ps = _mm_cvtepi32_ps(_mm_sub_epi32(_mm_unpacklo_epi16(src_hi, zero), src_offset_simd));
508 54 auto src_hi_hi_ps = _mm_cvtepi32_ps(_mm_sub_epi32(_mm_unpackhi_epi16(src_hi, zero), src_offset_simd));
509 36 src_hi_lo_ps = _mm_add_ps(_mm_mul_ps(src_hi_lo_ps, mul_factor_simd), dst_offset_plus_round_simd);
510 36 src_hi_hi_ps = _mm_add_ps(_mm_mul_ps(src_hi_hi_ps, mul_factor_simd), dst_offset_plus_round_simd);
511
512 // src_pixel = clamp((int)val, src_pixel_min, src_pixel_max);
513 if constexpr (sizeof(pixel_t_s) == 1 && !TEMPLATE_LOW_DITHER_BITDEPTH) {
514 // Source is 8 bits. This branch is ineffective if we define TEMPLATE_LOW_DITHER_BITDEPTH for all <8 bits, as we do now
515 // We would reach this code for 5-7 bits when lo limit would be e.g. 4 bits
516 // 8 bit source: we can go back from 32 to 16 bit int
517 src_lo = _mm_packus_epi32(_mm_cvttps_epi32(src_lo_lo_ps), _mm_cvttps_epi32(src_lo_hi_ps));
518 src_hi = _mm_packus_epi32(_mm_cvttps_epi32(src_hi_lo_ps), _mm_cvttps_epi32(src_hi_hi_ps));
519 // 0 min is ensured by packus
520 const auto src_pixel_max_simd = _mm_set1_epi16(src_pixel_max);
521 src_lo = _mm_min_epu16(src_lo, src_pixel_max_simd);
522 src_hi = _mm_min_epu16(src_hi, src_pixel_max_simd);
523 // tmp result 16 bits in src_lo, src_hi
524 }
525 else {
526 // go back to int32 only
527 18 src_lo_lo = _mm_cvttps_epi32(src_lo_lo_ps);
528 18 src_lo_hi = _mm_cvttps_epi32(src_lo_hi_ps);
529 18 src_hi_lo = _mm_cvttps_epi32(src_hi_lo_ps);
530 18 src_hi_hi = _mm_cvttps_epi32(src_hi_hi_ps);
531
532 // no packus to ensure min 0
533 18 const auto src_pixel_min_simd = _mm_set1_epi32(src_pixel_min);
534 18 src_lo_lo = _mm_max_epi32(src_lo_lo, src_pixel_min_simd);
535 18 src_lo_hi = _mm_max_epi32(src_lo_hi, src_pixel_min_simd);
536 18 src_hi_lo = _mm_max_epi32(src_hi_lo, src_pixel_min_simd);
537 18 src_hi_hi = _mm_max_epi32(src_hi_hi, src_pixel_min_simd);
538
539 18 const auto src_pixel_max_simd = _mm_set1_epi32(src_pixel_max);
540 18 src_lo_lo = _mm_min_epi32(src_lo_lo, src_pixel_max_simd);
541 18 src_lo_hi = _mm_min_epi32(src_lo_hi, src_pixel_max_simd);
542 18 src_hi_lo = _mm_min_epi32(src_hi_lo, src_pixel_max_simd);
543 18 src_hi_hi = _mm_min_epi32(src_hi_hi, src_pixel_max_simd);
544 // tmp result 32 bits in src_lo_lo, src_lo_hi, src_hi_lo, src_hi_hi
545 }
546 }
547 else {
548 // 10-16 bits: go into 32 bit int
549 if constexpr (sizeof(pixel_t_s) == 2 || TEMPLATE_LOW_DITHER_BITDEPTH) {
550 68 src_lo_lo = _mm_unpacklo_epi16(src_lo, zero);
551 68 src_lo_hi = _mm_unpackhi_epi16(src_lo, zero);
552 68 src_hi_lo = _mm_unpacklo_epi16(src_hi, zero);
553 68 src_hi_hi = _mm_unpackhi_epi16(src_hi, zero);
554 // tmp result 32 bits in src_lo_lo, src_lo_hi, src_hi_lo, src_hi_hi
555 }
556 }
557
558 __m128i new_pixel_lo, new_pixel_hi;
559
560 // scale down after adding dithering noise
561 // int new_pixel = ((src_pixel + corr) >> dither_bit_diff);
562 if constexpr (sizeof(pixel_t_s) == 1 && !TEMPLATE_LOW_DITHER_BITDEPTH) {
563 new_pixel_lo = _mm_srai_epi16(_mm_add_epi16(src_lo, corr_lo), dither_bit_diff);
564 new_pixel_hi = _mm_srai_epi16(_mm_add_epi16(src_hi, corr_hi), dither_bit_diff);
565 // new_pixel_lo/hi is ready with 16 bit data
566 }
567 else {
568 // source bits: >8 or 8 bit but PRESHIFT
569 // At 16 bit overflow can happen when 0xFFFF it dithered up. This is why we are at 32 bits int
570 // Theoretically fulls == fulld && <16 bit would allow 16 bit int workflow but we do not specialize for that
571 // low dither bitdepth is special as well
572
573 /*
574 int new_pixel;
575 if (TEMPLATE_LOW_DITHER_BITDEPTH) {
576 // accurate dither: +/-
577 const float corr_f = corr - half_maxcorr_value;
578 new_pixel = (int)(src_pixel + corr_f) >> dither_bit_diff;
579 }
580 else
581 new_pixel = ((src_pixel + corr) >> dither_bit_diff);
582 */
583 __m128i new_pixel_lo_lo, new_pixel_lo_hi, new_pixel_hi_lo, new_pixel_hi_hi;
584 86 auto corr_lo_lo = _mm_unpacklo_epi16(corr_lo, zero);
585 86 auto corr_lo_hi = _mm_unpackhi_epi16(corr_lo, zero);
586 86 auto corr_hi_lo = _mm_unpacklo_epi16(corr_hi, zero);
587 86 auto corr_hi_hi = _mm_unpackhi_epi16(corr_hi, zero);
588 if constexpr(TEMPLATE_LOW_DITHER_BITDEPTH) {
589 // accurately positioned to the center
590 20 auto corr_lo_lo_ps = _mm_sub_ps(_mm_cvtepi32_ps(corr_lo_lo), half_maxcorr_value_simd);
591 20 auto corr_lo_hi_ps = _mm_sub_ps(_mm_cvtepi32_ps(corr_lo_hi), half_maxcorr_value_simd);
592 20 auto corr_hi_lo_ps = _mm_sub_ps(_mm_cvtepi32_ps(corr_hi_lo), half_maxcorr_value_simd);
593 20 auto corr_hi_hi_ps = _mm_sub_ps(_mm_cvtepi32_ps(corr_hi_hi), half_maxcorr_value_simd);
594 // accurate dither: +/-
595 40 new_pixel_lo_lo = _mm_srai_epi32(_mm_cvttps_epi32(_mm_add_ps(_mm_cvtepi32_ps(src_lo_lo), corr_lo_lo_ps)), dither_bit_diff);
596 40 new_pixel_lo_hi = _mm_srai_epi32(_mm_cvttps_epi32(_mm_add_ps(_mm_cvtepi32_ps(src_lo_hi), corr_lo_hi_ps)), dither_bit_diff);
597 40 new_pixel_hi_lo = _mm_srai_epi32(_mm_cvttps_epi32(_mm_add_ps(_mm_cvtepi32_ps(src_hi_lo), corr_hi_lo_ps)), dither_bit_diff);
598 40 new_pixel_hi_hi = _mm_srai_epi32(_mm_cvttps_epi32(_mm_add_ps(_mm_cvtepi32_ps(src_hi_hi), corr_hi_hi_ps)), dither_bit_diff);
599 }
600 else {
601 // Arrgh. If dither_bit_diff would be an immediate constant (e.g. template parameter) then we get 2390 fps vs 1378!
602 // for a simple Vide16bit.ConvertBits(8, dither=0, dither_bits=8)
603 // const auto dither_bit_diff = 8;
604 152 new_pixel_lo_lo = _mm_srai_epi32(_mm_add_epi32(src_lo_lo, corr_lo_lo), dither_bit_diff);
605 152 new_pixel_lo_hi = _mm_srai_epi32(_mm_add_epi32(src_lo_hi, corr_lo_hi), dither_bit_diff);
606 152 new_pixel_hi_lo = _mm_srai_epi32(_mm_add_epi32(src_hi_lo, corr_hi_lo), dither_bit_diff);
607 152 new_pixel_hi_hi = _mm_srai_epi32(_mm_add_epi32(src_hi_hi, corr_hi_hi), dither_bit_diff);
608 }
609 86 new_pixel_lo = _mm_packus_epi32(new_pixel_lo_lo, new_pixel_lo_hi);
610 86 new_pixel_hi = _mm_packus_epi32(new_pixel_hi_lo, new_pixel_hi_hi);
611 // new_pixel_lo/hi is ready with 16 bit data
612 }
613
614 // scale back to the required bit depth
615 // dither to x, target to y
616 if constexpr (TEMPLATE_NEED_BACKSCALE) {
617 /*
618 new_pixel = min(new_pixel, max_pixel_value_dithered);
619 if (TEMPLATE_LOW_DITHER_BITDEPTH) {
620 new_pixel = (int)(new_pixel * mul_factor_backfromlowdither + 0.5f);
621 }
622 else {
623 new_pixel = new_pixel << bitdiff_between_dither_and_target;
624 }
625 */
626 88 const auto max_pixel_value_dithered_simd = _mm_set1_epi16(max_pixel_value_dithered);
627 44 new_pixel_lo = _mm_min_epu16(new_pixel_lo, max_pixel_value_dithered_simd);
628 44 new_pixel_hi = _mm_min_epu16(new_pixel_hi, max_pixel_value_dithered_simd);
629 // Interesting problem of dither_bits==1 (or in general at small dither_bits)
630 // After simple slli 0,1 becomes 0,128, we'd expect 0,255 instead. So we make cosmetics.
631 // dither_bits
632 // 1 0,1 => 0,128 => 0,255
633 // 2 0,1,2,3 => 0,64,128,192 => 0,?,?,255
634 // 3 0,...,7 => 0,32,...,224 => 0,?,?,255
635 // 4 0,..,15 => 0,16,...,240 => 0,?,?,255
636 // 5 0,..,31 => 0,8,....,248 => 0,?,?,255
637 // 6 0,..,63 => 0,4,....,252 => 0,?,?,255
638 // 7 0,.,127 => 0,2. ..,254 => 0,?,?,255
639 if constexpr(TEMPLATE_LOW_DITHER_BITDEPTH) {
640 // new_pixel = (int)(new_pixel * mul_factor_backfromlowdither + 0.5f);
641 10 auto rounder_half_simd = _mm_set1_ps(0.5f);
642
643 20 auto new_pixel_lo_lo_ps = _mm_cvtepi32_ps(_mm_unpacklo_epi16(new_pixel_lo, zero));
644 20 auto new_pixel_lo_hi_ps = _mm_cvtepi32_ps(_mm_unpackhi_epi16(new_pixel_lo, zero));
645 70 new_pixel_lo = _mm_packus_epi32(
646 _mm_cvttps_epi32(_mm_add_ps(_mm_mul_ps(new_pixel_lo_lo_ps, mul_factor_backfromlowdither_simd), rounder_half_simd)),
647 _mm_cvttps_epi32(_mm_add_ps(_mm_mul_ps(new_pixel_lo_hi_ps, mul_factor_backfromlowdither_simd), rounder_half_simd))
648 );
649 20 auto new_pixel_hi_lo_ps = _mm_cvtepi32_ps(_mm_unpacklo_epi16(new_pixel_hi, zero));
650 20 auto new_pixel_hi_hi_ps = _mm_cvtepi32_ps(_mm_unpackhi_epi16(new_pixel_hi, zero));
651 70 new_pixel_hi = _mm_packus_epi32(
652 _mm_cvttps_epi32(_mm_add_ps(_mm_mul_ps(new_pixel_hi_lo_ps, mul_factor_backfromlowdither_simd), rounder_half_simd)),
653 _mm_cvttps_epi32(_mm_add_ps(_mm_mul_ps(new_pixel_hi_hi_ps, mul_factor_backfromlowdither_simd), rounder_half_simd))
654 );
655 }
656 else {
657 34 new_pixel_lo = _mm_slli_epi16(new_pixel_lo, bitdiff_between_dither_and_target);
658 34 new_pixel_hi = _mm_slli_epi16(new_pixel_hi, bitdiff_between_dither_and_target);
659 }
660 }
661
662 // dstp[x] = (pixel_t_d)(min((int)new_pixel, max_pixel_value_target));
663 if constexpr(sizeof(pixel_t_d) == 1)
664 {
665 34 auto result = _mm_packus_epi16(new_pixel_lo, new_pixel_hi);
666 34 _mm_store_si128(reinterpret_cast<__m128i*>(dstp + x), result);
667 }
668 else {
669 104 const auto max_pixel_value_target_simd = _mm_set1_epi16(max_pixel_value_target);
670 // max is unnecessary for exact 16 bit pixel type but we are not specialized for that case
671 52 new_pixel_lo = _mm_min_epu16(new_pixel_lo, max_pixel_value_target_simd);
672 52 new_pixel_hi = _mm_min_epu16(new_pixel_hi, max_pixel_value_target_simd);
673 52 _mm_store_si128(reinterpret_cast<__m128i*>(dstp + x), new_pixel_lo);
674 52 _mm_store_si128(reinterpret_cast<__m128i*>(dstp + x + 8), new_pixel_hi);
675 }
676 }
677 43 dstp += dst_pitch;
678 43 srcp += src_pitch;
679 }
680 }
681
682 template<typename pixel_t_s, typename pixel_t_d, bool chroma, bool fulls, bool fulld>
683 #if defined(GCC) || defined(CLANG)
684 __attribute__((__target__("sse4.1")))
685 #endif
686 5 void convert_ordered_dither_uint_sse41(const BYTE* srcp8, BYTE* dstp8, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth)
687 {
688 5 const bool need_backscale = target_bitdepth != dither_target_bitdepth; // dither to x, target to y
689 5 const bool low_dither_bitdepth = dither_target_bitdepth < 8; // 1-7 bits dither targets, need_backscale is always true, since 8 bit format is the minimum
690
5/48
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 6 taken 1 time.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 6 taken 1 time.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 6 taken 1 time.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 6 not taken.
5 if (need_backscale) {
691
2/48
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned char, unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned char, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, false, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, false, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, false>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_ordered_dither_uint_sse41<unsigned short, unsigned short, true, true, true>(unsigned char const*, unsigned char*, int, int, int, int, int, int, int):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
2 if (low_dither_bitdepth)
692 1 do_convert_ordered_dither_uint_sse41<pixel_t_s, pixel_t_d, chroma, fulls, fulld, true, true>(srcp8, dstp8, src_rowsize, src_height, src_pitch, dst_pitch, source_bitdepth, target_bitdepth, dither_target_bitdepth);
693 else
694 1 do_convert_ordered_dither_uint_sse41<pixel_t_s, pixel_t_d, chroma, fulls, fulld, true, false>(srcp8, dstp8, src_rowsize, src_height, src_pitch, dst_pitch, source_bitdepth, target_bitdepth, dither_target_bitdepth);
695 }
696 else {
697 3 do_convert_ordered_dither_uint_sse41<pixel_t_s, pixel_t_d, chroma, fulls, fulld, false, false>(srcp8, dstp8, src_rowsize, src_height, src_pitch, dst_pitch, source_bitdepth, target_bitdepth, dither_target_bitdepth);
698 }
699 5 }
700
701 // instantiate them all
702 // template<typename pixel_t_s, typename pixel_t_d, bool chroma, bool fulls, bool fulld>
703 // spec: fulld=false, fulls=false
704 #define convert_ordered_dither_uint_sse4_functions(uint_X_t, uint_X_dest_t) \
705 template void convert_ordered_dither_uint_sse41<uint_X_t, uint_X_dest_t, false, false, false>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
706 template void convert_ordered_dither_uint_sse41<uint_X_t, uint_X_dest_t, false, false, true>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
707 template void convert_ordered_dither_uint_sse41<uint_X_t, uint_X_dest_t, false, true, false>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
708 template void convert_ordered_dither_uint_sse41<uint_X_t, uint_X_dest_t, false, true, true>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
709 template void convert_ordered_dither_uint_sse41<uint_X_t, uint_X_dest_t, true, false, false>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
710 template void convert_ordered_dither_uint_sse41<uint_X_t, uint_X_dest_t, true, false, true>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
711 template void convert_ordered_dither_uint_sse41<uint_X_t, uint_X_dest_t, true, true, false>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth); \
712 template void convert_ordered_dither_uint_sse41<uint_X_t, uint_X_dest_t, true, true, true>(const BYTE* srcp, BYTE* dstp, int src_rowsize, int src_height, int src_pitch, int dst_pitch, int source_bitdepth, int target_bitdepth, int dither_target_bitdepth);
713
714 // dither only same of less bit depth
715 convert_ordered_dither_uint_sse4_functions(uint8_t, uint8_t)
716 convert_ordered_dither_uint_sse4_functions(uint16_t, uint8_t)
717 convert_ordered_dither_uint_sse4_functions(uint16_t, uint16_t)
718
719 #undef convert_ordered_dither_uint_sse4_functions
720
721
722