Coverage Report

Created: 2026-07-28 06:51

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libavif/ext/libyuv/source/row_any.cc
Line
Count
Source
1
/*
2
 *  Copyright 2012 The LibYuv Project Authors. All rights reserved.
3
 *
4
 *  Use of this source code is governed by a BSD-style license
5
 *  that can be found in the LICENSE file in the root of the source
6
 *  tree. An additional intellectual property rights grant can be found
7
 *  in the file PATENTS. All contributing project authors may
8
 *  be found in the AUTHORS file in the root of the source tree.
9
 */
10
11
#include "libyuv/row.h"
12
13
#include <string.h>  // For memset.
14
15
#include "libyuv/basic_types.h"
16
17
#ifdef __cplusplus
18
namespace libyuv {
19
extern "C" {
20
#endif
21
22
// memset for vin is meant to clear the source buffer so that
23
// SIMD that reads full multiple of 16 bytes will not trigger msan errors.
24
// memset is not needed for production, as the garbage values are processed but
25
// not used, although there may be edge cases for subsampling.
26
// The size of the buffer is based on the largest read, which can be inferred
27
// by the source type (e.g. ARGB) and the mask (last parameter), or by examining
28
// the source code for how much the source pointers are advanced.
29
30
// Subsampled source needs to be increase by 1 of not even.
31
306k
#define SS(width, shift) (((width) + (1 << (shift)) - 1) >> (shift))
32
33
// Any 4 planes to 1
34
#define ANY41(NAMEANY, ANY_SIMD, UVSHIFT, DUVSHIFT, BPP, MASK)               \
35
  void NAMEANY(const uint8_t* y_buf, const uint8_t* u_buf,                   \
36
               const uint8_t* v_buf, const uint8_t* a_buf, uint8_t* dst_ptr, \
37
0
               int width) {                                                  \
38
0
    SIMD_ALIGNED(uint8_t vin[64 * 4]);                                       \
39
0
    SIMD_ALIGNED(uint8_t vout[64]);                                          \
40
0
    memset(vin, 0, sizeof(vin)); /* for msan */                              \
41
0
    int r = width & MASK;                                                    \
42
0
    int n = width & ~MASK;                                                   \
43
0
    if (n > 0) {                                                             \
44
0
      ANY_SIMD(y_buf, u_buf, v_buf, a_buf, dst_ptr, n);                      \
45
0
    }                                                                        \
46
0
    ptrdiff_t np = n;                                                        \
47
0
    memcpy(vin, y_buf + np, r);                                              \
48
0
    memcpy(vin + 64, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT));               \
49
0
    memcpy(vin + 128, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT));              \
50
0
    memcpy(vin + 192, a_buf + np, r);                                        \
51
0
    ANY_SIMD(vin, vin + 64, vin + 128, vin + 192, vout, MASK + 1);           \
52
0
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP);   \
53
0
  }
Unexecuted instantiation: MergeARGBRow_Any_SSE2
Unexecuted instantiation: MergeARGBRow_Any_AVX2
54
55
#ifdef HAS_MERGEARGBROW_SSE2
56
ANY41(MergeARGBRow_Any_SSE2, MergeARGBRow_SSE2, 0, 0, 4, 7)
57
#endif
58
#ifdef HAS_MERGEARGBROW_AVX2
59
ANY41(MergeARGBRow_Any_AVX2, MergeARGBRow_AVX2, 0, 0, 4, 15)
60
#endif
61
#ifdef HAS_MERGEARGBROW_NEON
62
ANY41(MergeARGBRow_Any_NEON, MergeARGBRow_NEON, 0, 0, 4, 15)
63
#endif
64
65
// Note that odd width replication includes 444 due to implementation
66
// on arm that subsamples 444 to 422 internally.
67
// Any 4 planes to 1 with yuvconstants
68
#define ANY41C(NAMEANY, ANY_SIMD, UVSHIFT, DUVSHIFT, BPP, MASK)              \
69
  void NAMEANY(const uint8_t* y_buf, const uint8_t* u_buf,                   \
70
               const uint8_t* v_buf, const uint8_t* a_buf, uint8_t* dst_ptr, \
71
12.2k
               const struct YuvConstants* yuvconstants, int width) {         \
72
12.2k
    SIMD_ALIGNED(uint8_t vin[64 * 4]);                                       \
73
12.2k
    SIMD_ALIGNED(uint8_t vout[64]);                                          \
74
12.2k
    memset(vin, 0, sizeof(vin)); /* for msan */                              \
75
12.2k
    int r = width & MASK;                                                    \
76
12.2k
    int n = width & ~MASK;                                                   \
77
12.2k
    if (n > 0) {                                                             \
78
3.14k
      ANY_SIMD(y_buf, u_buf, v_buf, a_buf, dst_ptr, yuvconstants, n);        \
79
3.14k
    }                                                                        \
80
12.2k
    ptrdiff_t np = n;                                                        \
81
12.2k
    memcpy(vin, y_buf + np, r);                                              \
82
12.2k
    memcpy(vin + 64, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT));               \
83
12.2k
    memcpy(vin + 128, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT));              \
84
12.2k
    memcpy(vin + 192, a_buf + np, r);                                        \
85
12.2k
    if (width & 1) {                                                         \
86
8.79k
      vin[64 + SS(r, UVSHIFT)] = vin[64 + SS(r, UVSHIFT) - 1];               \
87
8.79k
      vin[128 + SS(r, UVSHIFT)] = vin[128 + SS(r, UVSHIFT) - 1];             \
88
8.79k
    }                                                                        \
89
12.2k
    ANY_SIMD(vin, vin + 64, vin + 128, vin + 192, vout, yuvconstants,        \
90
12.2k
             MASK + 1);                                                      \
91
12.2k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP);   \
92
12.2k
  }
Unexecuted instantiation: I444AlphaToARGBRow_Any_SSSE3
I444AlphaToARGBRow_Any_AVX2
Line
Count
Source
71
8.56k
               const struct YuvConstants* yuvconstants, int width) {         \
72
8.56k
    SIMD_ALIGNED(uint8_t vin[64 * 4]);                                       \
73
8.56k
    SIMD_ALIGNED(uint8_t vout[64]);                                          \
74
8.56k
    memset(vin, 0, sizeof(vin)); /* for msan */                              \
75
8.56k
    int r = width & MASK;                                                    \
76
8.56k
    int n = width & ~MASK;                                                   \
77
8.56k
    if (n > 0) {                                                             \
78
2.89k
      ANY_SIMD(y_buf, u_buf, v_buf, a_buf, dst_ptr, yuvconstants, n);        \
79
2.89k
    }                                                                        \
80
8.56k
    ptrdiff_t np = n;                                                        \
81
8.56k
    memcpy(vin, y_buf + np, r);                                              \
82
8.56k
    memcpy(vin + 64, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT));               \
83
8.56k
    memcpy(vin + 128, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT));              \
84
8.56k
    memcpy(vin + 192, a_buf + np, r);                                        \
85
8.56k
    if (width & 1) {                                                         \
86
5.47k
      vin[64 + SS(r, UVSHIFT)] = vin[64 + SS(r, UVSHIFT) - 1];               \
87
5.47k
      vin[128 + SS(r, UVSHIFT)] = vin[128 + SS(r, UVSHIFT) - 1];             \
88
5.47k
    }                                                                        \
89
8.56k
    ANY_SIMD(vin, vin + 64, vin + 128, vin + 192, vout, yuvconstants,        \
90
8.56k
             MASK + 1);                                                      \
91
8.56k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP);   \
92
8.56k
  }
Unexecuted instantiation: I422AlphaToARGBRow_Any_SSSE3
I422AlphaToARGBRow_Any_AVX2
Line
Count
Source
71
3.71k
               const struct YuvConstants* yuvconstants, int width) {         \
72
3.71k
    SIMD_ALIGNED(uint8_t vin[64 * 4]);                                       \
73
3.71k
    SIMD_ALIGNED(uint8_t vout[64]);                                          \
74
3.71k
    memset(vin, 0, sizeof(vin)); /* for msan */                              \
75
3.71k
    int r = width & MASK;                                                    \
76
3.71k
    int n = width & ~MASK;                                                   \
77
3.71k
    if (n > 0) {                                                             \
78
250
      ANY_SIMD(y_buf, u_buf, v_buf, a_buf, dst_ptr, yuvconstants, n);        \
79
250
    }                                                                        \
80
3.71k
    ptrdiff_t np = n;                                                        \
81
3.71k
    memcpy(vin, y_buf + np, r);                                              \
82
3.71k
    memcpy(vin + 64, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT));               \
83
3.71k
    memcpy(vin + 128, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT));              \
84
3.71k
    memcpy(vin + 192, a_buf + np, r);                                        \
85
3.71k
    if (width & 1) {                                                         \
86
3.32k
      vin[64 + SS(r, UVSHIFT)] = vin[64 + SS(r, UVSHIFT) - 1];               \
87
3.32k
      vin[128 + SS(r, UVSHIFT)] = vin[128 + SS(r, UVSHIFT) - 1];             \
88
3.32k
    }                                                                        \
89
3.71k
    ANY_SIMD(vin, vin + 64, vin + 128, vin + 192, vout, yuvconstants,        \
90
3.71k
             MASK + 1);                                                      \
91
3.71k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP);   \
92
3.71k
  }
93
94
#ifdef HAS_I444ALPHATOARGBROW_SSSE3
95
ANY41C(I444AlphaToARGBRow_Any_SSSE3, I444AlphaToARGBRow_SSSE3, 0, 0, 4, 7)
96
#endif
97
#ifdef HAS_I444ALPHATOARGBROW_AVX2
98
ANY41C(I444AlphaToARGBRow_Any_AVX2, I444AlphaToARGBRow_AVX2, 0, 0, 4, 15)
99
#endif
100
#ifdef HAS_I422ALPHATOARGBROW_SSSE3
101
ANY41C(I422AlphaToARGBRow_Any_SSSE3, I422AlphaToARGBRow_SSSE3, 1, 0, 4, 7)
102
#endif
103
#ifdef HAS_I422ALPHATOARGBROW_AVX2
104
ANY41C(I422AlphaToARGBRow_Any_AVX2, I422AlphaToARGBRow_AVX2, 1, 0, 4, 15)
105
#endif
106
#ifdef HAS_I444ALPHATOARGBROW_NEON
107
ANY41C(I444AlphaToARGBRow_Any_NEON, I444AlphaToARGBRow_NEON, 0, 0, 4, 7)
108
#endif
109
#ifdef HAS_I422ALPHATOARGBROW_NEON
110
ANY41C(I422AlphaToARGBRow_Any_NEON, I422AlphaToARGBRow_NEON, 1, 0, 4, 7)
111
#endif
112
#ifdef HAS_I422ALPHATOARGBROW_LSX
113
ANY41C(I422AlphaToARGBRow_Any_LSX, I422AlphaToARGBRow_LSX, 1, 0, 4, 15)
114
#endif
115
#ifdef HAS_I422ALPHATOARGBROW_LASX
116
ANY41C(I422AlphaToARGBRow_Any_LASX, I422AlphaToARGBRow_LASX, 1, 0, 4, 15)
117
#endif
118
#undef ANY41C
119
120
// Any 4 planes to 1 plane of 8 bit with yuvconstants
121
#define ANY41CT(NAMEANY, ANY_SIMD, UVSHIFT, DUVSHIFT, T, SBPP, BPP, MASK)      \
122
  void NAMEANY(const T* y_buf, const T* u_buf, const T* v_buf, const T* a_buf, \
123
               uint8_t* dst_ptr, const struct YuvConstants* yuvconstants,      \
124
6.48k
               int width) {                                                    \
125
6.48k
    SIMD_ALIGNED(T vin[16 * 4]);                                               \
126
6.48k
    SIMD_ALIGNED(uint8_t vout[64]);                                            \
127
6.48k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                       \
128
6.48k
    int r = width & MASK;                                                      \
129
6.48k
    int n = width & ~MASK;                                                     \
130
6.48k
    if (n > 0) {                                                               \
131
401
      ANY_SIMD(y_buf, u_buf, v_buf, a_buf, dst_ptr, yuvconstants, n);          \
132
401
    }                                                                          \
133
6.48k
    ptrdiff_t np = n;                                                          \
134
6.48k
    memcpy(vin, y_buf + np, r * SBPP);                                         \
135
6.48k
    memcpy(vin + 16, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);          \
136
6.48k
    memcpy(vin + 32, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);          \
137
6.48k
    memcpy(vin + 48, a_buf + np, r * SBPP);                                    \
138
6.48k
    ANY_SIMD(vin, vin + 16, vin + 32, vin + 48, vout, yuvconstants, MASK + 1); \
139
6.48k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP);     \
140
6.48k
  }
Unexecuted instantiation: I210AlphaToARGBRow_Any_SSSE3
I210AlphaToARGBRow_Any_AVX2
Line
Count
Source
124
2.63k
               int width) {                                                    \
125
2.63k
    SIMD_ALIGNED(T vin[16 * 4]);                                               \
126
2.63k
    SIMD_ALIGNED(uint8_t vout[64]);                                            \
127
2.63k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                       \
128
2.63k
    int r = width & MASK;                                                      \
129
2.63k
    int n = width & ~MASK;                                                     \
130
2.63k
    if (n > 0) {                                                               \
131
199
      ANY_SIMD(y_buf, u_buf, v_buf, a_buf, dst_ptr, yuvconstants, n);          \
132
199
    }                                                                          \
133
2.63k
    ptrdiff_t np = n;                                                          \
134
2.63k
    memcpy(vin, y_buf + np, r * SBPP);                                         \
135
2.63k
    memcpy(vin + 16, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);          \
136
2.63k
    memcpy(vin + 32, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);          \
137
2.63k
    memcpy(vin + 48, a_buf + np, r * SBPP);                                    \
138
2.63k
    ANY_SIMD(vin, vin + 16, vin + 32, vin + 48, vout, yuvconstants, MASK + 1); \
139
2.63k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP);     \
140
2.63k
  }
Unexecuted instantiation: I410AlphaToARGBRow_Any_SSSE3
I410AlphaToARGBRow_Any_AVX2
Line
Count
Source
124
3.84k
               int width) {                                                    \
125
3.84k
    SIMD_ALIGNED(T vin[16 * 4]);                                               \
126
3.84k
    SIMD_ALIGNED(uint8_t vout[64]);                                            \
127
3.84k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                       \
128
3.84k
    int r = width & MASK;                                                      \
129
3.84k
    int n = width & ~MASK;                                                     \
130
3.84k
    if (n > 0) {                                                               \
131
202
      ANY_SIMD(y_buf, u_buf, v_buf, a_buf, dst_ptr, yuvconstants, n);          \
132
202
    }                                                                          \
133
3.84k
    ptrdiff_t np = n;                                                          \
134
3.84k
    memcpy(vin, y_buf + np, r * SBPP);                                         \
135
3.84k
    memcpy(vin + 16, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);          \
136
3.84k
    memcpy(vin + 32, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);          \
137
3.84k
    memcpy(vin + 48, a_buf + np, r * SBPP);                                    \
138
3.84k
    ANY_SIMD(vin, vin + 16, vin + 32, vin + 48, vout, yuvconstants, MASK + 1); \
139
3.84k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP);     \
140
3.84k
  }
141
142
#ifdef HAS_I210ALPHATOARGBROW_NEON
143
ANY41CT(I210AlphaToARGBRow_Any_NEON,
144
        I210AlphaToARGBRow_NEON,
145
        1,
146
        0,
147
        uint16_t,
148
        2,
149
        4,
150
        7)
151
#endif
152
#ifdef HAS_I410ALPHATOARGBROW_NEON
153
ANY41CT(I410AlphaToARGBRow_Any_NEON,
154
        I410AlphaToARGBRow_NEON,
155
        0,
156
        0,
157
        uint16_t,
158
        2,
159
        4,
160
        7)
161
#endif
162
163
#ifdef HAS_I210ALPHATOARGBROW_SSSE3
164
ANY41CT(I210AlphaToARGBRow_Any_SSSE3,
165
        I210AlphaToARGBRow_SSSE3,
166
        1,
167
        0,
168
        uint16_t,
169
        2,
170
        4,
171
        7)
172
#endif
173
174
#ifdef HAS_I210ALPHATOARGBROW_AVX2
175
ANY41CT(I210AlphaToARGBRow_Any_AVX2,
176
        I210AlphaToARGBRow_AVX2,
177
        1,
178
        0,
179
        uint16_t,
180
        2,
181
        4,
182
        15)
183
#endif
184
185
#ifdef HAS_I410ALPHATOARGBROW_SSSE3
186
ANY41CT(I410AlphaToARGBRow_Any_SSSE3,
187
        I410AlphaToARGBRow_SSSE3,
188
        0,
189
        0,
190
        uint16_t,
191
        2,
192
        4,
193
        7)
194
#endif
195
196
#ifdef HAS_I410ALPHATOARGBROW_AVX2
197
ANY41CT(I410AlphaToARGBRow_Any_AVX2,
198
        I410AlphaToARGBRow_AVX2,
199
        0,
200
        0,
201
        uint16_t,
202
        2,
203
        4,
204
        15)
205
#endif
206
207
#undef ANY41CT
208
209
// Any 4 planes to 1 plane with parameter
210
#define ANY41PT(NAMEANY, ANY_SIMD, STYPE, SBPP, DTYPE, BPP, MASK)          \
211
  void NAMEANY(const STYPE* r_buf, const STYPE* g_buf, const STYPE* b_buf, \
212
0
               const STYPE* a_buf, DTYPE* dst_ptr, int depth, int width) { \
213
0
    SIMD_ALIGNED(STYPE vin[16 * 4]);                                       \
214
0
    SIMD_ALIGNED(DTYPE vout[64]);                                          \
215
0
    memset(vin, 0, sizeof(vin)); /* for msan */                            \
216
0
    int r = width & MASK;                                                  \
217
0
    int n = width & ~MASK;                                                 \
218
0
    if (n > 0) {                                                           \
219
0
      ANY_SIMD(r_buf, g_buf, b_buf, a_buf, dst_ptr, depth, n);             \
220
0
    }                                                                      \
221
0
    ptrdiff_t np = n;                                                      \
222
0
    memcpy(vin, r_buf + np, r * SBPP);                                     \
223
0
    memcpy(vin + 16, g_buf + np, r * SBPP);                                \
224
0
    memcpy(vin + 32, b_buf + np, r * SBPP);                                \
225
0
    memcpy(vin + 48, a_buf + np, r * SBPP);                                \
226
0
    ANY_SIMD(vin, vin + 16, vin + 32, vin + 48, vout, depth, MASK + 1);    \
227
0
    memcpy((uint8_t*)dst_ptr + np * BPP, vout, r * BPP);                   \
228
0
  }
Unexecuted instantiation: MergeAR64Row_Any_AVX2
Unexecuted instantiation: MergeARGB16To8Row_Any_AVX2
229
230
#ifdef HAS_MERGEAR64ROW_AVX2
231
ANY41PT(MergeAR64Row_Any_AVX2, MergeAR64Row_AVX2, uint16_t, 2, uint16_t, 8, 15)
232
#endif
233
234
#ifdef HAS_MERGEAR64ROW_NEON
235
ANY41PT(MergeAR64Row_Any_NEON, MergeAR64Row_NEON, uint16_t, 2, uint16_t, 8, 7)
236
#endif
237
238
#ifdef HAS_MERGEARGB16TO8ROW_AVX2
239
ANY41PT(MergeARGB16To8Row_Any_AVX2,
240
        MergeARGB16To8Row_AVX2,
241
        uint16_t,
242
        2,
243
        uint8_t,
244
        4,
245
        15)
246
#endif
247
248
#ifdef HAS_MERGEARGB16TO8ROW_NEON
249
ANY41PT(MergeARGB16To8Row_Any_NEON,
250
        MergeARGB16To8Row_NEON,
251
        uint16_t,
252
        2,
253
        uint8_t,
254
        4,
255
        7)
256
#endif
257
258
#undef ANY41PT
259
260
// Any 3 planes to 1.
261
#define ANY31(NAMEANY, ANY_SIMD, UVSHIFT, DUVSHIFT, BPP, MASK)             \
262
  void NAMEANY(const uint8_t* y_buf, const uint8_t* u_buf,                 \
263
0
               const uint8_t* v_buf, uint8_t* dst_ptr, int width) {        \
264
0
    SIMD_ALIGNED(uint8_t vin[64 * 3]);                                     \
265
0
    SIMD_ALIGNED(uint8_t vout[64]);                                        \
266
0
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
267
0
    int r = width & MASK;                                                  \
268
0
    int n = width & ~MASK;                                                 \
269
0
    if (n > 0) {                                                           \
270
0
      ANY_SIMD(y_buf, u_buf, v_buf, dst_ptr, n);                           \
271
0
    }                                                                      \
272
0
    ptrdiff_t np = n;                                                      \
273
0
    memcpy(vin, y_buf + np, r);                                            \
274
0
    memcpy(vin + 64, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT));             \
275
0
    memcpy(vin + 128, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
276
0
    ANY_SIMD(vin, vin + 64, vin + 128, vout, MASK + 1);                    \
277
0
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP); \
278
0
  }
Unexecuted instantiation: MergeRGBRow_Any_SSSE3
Unexecuted instantiation: MergeXRGBRow_Any_SSE2
Unexecuted instantiation: MergeXRGBRow_Any_AVX2
Unexecuted instantiation: I422ToYUY2Row_Any_SSE2
Unexecuted instantiation: I422ToUYVYRow_Any_SSE2
Unexecuted instantiation: I422ToYUY2Row_Any_AVX2
Unexecuted instantiation: I422ToUYVYRow_Any_AVX2
Unexecuted instantiation: BlendPlaneRow_Any_AVX2
Unexecuted instantiation: BlendPlaneRow_Any_SSSE3
279
280
// Merge functions.
281
#ifdef HAS_MERGERGBROW_SSSE3
282
ANY31(MergeRGBRow_Any_SSSE3, MergeRGBRow_SSSE3, 0, 0, 3, 15)
283
#endif
284
#ifdef HAS_MERGERGBROW_NEON
285
ANY31(MergeRGBRow_Any_NEON, MergeRGBRow_NEON, 0, 0, 3, 15)
286
#endif
287
#ifdef HAS_MERGEXRGBROW_SSE2
288
ANY31(MergeXRGBRow_Any_SSE2, MergeXRGBRow_SSE2, 0, 0, 4, 7)
289
#endif
290
#ifdef HAS_MERGEXRGBROW_AVX2
291
ANY31(MergeXRGBRow_Any_AVX2, MergeXRGBRow_AVX2, 0, 0, 4, 15)
292
#endif
293
#ifdef HAS_MERGEXRGBROW_NEON
294
ANY31(MergeXRGBRow_Any_NEON, MergeXRGBRow_NEON, 0, 0, 4, 15)
295
#endif
296
#ifdef HAS_I422TOYUY2ROW_SSE2
297
ANY31(I422ToYUY2Row_Any_SSE2, I422ToYUY2Row_SSE2, 1, 1, 4, 15)
298
ANY31(I422ToUYVYRow_Any_SSE2, I422ToUYVYRow_SSE2, 1, 1, 4, 15)
299
#endif
300
#ifdef HAS_I422TOYUY2ROW_AVX2
301
ANY31(I422ToYUY2Row_Any_AVX2, I422ToYUY2Row_AVX2, 1, 1, 4, 31)
302
ANY31(I422ToUYVYRow_Any_AVX2, I422ToUYVYRow_AVX2, 1, 1, 4, 31)
303
#endif
304
#ifdef HAS_I422TOYUY2ROW_NEON
305
ANY31(I422ToYUY2Row_Any_NEON, I422ToYUY2Row_NEON, 1, 1, 4, 15)
306
#endif
307
#ifdef HAS_I422TOYUY2ROW_LSX
308
ANY31(I422ToYUY2Row_Any_LSX, I422ToYUY2Row_LSX, 1, 1, 4, 15)
309
#endif
310
#ifdef HAS_I422TOYUY2ROW_LASX
311
ANY31(I422ToYUY2Row_Any_LASX, I422ToYUY2Row_LASX, 1, 1, 4, 31)
312
#endif
313
#ifdef HAS_I422TOUYVYROW_NEON
314
ANY31(I422ToUYVYRow_Any_NEON, I422ToUYVYRow_NEON, 1, 1, 4, 15)
315
#endif
316
#ifdef HAS_I422TOUYVYROW_LSX
317
ANY31(I422ToUYVYRow_Any_LSX, I422ToUYVYRow_LSX, 1, 1, 4, 15)
318
#endif
319
#ifdef HAS_I422TOUYVYROW_LASX
320
ANY31(I422ToUYVYRow_Any_LASX, I422ToUYVYRow_LASX, 1, 1, 4, 31)
321
#endif
322
#ifdef HAS_BLENDPLANEROW_AVX2
323
ANY31(BlendPlaneRow_Any_AVX2, BlendPlaneRow_AVX2, 0, 0, 1, 31)
324
#endif
325
#ifdef HAS_BLENDPLANEROW_SSSE3
326
ANY31(BlendPlaneRow_Any_SSSE3, BlendPlaneRow_SSSE3, 0, 0, 1, 7)
327
#endif
328
#undef ANY31
329
330
// Note that odd width replication includes 444 due to implementation
331
// on arm that subsamples 444 to 422 internally.
332
// Any 3 planes to 1 with yuvconstants
333
#define ANY31C(NAMEANY, ANY_SIMD, UVSHIFT, DUVSHIFT, BPP, MASK)            \
334
  void NAMEANY(const uint8_t* y_buf, const uint8_t* u_buf,                 \
335
               const uint8_t* v_buf, uint8_t* dst_ptr,                     \
336
25.1k
               const struct YuvConstants* yuvconstants, int width) {       \
337
25.1k
    SIMD_ALIGNED(uint8_t vin[128 * 3]);                                    \
338
25.1k
    SIMD_ALIGNED(uint8_t vout[128]);                                       \
339
25.1k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
340
25.1k
    int r = width & MASK;                                                  \
341
25.1k
    int n = width & ~MASK;                                                 \
342
25.1k
    if (n > 0) {                                                           \
343
3.33k
      ANY_SIMD(y_buf, u_buf, v_buf, dst_ptr, yuvconstants, n);             \
344
3.33k
    }                                                                      \
345
25.1k
    ptrdiff_t np = n;                                                      \
346
25.1k
    memcpy(vin, y_buf + np, r);                                            \
347
25.1k
    memcpy(vin + 128, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
348
25.1k
    memcpy(vin + 256, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
349
25.1k
    if (width & 1) {                                                       \
350
22.8k
      vin[128 + SS(r, UVSHIFT)] = vin[128 + SS(r, UVSHIFT) - 1];           \
351
22.8k
      vin[256 + SS(r, UVSHIFT)] = vin[256 + SS(r, UVSHIFT) - 1];           \
352
22.8k
    }                                                                      \
353
25.1k
    ANY_SIMD(vin, vin + 128, vin + 256, vout, yuvconstants, MASK + 1);     \
354
25.1k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP); \
355
25.1k
  }
Unexecuted instantiation: I422ToARGBRow_Any_SSSE3
Unexecuted instantiation: I422ToRGB24Row_Any_SSSE3
Unexecuted instantiation: I422ToAR30Row_Any_SSSE3
Unexecuted instantiation: I422ToAR30Row_Any_AVX2
Unexecuted instantiation: I444ToARGBRow_Any_SSSE3
Unexecuted instantiation: I444ToRGB24Row_Any_SSSE3
I422ToRGB24Row_Any_AVX2
Line
Count
Source
336
4.14k
               const struct YuvConstants* yuvconstants, int width) {       \
337
4.14k
    SIMD_ALIGNED(uint8_t vin[128 * 3]);                                    \
338
4.14k
    SIMD_ALIGNED(uint8_t vout[128]);                                       \
339
4.14k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
340
4.14k
    int r = width & MASK;                                                  \
341
4.14k
    int n = width & ~MASK;                                                 \
342
4.14k
    if (n > 0) {                                                           \
343
333
      ANY_SIMD(y_buf, u_buf, v_buf, dst_ptr, yuvconstants, n);             \
344
333
    }                                                                      \
345
4.14k
    ptrdiff_t np = n;                                                      \
346
4.14k
    memcpy(vin, y_buf + np, r);                                            \
347
4.14k
    memcpy(vin + 128, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
348
4.14k
    memcpy(vin + 256, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
349
4.14k
    if (width & 1) {                                                       \
350
3.85k
      vin[128 + SS(r, UVSHIFT)] = vin[128 + SS(r, UVSHIFT) - 1];           \
351
3.85k
      vin[256 + SS(r, UVSHIFT)] = vin[256 + SS(r, UVSHIFT) - 1];           \
352
3.85k
    }                                                                      \
353
4.14k
    ANY_SIMD(vin, vin + 128, vin + 256, vout, yuvconstants, MASK + 1);     \
354
4.14k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP); \
355
4.14k
  }
Unexecuted instantiation: I422ToRGB24Row_Any_AVX512VBMI
Unexecuted instantiation: I422ToRGB24Row_Any_AVX512BW
I422ToARGBRow_Any_AVX2
Line
Count
Source
336
3.51k
               const struct YuvConstants* yuvconstants, int width) {       \
337
3.51k
    SIMD_ALIGNED(uint8_t vin[128 * 3]);                                    \
338
3.51k
    SIMD_ALIGNED(uint8_t vout[128]);                                       \
339
3.51k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
340
3.51k
    int r = width & MASK;                                                  \
341
3.51k
    int n = width & ~MASK;                                                 \
342
3.51k
    if (n > 0) {                                                           \
343
229
      ANY_SIMD(y_buf, u_buf, v_buf, dst_ptr, yuvconstants, n);             \
344
229
    }                                                                      \
345
3.51k
    ptrdiff_t np = n;                                                      \
346
3.51k
    memcpy(vin, y_buf + np, r);                                            \
347
3.51k
    memcpy(vin + 128, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
348
3.51k
    memcpy(vin + 256, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
349
3.51k
    if (width & 1) {                                                       \
350
3.23k
      vin[128 + SS(r, UVSHIFT)] = vin[128 + SS(r, UVSHIFT) - 1];           \
351
3.23k
      vin[256 + SS(r, UVSHIFT)] = vin[256 + SS(r, UVSHIFT) - 1];           \
352
3.23k
    }                                                                      \
353
3.51k
    ANY_SIMD(vin, vin + 128, vin + 256, vout, yuvconstants, MASK + 1);     \
354
3.51k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP); \
355
3.51k
  }
Unexecuted instantiation: I422ToARGBRow_Any_AVX512BW
I422ToRGBARow_Any_AVX2
Line
Count
Source
336
3.61k
               const struct YuvConstants* yuvconstants, int width) {       \
337
3.61k
    SIMD_ALIGNED(uint8_t vin[128 * 3]);                                    \
338
3.61k
    SIMD_ALIGNED(uint8_t vout[128]);                                       \
339
3.61k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
340
3.61k
    int r = width & MASK;                                                  \
341
3.61k
    int n = width & ~MASK;                                                 \
342
3.61k
    if (n > 0) {                                                           \
343
197
      ANY_SIMD(y_buf, u_buf, v_buf, dst_ptr, yuvconstants, n);             \
344
197
    }                                                                      \
345
3.61k
    ptrdiff_t np = n;                                                      \
346
3.61k
    memcpy(vin, y_buf + np, r);                                            \
347
3.61k
    memcpy(vin + 128, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
348
3.61k
    memcpy(vin + 256, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
349
3.61k
    if (width & 1) {                                                       \
350
3.42k
      vin[128 + SS(r, UVSHIFT)] = vin[128 + SS(r, UVSHIFT) - 1];           \
351
3.42k
      vin[256 + SS(r, UVSHIFT)] = vin[256 + SS(r, UVSHIFT) - 1];           \
352
3.42k
    }                                                                      \
353
3.61k
    ANY_SIMD(vin, vin + 128, vin + 256, vout, yuvconstants, MASK + 1);     \
354
3.61k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP); \
355
3.61k
  }
I444ToARGBRow_Any_AVX2
Line
Count
Source
336
9.39k
               const struct YuvConstants* yuvconstants, int width) {       \
337
9.39k
    SIMD_ALIGNED(uint8_t vin[128 * 3]);                                    \
338
9.39k
    SIMD_ALIGNED(uint8_t vout[128]);                                       \
339
9.39k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
340
9.39k
    int r = width & MASK;                                                  \
341
9.39k
    int n = width & ~MASK;                                                 \
342
9.39k
    if (n > 0) {                                                           \
343
2.19k
      ANY_SIMD(y_buf, u_buf, v_buf, dst_ptr, yuvconstants, n);             \
344
2.19k
    }                                                                      \
345
9.39k
    ptrdiff_t np = n;                                                      \
346
9.39k
    memcpy(vin, y_buf + np, r);                                            \
347
9.39k
    memcpy(vin + 128, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
348
9.39k
    memcpy(vin + 256, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
349
9.39k
    if (width & 1) {                                                       \
350
8.26k
      vin[128 + SS(r, UVSHIFT)] = vin[128 + SS(r, UVSHIFT) - 1];           \
351
8.26k
      vin[256 + SS(r, UVSHIFT)] = vin[256 + SS(r, UVSHIFT) - 1];           \
352
8.26k
    }                                                                      \
353
9.39k
    ANY_SIMD(vin, vin + 128, vin + 256, vout, yuvconstants, MASK + 1);     \
354
9.39k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP); \
355
9.39k
  }
I444ToRGB24Row_Any_AVX2
Line
Count
Source
336
4.52k
               const struct YuvConstants* yuvconstants, int width) {       \
337
4.52k
    SIMD_ALIGNED(uint8_t vin[128 * 3]);                                    \
338
4.52k
    SIMD_ALIGNED(uint8_t vout[128]);                                       \
339
4.52k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
340
4.52k
    int r = width & MASK;                                                  \
341
4.52k
    int n = width & ~MASK;                                                 \
342
4.52k
    if (n > 0) {                                                           \
343
380
      ANY_SIMD(y_buf, u_buf, v_buf, dst_ptr, yuvconstants, n);             \
344
380
    }                                                                      \
345
4.52k
    ptrdiff_t np = n;                                                      \
346
4.52k
    memcpy(vin, y_buf + np, r);                                            \
347
4.52k
    memcpy(vin + 128, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
348
4.52k
    memcpy(vin + 256, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT));            \
349
4.52k
    if (width & 1) {                                                       \
350
4.09k
      vin[128 + SS(r, UVSHIFT)] = vin[128 + SS(r, UVSHIFT) - 1];           \
351
4.09k
      vin[256 + SS(r, UVSHIFT)] = vin[256 + SS(r, UVSHIFT) - 1];           \
352
4.09k
    }                                                                      \
353
4.52k
    ANY_SIMD(vin, vin + 128, vin + 256, vout, yuvconstants, MASK + 1);     \
354
4.52k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP); \
355
4.52k
  }
356
357
#ifdef HAS_I422TOARGBROW_SSSE3
358
ANY31C(I422ToARGBRow_Any_SSSE3, I422ToARGBRow_SSSE3, 1, 0, 4, 7)
359
#endif
360
#ifdef HAS_I422TORGBAROW_SSSE3
361
ANY31C(I422ToRGBARow_Any_SSSE3, I422ToRGBARow_SSSE3, 1, 0, 4, 7)
362
#endif
363
#ifdef HAS_I422TOARGB4444ROW_SSSE3
364
ANY31C(I422ToARGB4444Row_Any_SSSE3, I422ToARGB4444Row_SSSE3, 1, 0, 2, 7)
365
#endif
366
#ifdef HAS_I422TOARGB1555ROW_SSSE3
367
ANY31C(I422ToARGB1555Row_Any_SSSE3, I422ToARGB1555Row_SSSE3, 1, 0, 2, 7)
368
#endif
369
#ifdef HAS_I422TORGB565ROW_SSSE3
370
ANY31C(I422ToRGB565Row_Any_SSSE3, I422ToRGB565Row_SSSE3, 1, 0, 2, 7)
371
#endif
372
#ifdef HAS_I422TORGB24ROW_SSSE3
373
ANY31C(I422ToRGB24Row_Any_SSSE3, I422ToRGB24Row_SSSE3, 1, 0, 3, 15)
374
#endif
375
#ifdef HAS_I422TOAR30ROW_SSSE3
376
ANY31C(I422ToAR30Row_Any_SSSE3, I422ToAR30Row_SSSE3, 1, 0, 4, 7)
377
#endif
378
#ifdef HAS_I422TOAR30ROW_AVX2
379
ANY31C(I422ToAR30Row_Any_AVX2, I422ToAR30Row_AVX2, 1, 0, 4, 15)
380
#endif
381
#ifdef HAS_I444TOARGBROW_SSSE3
382
ANY31C(I444ToARGBRow_Any_SSSE3, I444ToARGBRow_SSSE3, 0, 0, 4, 7)
383
#endif
384
#ifdef HAS_I444TORGB24ROW_SSSE3
385
ANY31C(I444ToRGB24Row_Any_SSSE3, I444ToRGB24Row_SSSE3, 0, 0, 3, 15)
386
#endif
387
#ifdef HAS_I422TORGB24ROW_AVX2
388
ANY31C(I422ToRGB24Row_Any_AVX2, I422ToRGB24Row_AVX2, 1, 0, 3, 31)
389
#endif
390
#ifdef HAS_I422TORGB24ROW_AVX512VBMI
391
ANY31C(I422ToRGB24Row_Any_AVX512VBMI, I422ToRGB24Row_AVX512VBMI, 1, 0, 3, 31)
392
#endif
393
#ifdef HAS_I422TORGB24ROW_AVX512BW
394
ANY31C(I422ToRGB24Row_Any_AVX512BW, I422ToRGB24Row_AVX512BW, 1, 0, 3, 31)
395
#endif
396
#ifdef HAS_I422TOARGBROW_AVX2
397
ANY31C(I422ToARGBRow_Any_AVX2, I422ToARGBRow_AVX2, 1, 0, 4, 15)
398
#endif
399
#ifdef HAS_I422TOARGBROW_AVX512BW
400
ANY31C(I422ToARGBRow_Any_AVX512BW, I422ToARGBRow_AVX512BW, 1, 0, 4, 31)
401
#endif
402
#ifdef HAS_I422TORGBAROW_AVX2
403
ANY31C(I422ToRGBARow_Any_AVX2, I422ToRGBARow_AVX2, 1, 0, 4, 15)
404
#endif
405
#ifdef HAS_I444TOARGBROW_AVX2
406
ANY31C(I444ToARGBRow_Any_AVX2, I444ToARGBRow_AVX2, 0, 0, 4, 15)
407
#endif
408
#ifdef HAS_I444TORGB24ROW_AVX2
409
ANY31C(I444ToRGB24Row_Any_AVX2, I444ToRGB24Row_AVX2, 0, 0, 3, 31)
410
#endif
411
#ifdef HAS_I422TOARGB4444ROW_AVX2
412
ANY31C(I422ToARGB4444Row_Any_AVX2, I422ToARGB4444Row_AVX2, 1, 0, 2, 15)
413
#endif
414
#ifdef HAS_I422TOARGB1555ROW_AVX2
415
ANY31C(I422ToARGB1555Row_Any_AVX2, I422ToARGB1555Row_AVX2, 1, 0, 2, 15)
416
#endif
417
#ifdef HAS_I422TORGB565ROW_AVX2
418
ANY31C(I422ToRGB565Row_Any_AVX2, I422ToRGB565Row_AVX2, 1, 0, 2, 15)
419
#endif
420
#ifdef HAS_I444TORGB24ROW_NEON
421
ANY31C(I444ToRGB24Row_Any_NEON, I444ToRGB24Row_NEON, 0, 0, 3, 7)
422
#endif
423
#ifdef HAS_I422TOAR30ROW_NEON
424
ANY31C(I422ToAR30Row_Any_NEON, I422ToAR30Row_NEON, 1, 0, 4, 7)
425
#endif
426
#ifdef HAS_I422TOARGBROW_NEON
427
ANY31C(I444ToARGBRow_Any_NEON, I444ToARGBRow_NEON, 0, 0, 4, 7)
428
ANY31C(I422ToARGBRow_Any_NEON, I422ToARGBRow_NEON, 1, 0, 4, 7)
429
ANY31C(I422ToRGBARow_Any_NEON, I422ToRGBARow_NEON, 1, 0, 4, 7)
430
ANY31C(I422ToRGB24Row_Any_NEON, I422ToRGB24Row_NEON, 1, 0, 3, 7)
431
ANY31C(I422ToARGB4444Row_Any_NEON, I422ToARGB4444Row_NEON, 1, 0, 2, 7)
432
ANY31C(I422ToARGB1555Row_Any_NEON, I422ToARGB1555Row_NEON, 1, 0, 2, 7)
433
ANY31C(I422ToRGB565Row_Any_NEON, I422ToRGB565Row_NEON, 1, 0, 2, 7)
434
#endif
435
#ifdef HAS_I422TOARGBROW_LSX
436
ANY31C(I422ToARGBRow_Any_LSX, I422ToARGBRow_LSX, 1, 0, 4, 15)
437
ANY31C(I422ToRGBARow_Any_LSX, I422ToRGBARow_LSX, 1, 0, 4, 15)
438
ANY31C(I422ToRGB24Row_Any_LSX, I422ToRGB24Row_LSX, 1, 0, 3, 15)
439
ANY31C(I422ToRGB565Row_Any_LSX, I422ToRGB565Row_LSX, 1, 0, 2, 15)
440
ANY31C(I422ToARGB4444Row_Any_LSX, I422ToARGB4444Row_LSX, 1, 0, 2, 15)
441
ANY31C(I422ToARGB1555Row_Any_LSX, I422ToARGB1555Row_LSX, 1, 0, 2, 15)
442
#endif
443
#ifdef HAS_I422TOARGBROW_LASX
444
ANY31C(I422ToARGBRow_Any_LASX, I422ToARGBRow_LASX, 1, 0, 4, 31)
445
ANY31C(I422ToRGBARow_Any_LASX, I422ToRGBARow_LASX, 1, 0, 4, 31)
446
ANY31C(I422ToRGB24Row_Any_LASX, I422ToRGB24Row_LASX, 1, 0, 3, 31)
447
ANY31C(I422ToRGB565Row_Any_LASX, I422ToRGB565Row_LASX, 1, 0, 2, 31)
448
ANY31C(I422ToARGB4444Row_Any_LASX, I422ToARGB4444Row_LASX, 1, 0, 2, 31)
449
ANY31C(I422ToARGB1555Row_Any_LASX, I422ToARGB1555Row_LASX, 1, 0, 2, 31)
450
#endif
451
#ifdef HAS_I444TOARGBROW_LSX
452
ANY31C(I444ToARGBRow_Any_LSX, I444ToARGBRow_LSX, 0, 0, 4, 15)
453
#endif
454
#undef ANY31C
455
456
// Any 3 planes of 16 bit to 1 with yuvconstants
457
// TODO(fbarchard): consider sharing this code with ANY31C
458
#define ANY31CT(NAMEANY, ANY_SIMD, UVSHIFT, DUVSHIFT, T, SBPP, BPP, MASK)  \
459
  void NAMEANY(const T* y_buf, const T* u_buf, const T* v_buf,             \
460
               uint8_t* dst_ptr, const struct YuvConstants* yuvconstants,  \
461
15.7k
               int width) {                                                \
462
15.7k
    SIMD_ALIGNED(T vin[16 * 3]);                                           \
463
15.7k
    SIMD_ALIGNED(uint8_t vout[64]);                                        \
464
15.7k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
465
15.7k
    int r = width & MASK;                                                  \
466
15.7k
    int n = width & ~MASK;                                                 \
467
15.7k
    if (n > 0) {                                                           \
468
3.17k
      ANY_SIMD(y_buf, u_buf, v_buf, dst_ptr, yuvconstants, n);             \
469
3.17k
    }                                                                      \
470
15.7k
    ptrdiff_t np = n;                                                      \
471
15.7k
    memcpy(vin, y_buf + np, r * SBPP);                                     \
472
15.7k
    memcpy(vin + 16, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);      \
473
15.7k
    memcpy(vin + 32, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);      \
474
15.7k
    ANY_SIMD(vin, vin + 16, vin + 32, vout, yuvconstants, MASK + 1);       \
475
15.7k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP); \
476
15.7k
  }
Unexecuted instantiation: I210ToAR30Row_Any_SSSE3
Unexecuted instantiation: I210ToARGBRow_Any_SSSE3
I210ToARGBRow_Any_AVX2
Line
Count
Source
461
3.91k
               int width) {                                                \
462
3.91k
    SIMD_ALIGNED(T vin[16 * 3]);                                           \
463
3.91k
    SIMD_ALIGNED(uint8_t vout[64]);                                        \
464
3.91k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
465
3.91k
    int r = width & MASK;                                                  \
466
3.91k
    int n = width & ~MASK;                                                 \
467
3.91k
    if (n > 0) {                                                           \
468
257
      ANY_SIMD(y_buf, u_buf, v_buf, dst_ptr, yuvconstants, n);             \
469
257
    }                                                                      \
470
3.91k
    ptrdiff_t np = n;                                                      \
471
3.91k
    memcpy(vin, y_buf + np, r * SBPP);                                     \
472
3.91k
    memcpy(vin + 16, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);      \
473
3.91k
    memcpy(vin + 32, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);      \
474
3.91k
    ANY_SIMD(vin, vin + 16, vin + 32, vout, yuvconstants, MASK + 1);       \
475
3.91k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP); \
476
3.91k
  }
Unexecuted instantiation: I210ToAR30Row_Any_AVX2
Unexecuted instantiation: I410ToAR30Row_Any_SSSE3
Unexecuted instantiation: I410ToARGBRow_Any_SSSE3
I410ToARGBRow_Any_AVX2
Line
Count
Source
461
7.46k
               int width) {                                                \
462
7.46k
    SIMD_ALIGNED(T vin[16 * 3]);                                           \
463
7.46k
    SIMD_ALIGNED(uint8_t vout[64]);                                        \
464
7.46k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
465
7.46k
    int r = width & MASK;                                                  \
466
7.46k
    int n = width & ~MASK;                                                 \
467
7.46k
    if (n > 0) {                                                           \
468
1.53k
      ANY_SIMD(y_buf, u_buf, v_buf, dst_ptr, yuvconstants, n);             \
469
1.53k
    }                                                                      \
470
7.46k
    ptrdiff_t np = n;                                                      \
471
7.46k
    memcpy(vin, y_buf + np, r * SBPP);                                     \
472
7.46k
    memcpy(vin + 16, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);      \
473
7.46k
    memcpy(vin + 32, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);      \
474
7.46k
    ANY_SIMD(vin, vin + 16, vin + 32, vout, yuvconstants, MASK + 1);       \
475
7.46k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP); \
476
7.46k
  }
Unexecuted instantiation: I410ToAR30Row_Any_AVX2
Unexecuted instantiation: I212ToAR30Row_Any_SSSE3
Unexecuted instantiation: I212ToARGBRow_Any_SSSE3
I212ToARGBRow_Any_AVX2
Line
Count
Source
461
4.34k
               int width) {                                                \
462
4.34k
    SIMD_ALIGNED(T vin[16 * 3]);                                           \
463
4.34k
    SIMD_ALIGNED(uint8_t vout[64]);                                        \
464
4.34k
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
465
4.34k
    int r = width & MASK;                                                  \
466
4.34k
    int n = width & ~MASK;                                                 \
467
4.34k
    if (n > 0) {                                                           \
468
1.38k
      ANY_SIMD(y_buf, u_buf, v_buf, dst_ptr, yuvconstants, n);             \
469
1.38k
    }                                                                      \
470
4.34k
    ptrdiff_t np = n;                                                      \
471
4.34k
    memcpy(vin, y_buf + np, r * SBPP);                                     \
472
4.34k
    memcpy(vin + 16, u_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);      \
473
4.34k
    memcpy(vin + 32, v_buf + (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP);      \
474
4.34k
    ANY_SIMD(vin, vin + 16, vin + 32, vout, yuvconstants, MASK + 1);       \
475
4.34k
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP); \
476
4.34k
  }
Unexecuted instantiation: I212ToAR30Row_Any_AVX2
477
478
#ifdef HAS_I210TOAR30ROW_SSSE3
479
ANY31CT(I210ToAR30Row_Any_SSSE3, I210ToAR30Row_SSSE3, 1, 0, uint16_t, 2, 4, 7)
480
#endif
481
#ifdef HAS_I210TOARGBROW_SSSE3
482
ANY31CT(I210ToARGBRow_Any_SSSE3, I210ToARGBRow_SSSE3, 1, 0, uint16_t, 2, 4, 7)
483
#endif
484
#ifdef HAS_I210TOARGBROW_AVX2
485
ANY31CT(I210ToARGBRow_Any_AVX2, I210ToARGBRow_AVX2, 1, 0, uint16_t, 2, 4, 15)
486
#endif
487
#ifdef HAS_I210TOAR30ROW_AVX2
488
ANY31CT(I210ToAR30Row_Any_AVX2, I210ToAR30Row_AVX2, 1, 0, uint16_t, 2, 4, 15)
489
#endif
490
#ifdef HAS_I410TOAR30ROW_SSSE3
491
ANY31CT(I410ToAR30Row_Any_SSSE3, I410ToAR30Row_SSSE3, 0, 0, uint16_t, 2, 4, 7)
492
#endif
493
#ifdef HAS_I410TOARGBROW_SSSE3
494
ANY31CT(I410ToARGBRow_Any_SSSE3, I410ToARGBRow_SSSE3, 0, 0, uint16_t, 2, 4, 7)
495
#endif
496
#ifdef HAS_I410TOARGBROW_AVX2
497
ANY31CT(I410ToARGBRow_Any_AVX2, I410ToARGBRow_AVX2, 0, 0, uint16_t, 2, 4, 15)
498
#endif
499
#ifdef HAS_I410TOAR30ROW_AVX2
500
ANY31CT(I410ToAR30Row_Any_AVX2, I410ToAR30Row_AVX2, 0, 0, uint16_t, 2, 4, 15)
501
#endif
502
#ifdef HAS_I212TOAR30ROW_SSSE3
503
ANY31CT(I212ToAR30Row_Any_SSSE3, I212ToAR30Row_SSSE3, 1, 0, uint16_t, 2, 4, 7)
504
#endif
505
#ifdef HAS_I212TOARGBROW_SSSE3
506
ANY31CT(I212ToARGBRow_Any_SSSE3, I212ToARGBRow_SSSE3, 1, 0, uint16_t, 2, 4, 7)
507
#endif
508
#ifdef HAS_I212TOARGBROW_AVX2
509
ANY31CT(I212ToARGBRow_Any_AVX2, I212ToARGBRow_AVX2, 1, 0, uint16_t, 2, 4, 15)
510
#endif
511
#ifdef HAS_I212TOAR30ROW_AVX2
512
ANY31CT(I212ToAR30Row_Any_AVX2, I212ToAR30Row_AVX2, 1, 0, uint16_t, 2, 4, 15)
513
#endif
514
#ifdef HAS_I210TOARGBROW_NEON
515
ANY31CT(I210ToARGBRow_Any_NEON, I210ToARGBRow_NEON, 1, 0, uint16_t, 2, 4, 7)
516
#endif
517
#ifdef HAS_I410TOARGBROW_NEON
518
ANY31CT(I410ToARGBRow_Any_NEON, I410ToARGBRow_NEON, 0, 0, uint16_t, 2, 4, 7)
519
#endif
520
#ifdef HAS_I210TOAR30ROW_NEON
521
ANY31CT(I210ToAR30Row_Any_NEON, I210ToAR30Row_NEON, 1, 0, uint16_t, 2, 4, 7)
522
#endif
523
#ifdef HAS_I410TOAR30ROW_NEON
524
ANY31CT(I410ToAR30Row_Any_NEON, I410ToAR30Row_NEON, 0, 0, uint16_t, 2, 4, 7)
525
#endif
526
#ifdef HAS_I212TOARGBROW_NEON
527
ANY31CT(I212ToARGBRow_Any_NEON, I212ToARGBRow_NEON, 1, 0, uint16_t, 2, 4, 7)
528
#endif
529
#ifdef HAS_I212TOAR30ROW_NEON
530
ANY31CT(I212ToAR30Row_Any_NEON, I212ToAR30Row_NEON, 1, 0, uint16_t, 2, 4, 7)
531
#endif
532
#undef ANY31CT
533
534
// Any 3 planes to 1 plane with parameter
535
#define ANY31PT(NAMEANY, ANY_SIMD, STYPE, SBPP, DTYPE, BPP, MASK)          \
536
  void NAMEANY(const STYPE* r_buf, const STYPE* g_buf, const STYPE* b_buf, \
537
0
               DTYPE* dst_ptr, int depth, int width) {                     \
538
0
    SIMD_ALIGNED(STYPE vin[16 * 3]);                                       \
539
0
    SIMD_ALIGNED(DTYPE vout[64]);                                          \
540
0
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                   \
541
0
    int r = width & MASK;                                                  \
542
0
    int n = width & ~MASK;                                                 \
543
0
    if (n > 0) {                                                           \
544
0
      ANY_SIMD(r_buf, g_buf, b_buf, dst_ptr, depth, n);                    \
545
0
    }                                                                      \
546
0
    ptrdiff_t np = n;                                                      \
547
0
    memcpy(vin, r_buf + np, r * SBPP);                                     \
548
0
    memcpy(vin + 16, g_buf + np, r * SBPP);                                \
549
0
    memcpy(vin + 32, b_buf + np, r * SBPP);                                \
550
0
    ANY_SIMD(vin, vin + 16, vin + 32, vout, depth, MASK + 1);              \
551
0
    memcpy((uint8_t*)dst_ptr + np * BPP, vout, r * BPP);                   \
552
0
  }
Unexecuted instantiation: MergeXR30Row_Any_AVX2
Unexecuted instantiation: MergeXR64Row_Any_AVX2
Unexecuted instantiation: MergeXRGB16To8Row_Any_AVX2
553
554
#ifdef HAS_MERGEXR30ROW_AVX2
555
ANY31PT(MergeXR30Row_Any_AVX2, MergeXR30Row_AVX2, uint16_t, 2, uint8_t, 4, 15)
556
#endif
557
558
#ifdef HAS_MERGEXR30ROW_NEON
559
ANY31PT(MergeXR30Row_Any_NEON, MergeXR30Row_NEON, uint16_t, 2, uint8_t, 4, 3)
560
ANY31PT(MergeXR30Row_10_Any_NEON,
561
        MergeXR30Row_10_NEON,
562
        uint16_t,
563
        2,
564
        uint8_t,
565
        4,
566
        7)
567
#endif
568
569
#ifdef HAS_MERGEXR64ROW_AVX2
570
ANY31PT(MergeXR64Row_Any_AVX2, MergeXR64Row_AVX2, uint16_t, 2, uint16_t, 8, 15)
571
#endif
572
573
#ifdef HAS_MERGEXR64ROW_NEON
574
ANY31PT(MergeXR64Row_Any_NEON, MergeXR64Row_NEON, uint16_t, 2, uint16_t, 8, 7)
575
#endif
576
577
#ifdef HAS_MERGEXRGB16TO8ROW_AVX2
578
ANY31PT(MergeXRGB16To8Row_Any_AVX2,
579
        MergeXRGB16To8Row_AVX2,
580
        uint16_t,
581
        2,
582
        uint8_t,
583
        4,
584
        15)
585
#endif
586
587
#ifdef HAS_MERGEXRGB16TO8ROW_NEON
588
ANY31PT(MergeXRGB16To8Row_Any_NEON,
589
        MergeXRGB16To8Row_NEON,
590
        uint16_t,
591
        2,
592
        uint8_t,
593
        4,
594
        7)
595
#endif
596
597
#undef ANY31PT
598
599
// Any 2 planes to 1.
600
#define ANY21(NAMEANY, ANY_SIMD, UVSHIFT, SBPP, SBPP2, BPP, MASK)             \
601
  void NAMEANY(const uint8_t* y_buf, const uint8_t* uv_buf, uint8_t* dst_ptr, \
602
0
               int width) {                                                   \
603
0
    SIMD_ALIGNED(uint8_t vin[128 * 2]);                                       \
604
0
    SIMD_ALIGNED(uint8_t vout[128]);                                          \
605
0
    memset(vin, 0, sizeof(vin)); /* for msan */                               \
606
0
    int r = width & MASK;                                                     \
607
0
    int n = width & ~MASK;                                                    \
608
0
    if (n > 0) {                                                              \
609
0
      ANY_SIMD(y_buf, uv_buf, dst_ptr, n);                                    \
610
0
    }                                                                         \
611
0
    ptrdiff_t np = n;                                                         \
612
0
    memcpy(vin, y_buf + np * SBPP, r * SBPP);                                 \
613
0
    memcpy(vin + 128, uv_buf + (np >> UVSHIFT) * SBPP2,                       \
614
0
           SS(r, UVSHIFT) * SBPP2);                                           \
615
0
    ANY_SIMD(vin, vin + 128, vout, MASK + 1);                                 \
616
0
    memcpy(dst_ptr + np * BPP, vout, r * BPP);                                \
617
0
  }
Unexecuted instantiation: MergeUVRow_Any_SSE2
Unexecuted instantiation: MergeUVRow_Any_AVX2
Unexecuted instantiation: MergeUVRow_Any_AVX512BW
Unexecuted instantiation: NV21ToYUV24Row_Any_SSSE3
Unexecuted instantiation: NV21ToYUV24Row_Any_AVX2
Unexecuted instantiation: ARGBAddRow_Any_SSE2
Unexecuted instantiation: ARGBSubtractRow_Any_SSE2
Unexecuted instantiation: ARGBAddRow_Any_AVX2
Unexecuted instantiation: ARGBSubtractRow_Any_AVX2
Unexecuted instantiation: SobelRow_Any_SSE2
Unexecuted instantiation: SobelToPlaneRow_Any_SSE2
Unexecuted instantiation: SobelXYRow_Any_SSE2
618
619
// Merge functions.
620
#ifdef HAS_MERGEUVROW_SSE2
621
ANY21(MergeUVRow_Any_SSE2, MergeUVRow_SSE2, 0, 1, 1, 2, 15)
622
#endif
623
#ifdef HAS_MERGEUVROW_AVX2
624
ANY21(MergeUVRow_Any_AVX2, MergeUVRow_AVX2, 0, 1, 1, 2, 31)
625
#endif
626
#ifdef HAS_MERGEUVROW_AVX512BW
627
ANY21(MergeUVRow_Any_AVX512BW, MergeUVRow_AVX512BW, 0, 1, 1, 2, 31)
628
#endif
629
#ifdef HAS_MERGEUVROW_NEON
630
ANY21(MergeUVRow_Any_NEON, MergeUVRow_NEON, 0, 1, 1, 2, 15)
631
#endif
632
#ifdef HAS_MERGEUVROW_LSX
633
ANY21(MergeUVRow_Any_LSX, MergeUVRow_LSX, 0, 1, 1, 2, 15)
634
#endif
635
#ifdef HAS_NV21TOYUV24ROW_NEON
636
ANY21(NV21ToYUV24Row_Any_NEON, NV21ToYUV24Row_NEON, 1, 1, 2, 3, 15)
637
#endif
638
#ifdef HAS_NV21TOYUV24ROW_SSSE3
639
ANY21(NV21ToYUV24Row_Any_SSSE3, NV21ToYUV24Row_SSSE3, 1, 1, 2, 3, 15)
640
#endif
641
#ifdef HAS_NV21TOYUV24ROW_AVX2
642
ANY21(NV21ToYUV24Row_Any_AVX2, NV21ToYUV24Row_AVX2, 1, 1, 2, 3, 31)
643
#endif
644
// Math functions.
645
#ifdef HAS_ARGBMULTIPLYROW_SSE2
646
ANY21(ARGBMultiplyRow_Any_SSE2, ARGBMultiplyRow_SSE2, 0, 4, 4, 4, 3)
647
#endif
648
#ifdef HAS_ARGBADDROW_SSE2
649
ANY21(ARGBAddRow_Any_SSE2, ARGBAddRow_SSE2, 0, 4, 4, 4, 3)
650
#endif
651
#ifdef HAS_ARGBSUBTRACTROW_SSE2
652
ANY21(ARGBSubtractRow_Any_SSE2, ARGBSubtractRow_SSE2, 0, 4, 4, 4, 3)
653
#endif
654
#ifdef HAS_ARGBMULTIPLYROW_AVX2
655
ANY21(ARGBMultiplyRow_Any_AVX2, ARGBMultiplyRow_AVX2, 0, 4, 4, 4, 7)
656
#endif
657
#ifdef HAS_ARGBADDROW_AVX2
658
ANY21(ARGBAddRow_Any_AVX2, ARGBAddRow_AVX2, 0, 4, 4, 4, 7)
659
#endif
660
#ifdef HAS_ARGBSUBTRACTROW_AVX2
661
ANY21(ARGBSubtractRow_Any_AVX2, ARGBSubtractRow_AVX2, 0, 4, 4, 4, 7)
662
#endif
663
#ifdef HAS_ARGBMULTIPLYROW_NEON
664
ANY21(ARGBMultiplyRow_Any_NEON, ARGBMultiplyRow_NEON, 0, 4, 4, 4, 7)
665
#endif
666
#ifdef HAS_ARGBADDROW_NEON
667
ANY21(ARGBAddRow_Any_NEON, ARGBAddRow_NEON, 0, 4, 4, 4, 7)
668
#endif
669
#ifdef HAS_ARGBSUBTRACTROW_NEON
670
ANY21(ARGBSubtractRow_Any_NEON, ARGBSubtractRow_NEON, 0, 4, 4, 4, 7)
671
#endif
672
#ifdef HAS_ARGBMULTIPLYROW_LSX
673
ANY21(ARGBMultiplyRow_Any_LSX, ARGBMultiplyRow_LSX, 0, 4, 4, 4, 3)
674
#endif
675
#ifdef HAS_ARGBMULTIPLYROW_LASX
676
ANY21(ARGBMultiplyRow_Any_LASX, ARGBMultiplyRow_LASX, 0, 4, 4, 4, 7)
677
#endif
678
#ifdef HAS_ARGBADDROW_LSX
679
ANY21(ARGBAddRow_Any_LSX, ARGBAddRow_LSX, 0, 4, 4, 4, 3)
680
#endif
681
#ifdef HAS_ARGBADDROW_LASX
682
ANY21(ARGBAddRow_Any_LASX, ARGBAddRow_LASX, 0, 4, 4, 4, 7)
683
#endif
684
#ifdef HAS_ARGBSUBTRACTROW_LSX
685
ANY21(ARGBSubtractRow_Any_LSX, ARGBSubtractRow_LSX, 0, 4, 4, 4, 3)
686
#endif
687
#ifdef HAS_ARGBSUBTRACTROW_LASX
688
ANY21(ARGBSubtractRow_Any_LASX, ARGBSubtractRow_LASX, 0, 4, 4, 4, 7)
689
#endif
690
#ifdef HAS_SOBELROW_SSE2
691
ANY21(SobelRow_Any_SSE2, SobelRow_SSE2, 0, 1, 1, 4, 15)
692
#endif
693
#ifdef HAS_SOBELROW_NEON
694
ANY21(SobelRow_Any_NEON, SobelRow_NEON, 0, 1, 1, 4, 7)
695
#endif
696
#ifdef HAS_SOBELROW_LSX
697
ANY21(SobelRow_Any_LSX, SobelRow_LSX, 0, 1, 1, 4, 15)
698
#endif
699
#ifdef HAS_SOBELTOPLANEROW_SSE2
700
ANY21(SobelToPlaneRow_Any_SSE2, SobelToPlaneRow_SSE2, 0, 1, 1, 1, 15)
701
#endif
702
#ifdef HAS_SOBELTOPLANEROW_NEON
703
ANY21(SobelToPlaneRow_Any_NEON, SobelToPlaneRow_NEON, 0, 1, 1, 1, 15)
704
#endif
705
#ifdef HAS_SOBELTOPLANEROW_LSX
706
ANY21(SobelToPlaneRow_Any_LSX, SobelToPlaneRow_LSX, 0, 1, 1, 1, 31)
707
#endif
708
#ifdef HAS_SOBELXYROW_SSE2
709
ANY21(SobelXYRow_Any_SSE2, SobelXYRow_SSE2, 0, 1, 1, 4, 15)
710
#endif
711
#ifdef HAS_SOBELXYROW_NEON
712
ANY21(SobelXYRow_Any_NEON, SobelXYRow_NEON, 0, 1, 1, 4, 7)
713
#endif
714
#ifdef HAS_SOBELXYROW_LSX
715
ANY21(SobelXYRow_Any_LSX, SobelXYRow_LSX, 0, 1, 1, 4, 15)
716
#endif
717
#undef ANY21
718
719
// Any 2 planes to 1 with stride
720
// width is measured in source pixels. 4 bytes contains 2 pixels
721
#define ANY21S(NAMEANY, ANY_SIMD, SBPP, BPP, MASK)                        \
722
  void NAMEANY(const uint8_t* src_yuy2, int stride_yuy2, uint8_t* dst_uv, \
723
0
               int width) {                                               \
724
0
    SIMD_ALIGNED(uint8_t vin[32 * 2]);                                    \
725
0
    SIMD_ALIGNED(uint8_t vout[32]);                                       \
726
0
    memset(vin, 0, sizeof(vin)); /* for msan */                           \
727
0
    int awidth = (width + 1) / 2;                                         \
728
0
    int r = awidth & MASK;                                                \
729
0
    int n = awidth & ~MASK;                                               \
730
0
    if (n > 0) {                                                          \
731
0
      ANY_SIMD(src_yuy2, stride_yuy2, dst_uv, n * 2);                     \
732
0
    }                                                                     \
733
0
    ptrdiff_t np = n;                                                     \
734
0
    memcpy(vin, src_yuy2 + np * SBPP, r * SBPP);                          \
735
0
    memcpy(vin + 32, src_yuy2 + stride_yuy2 + np * SBPP, r * SBPP);       \
736
0
    ANY_SIMD(vin, 32, vout, MASK + 1);                                    \
737
0
    memcpy(dst_uv + np * BPP, vout, r * BPP);                             \
738
0
  }
Unexecuted instantiation: YUY2ToNVUVRow_Any_SSE2
Unexecuted instantiation: YUY2ToNVUVRow_Any_AVX2
739
740
#ifdef HAS_YUY2TONVUVROW_NEON
741
ANY21S(YUY2ToNVUVRow_Any_NEON, YUY2ToNVUVRow_NEON, 4, 2, 7)
742
#endif
743
#ifdef HAS_YUY2TONVUVROW_SSE2
744
ANY21S(YUY2ToNVUVRow_Any_SSE2, YUY2ToNVUVRow_SSE2, 4, 2, 7)
745
#endif
746
#ifdef HAS_YUY2TONVUVROW_AVX2
747
ANY21S(YUY2ToNVUVRow_Any_AVX2, YUY2ToNVUVRow_AVX2, 4, 2, 15)
748
#endif
749
750
// Any 2 planes to 1 with yuvconstants
751
#define ANY21C(NAMEANY, ANY_SIMD, UVSHIFT, SBPP, SBPP2, BPP, MASK)            \
752
  void NAMEANY(const uint8_t* y_buf, const uint8_t* uv_buf, uint8_t* dst_ptr, \
753
0
               const struct YuvConstants* yuvconstants, int width) {          \
754
0
    SIMD_ALIGNED(uint8_t vin[128 * 2]);                                       \
755
0
    SIMD_ALIGNED(uint8_t vout[128]);                                          \
756
0
    memset(vin, 0, sizeof(vin)); /* for msan */                               \
757
0
    int r = width & MASK;                                                     \
758
0
    int n = width & ~MASK;                                                    \
759
0
    if (n > 0) {                                                              \
760
0
      ANY_SIMD(y_buf, uv_buf, dst_ptr, yuvconstants, n);                      \
761
0
    }                                                                         \
762
0
    ptrdiff_t np = n;                                                         \
763
0
    memcpy(vin, y_buf + np * SBPP, r * SBPP);                                 \
764
0
    memcpy(vin + 128, uv_buf + (np >> UVSHIFT) * SBPP2,                       \
765
0
           SS(r, UVSHIFT) * SBPP2);                                           \
766
0
    ANY_SIMD(vin, vin + 128, vout, yuvconstants, MASK + 1);                   \
767
0
    memcpy(dst_ptr + np * BPP, vout, r * BPP);                                \
768
0
  }
Unexecuted instantiation: NV12ToARGBRow_Any_SSSE3
Unexecuted instantiation: NV12ToARGBRow_Any_AVX2
Unexecuted instantiation: NV21ToARGBRow_Any_SSSE3
Unexecuted instantiation: NV21ToARGBRow_Any_AVX2
Unexecuted instantiation: NV12ToRGB24Row_Any_SSSE3
Unexecuted instantiation: NV21ToRGB24Row_Any_SSSE3
Unexecuted instantiation: NV12ToRGB24Row_Any_AVX2
Unexecuted instantiation: NV21ToRGB24Row_Any_AVX2
769
770
// Biplanar to RGB.
771
#ifdef HAS_NV12TOARGBROW_SSSE3
772
ANY21C(NV12ToARGBRow_Any_SSSE3, NV12ToARGBRow_SSSE3, 1, 1, 2, 4, 7)
773
#endif
774
#ifdef HAS_NV12TOARGBROW_AVX2
775
ANY21C(NV12ToARGBRow_Any_AVX2, NV12ToARGBRow_AVX2, 1, 1, 2, 4, 15)
776
#endif
777
#ifdef HAS_NV12TOARGBROW_NEON
778
ANY21C(NV12ToARGBRow_Any_NEON, NV12ToARGBRow_NEON, 1, 1, 2, 4, 7)
779
#endif
780
#ifdef HAS_NV12TOARGBROW_LSX
781
ANY21C(NV12ToARGBRow_Any_LSX, NV12ToARGBRow_LSX, 1, 1, 2, 4, 7)
782
#endif
783
#ifdef HAS_NV12TOARGBROW_LASX
784
ANY21C(NV12ToARGBRow_Any_LASX, NV12ToARGBRow_LASX, 1, 1, 2, 4, 15)
785
#endif
786
#ifdef HAS_NV21TOARGBROW_SSSE3
787
ANY21C(NV21ToARGBRow_Any_SSSE3, NV21ToARGBRow_SSSE3, 1, 1, 2, 4, 7)
788
#endif
789
#ifdef HAS_NV21TOARGBROW_AVX2
790
ANY21C(NV21ToARGBRow_Any_AVX2, NV21ToARGBRow_AVX2, 1, 1, 2, 4, 15)
791
#endif
792
#ifdef HAS_NV21TOARGBROW_NEON
793
ANY21C(NV21ToARGBRow_Any_NEON, NV21ToARGBRow_NEON, 1, 1, 2, 4, 7)
794
#endif
795
#ifdef HAS_NV21TOARGBROW_LSX
796
ANY21C(NV21ToARGBRow_Any_LSX, NV21ToARGBRow_LSX, 1, 1, 2, 4, 7)
797
#endif
798
#ifdef HAS_NV21TOARGBROW_LASX
799
ANY21C(NV21ToARGBRow_Any_LASX, NV21ToARGBRow_LASX, 1, 1, 2, 4, 15)
800
#endif
801
#ifdef HAS_NV12TORGB24ROW_NEON
802
ANY21C(NV12ToRGB24Row_Any_NEON, NV12ToRGB24Row_NEON, 1, 1, 2, 3, 7)
803
#endif
804
#ifdef HAS_NV21TORGB24ROW_NEON
805
ANY21C(NV21ToRGB24Row_Any_NEON, NV21ToRGB24Row_NEON, 1, 1, 2, 3, 7)
806
#endif
807
#ifdef HAS_NV12TORGB24ROW_SSSE3
808
ANY21C(NV12ToRGB24Row_Any_SSSE3, NV12ToRGB24Row_SSSE3, 1, 1, 2, 3, 15)
809
#endif
810
#ifdef HAS_NV21TORGB24ROW_SSSE3
811
ANY21C(NV21ToRGB24Row_Any_SSSE3, NV21ToRGB24Row_SSSE3, 1, 1, 2, 3, 15)
812
#endif
813
#ifdef HAS_NV12TORGB24ROW_AVX2
814
ANY21C(NV12ToRGB24Row_Any_AVX2, NV12ToRGB24Row_AVX2, 1, 1, 2, 3, 31)
815
#endif
816
#ifdef HAS_NV21TORGB24ROW_AVX2
817
ANY21C(NV21ToRGB24Row_Any_AVX2, NV21ToRGB24Row_AVX2, 1, 1, 2, 3, 31)
818
#endif
819
#ifdef HAS_NV12TORGB565ROW_SSSE3
820
ANY21C(NV12ToRGB565Row_Any_SSSE3, NV12ToRGB565Row_SSSE3, 1, 1, 2, 2, 7)
821
#endif
822
#ifdef HAS_NV12TORGB565ROW_AVX2
823
ANY21C(NV12ToRGB565Row_Any_AVX2, NV12ToRGB565Row_AVX2, 1, 1, 2, 2, 15)
824
#endif
825
#ifdef HAS_NV12TORGB565ROW_NEON
826
ANY21C(NV12ToRGB565Row_Any_NEON, NV12ToRGB565Row_NEON, 1, 1, 2, 2, 7)
827
#endif
828
#ifdef HAS_NV12TORGB565ROW_LSX
829
ANY21C(NV12ToRGB565Row_Any_LSX, NV12ToRGB565Row_LSX, 1, 1, 2, 2, 7)
830
#endif
831
#ifdef HAS_NV12TORGB565ROW_LASX
832
ANY21C(NV12ToRGB565Row_Any_LASX, NV12ToRGB565Row_LASX, 1, 1, 2, 2, 15)
833
#endif
834
#undef ANY21C
835
836
// Any 2 planes of 16 bit to 1 with yuvconstants
837
#define ANY21CT(NAMEANY, ANY_SIMD, UVSHIFT, DUVSHIFT, T, SBPP, BPP, MASK)      \
838
  void NAMEANY(const T* y_buf, const T* uv_buf, uint8_t* dst_ptr,              \
839
0
               const struct YuvConstants* yuvconstants, int width) {           \
840
0
    SIMD_ALIGNED(T vin[16 * 2]);                                               \
841
0
    SIMD_ALIGNED(uint8_t vout[64]);                                            \
842
0
    memset(vin, 0, sizeof(vin)); /* for msan */                                \
843
0
    int r = width & MASK;                                                      \
844
0
    int n = width & ~MASK;                                                     \
845
0
    if (n > 0) {                                                               \
846
0
      ANY_SIMD(y_buf, uv_buf, dst_ptr, yuvconstants, n);                       \
847
0
    }                                                                          \
848
0
    ptrdiff_t np = n;                                                          \
849
0
    memcpy(vin, y_buf + np, r * SBPP);                                         \
850
0
    memcpy(vin + 16, uv_buf + 2 * (np >> UVSHIFT), SS(r, UVSHIFT) * SBPP * 2); \
851
0
    ANY_SIMD(vin, vin + 16, vout, yuvconstants, MASK + 1);                     \
852
0
    memcpy(dst_ptr + (np >> DUVSHIFT) * BPP, vout, SS(r, DUVSHIFT) * BPP);     \
853
0
  }
Unexecuted instantiation: P210ToAR30Row_Any_SSSE3
Unexecuted instantiation: P210ToARGBRow_Any_SSSE3
Unexecuted instantiation: P210ToARGBRow_Any_AVX2
Unexecuted instantiation: P210ToAR30Row_Any_AVX2
Unexecuted instantiation: P410ToAR30Row_Any_SSSE3
Unexecuted instantiation: P410ToARGBRow_Any_SSSE3
Unexecuted instantiation: P410ToARGBRow_Any_AVX2
Unexecuted instantiation: P410ToAR30Row_Any_AVX2
854
855
#ifdef HAS_P210TOAR30ROW_SSSE3
856
ANY21CT(P210ToAR30Row_Any_SSSE3, P210ToAR30Row_SSSE3, 1, 0, uint16_t, 2, 4, 7)
857
#endif
858
#ifdef HAS_P210TOARGBROW_SSSE3
859
ANY21CT(P210ToARGBRow_Any_SSSE3, P210ToARGBRow_SSSE3, 1, 0, uint16_t, 2, 4, 7)
860
#endif
861
#ifdef HAS_P210TOARGBROW_AVX2
862
ANY21CT(P210ToARGBRow_Any_AVX2, P210ToARGBRow_AVX2, 1, 0, uint16_t, 2, 4, 15)
863
#endif
864
#ifdef HAS_P210TOAR30ROW_AVX2
865
ANY21CT(P210ToAR30Row_Any_AVX2, P210ToAR30Row_AVX2, 1, 0, uint16_t, 2, 4, 15)
866
#endif
867
#ifdef HAS_P210TOAR30ROW_NEON
868
ANY21CT(P210ToAR30Row_Any_NEON, P210ToAR30Row_NEON, 1, 0, uint16_t, 2, 4, 7)
869
#endif
870
#ifdef HAS_P210TOARGBROW_NEON
871
ANY21CT(P210ToARGBRow_Any_NEON, P210ToARGBRow_NEON, 1, 0, uint16_t, 2, 4, 7)
872
#endif
873
#ifdef HAS_P410TOAR30ROW_SSSE3
874
ANY21CT(P410ToAR30Row_Any_SSSE3, P410ToAR30Row_SSSE3, 0, 0, uint16_t, 2, 4, 7)
875
#endif
876
#ifdef HAS_P410TOARGBROW_SSSE3
877
ANY21CT(P410ToARGBRow_Any_SSSE3, P410ToARGBRow_SSSE3, 0, 0, uint16_t, 2, 4, 7)
878
#endif
879
#ifdef HAS_P410TOARGBROW_AVX2
880
ANY21CT(P410ToARGBRow_Any_AVX2, P410ToARGBRow_AVX2, 0, 0, uint16_t, 2, 4, 15)
881
#endif
882
#ifdef HAS_P410TOAR30ROW_AVX2
883
ANY21CT(P410ToAR30Row_Any_AVX2, P410ToAR30Row_AVX2, 0, 0, uint16_t, 2, 4, 15)
884
#endif
885
#ifdef HAS_P410TOAR30ROW_NEON
886
ANY21CT(P410ToAR30Row_Any_NEON, P410ToAR30Row_NEON, 0, 0, uint16_t, 2, 4, 7)
887
#endif
888
#ifdef HAS_P410TOARGBROW_NEON
889
ANY21CT(P410ToARGBRow_Any_NEON, P410ToARGBRow_NEON, 0, 0, uint16_t, 2, 4, 7)
890
#endif
891
892
#undef ANY21CT
893
894
// Any 2 16 bit planes with parameter to 1
895
#define ANY21PT(NAMEANY, ANY_SIMD, T, BPP, MASK)                     \
896
  void NAMEANY(const T* src_u, const T* src_v, T* dst_uv, int depth, \
897
0
               int width) {                                          \
898
0
    SIMD_ALIGNED(T vin[16 * 2]);                                     \
899
0
    SIMD_ALIGNED(T vout[16]);                                        \
900
0
    memset(vin, 0, sizeof(vin)); /* for msan */                      \
901
0
    int r = width & MASK;                                            \
902
0
    int n = width & ~MASK;                                           \
903
0
    if (n > 0) {                                                     \
904
0
      ANY_SIMD(src_u, src_v, dst_uv, depth, n);                      \
905
0
    }                                                                \
906
0
    ptrdiff_t np = n;                                                \
907
0
    memcpy(vin, src_u + np, r * BPP);                                \
908
0
    memcpy(vin + 16, src_v + np, r * BPP);                           \
909
0
    ANY_SIMD(vin, vin + 16, vout, depth, MASK + 1);                  \
910
0
    memcpy(dst_uv + np * 2, vout, r * BPP * 2);                      \
911
0
  }
912
913
#ifdef HAS_MERGEUVROW_16_AVX2
914
ANY21PT(MergeUVRow_16_Any_AVX2, MergeUVRow_16_AVX2, uint16_t, 2, 7)
915
#endif
916
#ifdef HAS_MERGEUVROW_16_NEON
917
ANY21PT(MergeUVRow_16_Any_NEON, MergeUVRow_16_NEON, uint16_t, 2, 7)
918
#endif
919
920
#undef ANY21CT
921
922
// Any 1 to 1.
923
#define ANY11(NAMEANY, ANY_SIMD, UVSHIFT, SBPP, BPP, MASK)                \
924
388
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_ptr, int width) {     \
925
388
    SIMD_ALIGNED(uint8_t vin[256]);                                       \
926
388
    SIMD_ALIGNED(uint8_t vout[256]);                                      \
927
388
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                  \
928
388
    int r = width & MASK;                                                 \
929
388
    int n = width & ~MASK;                                                \
930
388
    if (n > 0) {                                                          \
931
125
      ANY_SIMD(src_ptr, dst_ptr, n);                                      \
932
125
    }                                                                     \
933
388
    ptrdiff_t np = n;                                                     \
934
388
    memcpy(vin, src_ptr + (np >> UVSHIFT) * SBPP, SS(r, UVSHIFT) * SBPP); \
935
388
    ANY_SIMD(vin, vout, MASK + 1);                                        \
936
388
    memcpy(dst_ptr + np * BPP, vout, r * BPP);                            \
937
388
  }
Unexecuted instantiation: CopyRow_Any_AVX512BW
Unexecuted instantiation: CopyRow_Any_AVX
Unexecuted instantiation: CopyRow_Any_SSE2
Unexecuted instantiation: ARGBToRGB24Row_Any_SSSE3
Unexecuted instantiation: ARGBToRAWRow_Any_SSSE3
Unexecuted instantiation: ARGBToRGB24Row_Any_AVX2
Unexecuted instantiation: ARGBToRGB24Row_Any_AVX512VBMI
Unexecuted instantiation: ARGBToRAWRow_Any_AVX2
Unexecuted instantiation: ABGRToAR30Row_Any_SSSE3
Unexecuted instantiation: ARGBToAR30Row_Any_SSSE3
Unexecuted instantiation: ABGRToAR30Row_Any_AVX2
Unexecuted instantiation: ARGBToAR30Row_Any_AVX2
Unexecuted instantiation: J400ToARGBRow_Any_AVX512BW
Unexecuted instantiation: J400ToARGBRow_Any_AVX2
Unexecuted instantiation: RGB24ToARGBRow_Any_SSSE3
Unexecuted instantiation: RAWToARGBRow_Any_SSSE3
Unexecuted instantiation: RAWToARGBRow_Any_AVX2
Unexecuted instantiation: RGB24ToARGBRow_Any_AVX2
Unexecuted instantiation: RAWToARGBRow_Any_AVX512BW
Unexecuted instantiation: RGB24ToARGBRow_Any_AVX512BW
Unexecuted instantiation: RAWToRGBARow_Any_SSSE3
Unexecuted instantiation: RAWToRGB24Row_Any_SSSE3
Unexecuted instantiation: RGB565ToARGBRow_Any_AVX2
Unexecuted instantiation: ARGB1555ToARGBRow_Any_AVX2
Unexecuted instantiation: ARGB4444ToARGBRow_Any_AVX2
Unexecuted instantiation: ARGBToYRow_Any_AVX2
Unexecuted instantiation: ABGRToYRow_Any_AVX2
Unexecuted instantiation: ARGBToYJRow_Any_AVX2
Unexecuted instantiation: ABGRToYJRow_Any_AVX2
Unexecuted instantiation: RGBAToYJRow_Any_AVX2
Unexecuted instantiation: UYVYToYRow_Any_AVX2
Unexecuted instantiation: YUY2ToYRow_Any_AVX2
Unexecuted instantiation: ARGBToYRow_Any_SSSE3
Unexecuted instantiation: ARGBToYRow_Any_AVX512BW
Unexecuted instantiation: BGRAToYRow_Any_SSSE3
Unexecuted instantiation: ABGRToYRow_Any_SSSE3
Unexecuted instantiation: RGBAToYRow_Any_SSSE3
Unexecuted instantiation: BGRAToYRow_Any_AVX512BW
Unexecuted instantiation: BGRAToYRow_Any_AVX2
Unexecuted instantiation: RGBAToYRow_Any_AVX512BW
Unexecuted instantiation: RGBAToYRow_Any_AVX2
Unexecuted instantiation: ABGRToYRow_Any_AVX512BW
Unexecuted instantiation: YUY2ToYRow_Any_SSE2
Unexecuted instantiation: UYVYToYRow_Any_SSE2
Unexecuted instantiation: ARGBToYJRow_Any_SSSE3
Unexecuted instantiation: ARGBToYJRow_Any_AVX512BW
Unexecuted instantiation: ABGRToYJRow_Any_SSSE3
Unexecuted instantiation: ABGRToYJRow_Any_AVX512BW
Unexecuted instantiation: RGBAToYJRow_Any_SSSE3
Unexecuted instantiation: RGBAToYJRow_Any_AVX512BW
Unexecuted instantiation: SwapUVRow_Any_SSSE3
Unexecuted instantiation: SwapUVRow_Any_AVX2
Unexecuted instantiation: ARGBAttenuateRow_Any_SSSE3
Unexecuted instantiation: ARGBUnattenuateRow_Any_SSE2
ARGBAttenuateRow_Any_AVX2
Line
Count
Source
924
388
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_ptr, int width) {     \
925
388
    SIMD_ALIGNED(uint8_t vin[256]);                                       \
926
388
    SIMD_ALIGNED(uint8_t vout[256]);                                      \
927
388
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                  \
928
388
    int r = width & MASK;                                                 \
929
388
    int n = width & ~MASK;                                                \
930
388
    if (n > 0) {                                                          \
931
125
      ANY_SIMD(src_ptr, dst_ptr, n);                                      \
932
125
    }                                                                     \
933
388
    ptrdiff_t np = n;                                                     \
934
388
    memcpy(vin, src_ptr + (np >> UVSHIFT) * SBPP, SS(r, UVSHIFT) * SBPP); \
935
388
    ANY_SIMD(vin, vout, MASK + 1);                                        \
936
388
    memcpy(dst_ptr + np * BPP, vout, r * BPP);                            \
937
388
  }
Unexecuted instantiation: ARGBUnattenuateRow_Any_AVX2
Unexecuted instantiation: ARGBExtractAlphaRow_Any_SSE2
Unexecuted instantiation: ARGBExtractAlphaRow_Any_AVX2
938
939
#ifdef HAS_COPYROW_AVX512BW
940
ANY11(CopyRow_Any_AVX512BW, CopyRow_AVX512BW, 0, 1, 1, 127)
941
#endif
942
#ifdef HAS_COPYROW_AVX
943
ANY11(CopyRow_Any_AVX, CopyRow_AVX, 0, 1, 1, 63)
944
#endif
945
#ifdef HAS_COPYROW_SSE2
946
ANY11(CopyRow_Any_SSE2, CopyRow_SSE2, 0, 1, 1, 31)
947
#endif
948
#ifdef HAS_COPYROW_NEON
949
ANY11(CopyRow_Any_NEON, CopyRow_NEON, 0, 1, 1, 31)
950
#endif
951
#if defined(HAS_ARGBTORGB24ROW_SSSE3)
952
ANY11(ARGBToRGB24Row_Any_SSSE3, ARGBToRGB24Row_SSSE3, 0, 4, 3, 15)
953
ANY11(ARGBToRAWRow_Any_SSSE3, ARGBToRAWRow_SSSE3, 0, 4, 3, 15)
954
955
#endif
956
#if defined(HAS_ARGBTORGB24ROW_AVX2)
957
ANY11(ARGBToRGB24Row_Any_AVX2, ARGBToRGB24Row_AVX2, 0, 4, 3, 31)
958
#endif
959
#if defined(HAS_ARGBTORGB24ROW_AVX512VBMI)
960
ANY11(ARGBToRGB24Row_Any_AVX512VBMI, ARGBToRGB24Row_AVX512VBMI, 0, 4, 3, 31)
961
#endif
962
#if defined(HAS_ARGBTORAWROW_AVX2)
963
ANY11(ARGBToRAWRow_Any_AVX2, ARGBToRAWRow_AVX2, 0, 4, 3, 31)
964
#endif
965
#if defined(HAS_ARGBTORGB565ROW_AVX2)
966
ANY11(ARGBToRGB565Row_Any_AVX2, ARGBToRGB565Row_AVX2, 0, 4, 2, 7)
967
#endif
968
#if defined(HAS_ARGBTOARGB4444ROW_AVX2)
969
ANY11(ARGBToARGB1555Row_Any_AVX2, ARGBToARGB1555Row_AVX2, 0, 4, 2, 7)
970
ANY11(ARGBToARGB4444Row_Any_AVX2, ARGBToARGB4444Row_AVX2, 0, 4, 2, 7)
971
#endif
972
#if defined(HAS_ABGRTOAR30ROW_SSSE3)
973
ANY11(ABGRToAR30Row_Any_SSSE3, ABGRToAR30Row_SSSE3, 0, 4, 4, 3)
974
#endif
975
#if defined(HAS_ABGRTOAR30ROW_NEON)
976
ANY11(ABGRToAR30Row_Any_NEON, ABGRToAR30Row_NEON, 0, 4, 4, 7)
977
#endif
978
#if defined(HAS_ARGBTOAR30ROW_NEON)
979
ANY11(ARGBToAR30Row_Any_NEON, ARGBToAR30Row_NEON, 0, 4, 4, 7)
980
#endif
981
#if defined(HAS_ARGBTOAR30ROW_SSSE3)
982
ANY11(ARGBToAR30Row_Any_SSSE3, ARGBToAR30Row_SSSE3, 0, 4, 4, 3)
983
#endif
984
#if defined(HAS_ABGRTOAR30ROW_AVX2)
985
ANY11(ABGRToAR30Row_Any_AVX2, ABGRToAR30Row_AVX2, 0, 4, 4, 7)
986
#endif
987
#if defined(HAS_ARGBTOAR30ROW_AVX2)
988
ANY11(ARGBToAR30Row_Any_AVX2, ARGBToAR30Row_AVX2, 0, 4, 4, 7)
989
#endif
990
991
#if defined(HAS_J400TOARGBROW_AVX512BW)
992
ANY11(J400ToARGBRow_Any_AVX512BW, J400ToARGBRow_AVX512BW, 0, 1, 4, 31)
993
#endif
994
#if defined(HAS_J400TOARGBROW_AVX2)
995
ANY11(J400ToARGBRow_Any_AVX2, J400ToARGBRow_AVX2, 0, 1, 4, 15)
996
#endif
997
#if defined(HAS_RGB24TOARGBROW_SSSE3)
998
ANY11(RGB24ToARGBRow_Any_SSSE3, RGB24ToARGBRow_SSSE3, 0, 3, 4, 15)
999
ANY11(RAWToARGBRow_Any_SSSE3, RAWToARGBRow_SSSE3, 0, 3, 4, 15)
1000
1001
#endif
1002
#if defined(HAS_RAWTOARGBROW_AVX2)
1003
ANY11(RAWToARGBRow_Any_AVX2, RAWToARGBRow_AVX2, 0, 3, 4, 31)
1004
#endif
1005
#if defined(HAS_RGB24TOARGBROW_AVX2)
1006
ANY11(RGB24ToARGBRow_Any_AVX2, RGB24ToARGBRow_AVX2, 0, 3, 4, 31)
1007
#endif
1008
#if defined(HAS_RAWTOARGBROW_AVX512BW)
1009
ANY11(RAWToARGBRow_Any_AVX512BW, RAWToARGBRow_AVX512BW, 0, 3, 4, 63)
1010
#endif
1011
#if defined(HAS_RGB24TOARGBROW_AVX512BW)
1012
ANY11(RGB24ToARGBRow_Any_AVX512BW, RGB24ToARGBRow_AVX512BW, 0, 3, 4, 63)
1013
#endif
1014
#if defined(HAS_RAWTORGBAROW_SSSE3)
1015
ANY11(RAWToRGBARow_Any_SSSE3, RAWToRGBARow_SSSE3, 0, 3, 4, 15)
1016
#endif
1017
#if defined(HAS_RAWTORGB24ROW_SSSE3)
1018
ANY11(RAWToRGB24Row_Any_SSSE3, RAWToRGB24Row_SSSE3, 0, 3, 3, 7)
1019
#endif
1020
#if defined(HAS_RGB565TOARGBROW_AVX2)
1021
ANY11(RGB565ToARGBRow_Any_AVX2, RGB565ToARGBRow_AVX2, 0, 2, 4, 15)
1022
#endif
1023
#if defined(HAS_ARGB1555TOARGBROW_AVX2)
1024
ANY11(ARGB1555ToARGBRow_Any_AVX2, ARGB1555ToARGBRow_AVX2, 0, 2, 4, 15)
1025
#endif
1026
#if defined(HAS_ARGB4444TOARGBROW_AVX2)
1027
ANY11(ARGB4444ToARGBRow_Any_AVX2, ARGB4444ToARGBRow_AVX2, 0, 2, 4, 15)
1028
#endif
1029
#if defined(HAS_ARGBTORGB24ROW_NEON)
1030
ANY11(ARGBToRGB24Row_Any_NEON, ARGBToRGB24Row_NEON, 0, 4, 3, 15)
1031
ANY11(ARGBToRAWRow_Any_NEON, ARGBToRAWRow_NEON, 0, 4, 3, 7)
1032
ANY11(ARGBToRGB565Row_Any_NEON, ARGBToRGB565Row_NEON, 0, 4, 2, 7)
1033
ANY11(ARGBToARGB1555Row_Any_NEON, ARGBToARGB1555Row_NEON, 0, 4, 2, 7)
1034
ANY11(ARGBToARGB4444Row_Any_NEON, ARGBToARGB4444Row_NEON, 0, 4, 2, 7)
1035
ANY11(J400ToARGBRow_Any_NEON, J400ToARGBRow_NEON, 0, 1, 4, 7)
1036
#endif
1037
#if defined(HAS_ARGBTORGB24ROW_LSX)
1038
ANY11(ARGBToRGB24Row_Any_LSX, ARGBToRGB24Row_LSX, 0, 4, 3, 15)
1039
ANY11(ARGBToRAWRow_Any_LSX, ARGBToRAWRow_LSX, 0, 4, 3, 15)
1040
ANY11(ARGBToRGB565Row_Any_LSX, ARGBToRGB565Row_LSX, 0, 4, 2, 7)
1041
ANY11(ARGBToARGB1555Row_Any_LSX, ARGBToARGB1555Row_LSX, 0, 4, 2, 7)
1042
ANY11(ARGBToARGB4444Row_Any_LSX, ARGBToARGB4444Row_LSX, 0, 4, 2, 7)
1043
#endif
1044
#if defined(HAS_ARGBTORGB24ROW_LASX)
1045
ANY11(ARGBToRGB24Row_Any_LASX, ARGBToRGB24Row_LASX, 0, 4, 3, 31)
1046
ANY11(ARGBToRAWRow_Any_LASX, ARGBToRAWRow_LASX, 0, 4, 3, 31)
1047
ANY11(ARGBToRGB565Row_Any_LASX, ARGBToRGB565Row_LASX, 0, 4, 2, 15)
1048
ANY11(ARGBToARGB1555Row_Any_LASX, ARGBToARGB1555Row_LASX, 0, 4, 2, 15)
1049
ANY11(ARGBToARGB4444Row_Any_LASX, ARGBToARGB4444Row_LASX, 0, 4, 2, 15)
1050
#endif
1051
#if defined(HAS_J400TOARGBROW_LSX)
1052
ANY11(J400ToARGBRow_Any_LSX, J400ToARGBRow_LSX, 0, 1, 4, 15)
1053
#endif
1054
#if defined(HAS_RAWTORGB24ROW_NEON)
1055
ANY11(RAWToRGB24Row_Any_NEON, RAWToRGB24Row_NEON, 0, 3, 3, 7)
1056
#endif
1057
#if defined(HAS_RAWTORGB24ROW_LSX)
1058
ANY11(RAWToRGB24Row_Any_LSX, RAWToRGB24Row_LSX, 0, 3, 3, 15)
1059
#endif
1060
#ifdef HAS_ARGBTOYROW_AVX2
1061
ANY11(ARGBToYRow_Any_AVX2, ARGBToYRow_AVX2, 0, 4, 1, 31)
1062
#endif
1063
#ifdef HAS_ABGRTOYROW_AVX2
1064
ANY11(ABGRToYRow_Any_AVX2, ABGRToYRow_AVX2, 0, 4, 1, 31)
1065
#endif
1066
#ifdef HAS_ARGBTOYJROW_AVX2
1067
ANY11(ARGBToYJRow_Any_AVX2, ARGBToYJRow_AVX2, 0, 4, 1, 31)
1068
#endif
1069
#ifdef HAS_ABGRTOYJROW_AVX2
1070
ANY11(ABGRToYJRow_Any_AVX2, ABGRToYJRow_AVX2, 0, 4, 1, 31)
1071
#endif
1072
#ifdef HAS_RGBATOYJROW_AVX2
1073
ANY11(RGBAToYJRow_Any_AVX2, RGBAToYJRow_AVX2, 0, 4, 1, 31)
1074
#endif
1075
#ifdef HAS_UYVYTOYROW_AVX2
1076
ANY11(UYVYToYRow_Any_AVX2, UYVYToYRow_AVX2, 0, 2, 1, 31)
1077
#endif
1078
#ifdef HAS_YUY2TOYROW_AVX2
1079
ANY11(YUY2ToYRow_Any_AVX2, YUY2ToYRow_AVX2, 1, 4, 1, 31)
1080
#endif
1081
#ifdef HAS_ARGBTOYROW_SSSE3
1082
ANY11(ARGBToYRow_Any_SSSE3, ARGBToYRow_SSSE3, 0, 4, 1, 15)
1083
#endif
1084
#ifdef HAS_ARGBTOYROW_AVX512BW
1085
ANY11(ARGBToYRow_Any_AVX512BW, ARGBToYRow_AVX512BW, 0, 4, 1, 63)
1086
#endif
1087
#ifdef HAS_BGRATOYROW_SSSE3
1088
ANY11(BGRAToYRow_Any_SSSE3, BGRAToYRow_SSSE3, 0, 4, 1, 15)
1089
ANY11(ABGRToYRow_Any_SSSE3, ABGRToYRow_SSSE3, 0, 4, 1, 15)
1090
ANY11(RGBAToYRow_Any_SSSE3, RGBAToYRow_SSSE3, 0, 4, 1, 15)
1091
#endif
1092
#ifdef HAS_ARGBTOYROW_AVX512BW
1093
ANY11(BGRAToYRow_Any_AVX512BW, BGRAToYRow_AVX512BW, 0, 4, 1, 63)
1094
#endif
1095
#ifdef HAS_ARGBTOYROW_AVX2
1096
ANY11(BGRAToYRow_Any_AVX2, BGRAToYRow_AVX2, 0, 4, 1, 31)
1097
#endif
1098
#ifdef HAS_ARGBTOYROW_AVX512BW
1099
ANY11(RGBAToYRow_Any_AVX512BW, RGBAToYRow_AVX512BW, 0, 4, 1, 63)
1100
#endif
1101
#ifdef HAS_ARGBTOYROW_AVX2
1102
ANY11(RGBAToYRow_Any_AVX2, RGBAToYRow_AVX2, 0, 4, 1, 31)
1103
#endif
1104
#ifdef HAS_ARGBTOYROW_AVX512BW
1105
ANY11(ABGRToYRow_Any_AVX512BW, ABGRToYRow_AVX512BW, 0, 4, 1, 63)
1106
#endif
1107
#ifdef HAS_YUY2TOYROW_SSE2
1108
ANY11(YUY2ToYRow_Any_SSE2, YUY2ToYRow_SSE2, 1, 4, 1, 15)
1109
ANY11(UYVYToYRow_Any_SSE2, UYVYToYRow_SSE2, 1, 4, 1, 15)
1110
#endif
1111
#ifdef HAS_ARGBTOYJROW_SSSE3
1112
ANY11(ARGBToYJRow_Any_SSSE3, ARGBToYJRow_SSSE3, 0, 4, 1, 15)
1113
#endif
1114
#ifdef HAS_ARGBTOYROW_AVX512BW
1115
ANY11(ARGBToYJRow_Any_AVX512BW, ARGBToYJRow_AVX512BW, 0, 4, 1, 63)
1116
#endif
1117
#ifdef HAS_ABGRTOYJROW_SSSE3
1118
ANY11(ABGRToYJRow_Any_SSSE3, ABGRToYJRow_SSSE3, 0, 4, 1, 15)
1119
#endif
1120
#ifdef HAS_ARGBTOYROW_AVX512BW
1121
ANY11(ABGRToYJRow_Any_AVX512BW, ABGRToYJRow_AVX512BW, 0, 4, 1, 63)
1122
#endif
1123
#ifdef HAS_RGBATOYJROW_SSSE3
1124
ANY11(RGBAToYJRow_Any_SSSE3, RGBAToYJRow_SSSE3, 0, 4, 1, 15)
1125
#endif
1126
#ifdef HAS_ARGBTOYROW_AVX512BW
1127
ANY11(RGBAToYJRow_Any_AVX512BW, RGBAToYJRow_AVX512BW, 0, 4, 1, 63)
1128
#endif
1129
#ifdef HAS_ARGBTOYROW_NEON
1130
ANY11(ARGBToYRow_Any_NEON, ARGBToYRow_NEON, 0, 4, 1, 15)
1131
#endif
1132
#ifdef HAS_ARGBTOYROW_NEON_DOTPROD
1133
ANY11(ARGBToYRow_Any_NEON_DotProd, ARGBToYRow_NEON_DotProd, 0, 4, 1, 15)
1134
#endif
1135
#ifdef HAS_ARGBTOYROW_LSX
1136
ANY11(ARGBToYRow_Any_LSX, ARGBToYRow_LSX, 0, 4, 1, 15)
1137
#endif
1138
#ifdef HAS_ARGBTOYROW_LASX
1139
ANY11(ARGBToYRow_Any_LASX, ARGBToYRow_LASX, 0, 4, 1, 31)
1140
#endif
1141
#ifdef HAS_ARGBTOYJROW_NEON
1142
ANY11(ARGBToYJRow_Any_NEON, ARGBToYJRow_NEON, 0, 4, 1, 15)
1143
#endif
1144
#ifdef HAS_ARGBTOYJROW_NEON_DOTPROD
1145
ANY11(ARGBToYJRow_Any_NEON_DotProd, ARGBToYJRow_NEON_DotProd, 0, 4, 1, 15)
1146
#endif
1147
#ifdef HAS_ABGRTOYJROW_NEON
1148
ANY11(ABGRToYJRow_Any_NEON, ABGRToYJRow_NEON, 0, 4, 1, 15)
1149
#endif
1150
#ifdef HAS_ABGRTOYJROW_NEON_DOTPROD
1151
ANY11(ABGRToYJRow_Any_NEON_DotProd, ABGRToYJRow_NEON_DotProd, 0, 4, 1, 15)
1152
#endif
1153
#ifdef HAS_RGBATOYJROW_NEON
1154
ANY11(RGBAToYJRow_Any_NEON, RGBAToYJRow_NEON, 0, 4, 1, 15)
1155
#endif
1156
#ifdef HAS_RGBATOYJROW_NEON_DOTPROD
1157
ANY11(RGBAToYJRow_Any_NEON_DotProd, RGBAToYJRow_NEON_DotProd, 0, 4, 1, 15)
1158
#endif
1159
#ifdef HAS_ARGBTOYJROW_LSX
1160
ANY11(ARGBToYJRow_Any_LSX, ARGBToYJRow_LSX, 0, 4, 1, 15)
1161
#endif
1162
#ifdef HAS_RGBATOYJROW_LSX
1163
ANY11(RGBAToYJRow_Any_LSX, RGBAToYJRow_LSX, 0, 4, 1, 15)
1164
#endif
1165
#ifdef HAS_ABGRTOYJROW_LSX
1166
ANY11(ABGRToYJRow_Any_LSX, ABGRToYJRow_LSX, 0, 4, 1, 15)
1167
#endif
1168
#ifdef HAS_RGBATOYJROW_LASX
1169
ANY11(RGBAToYJRow_Any_LASX, RGBAToYJRow_LASX, 0, 4, 1, 31)
1170
#endif
1171
#ifdef HAS_ARGBTOYJROW_LASX
1172
ANY11(ARGBToYJRow_Any_LASX, ARGBToYJRow_LASX, 0, 4, 1, 31)
1173
#endif
1174
#ifdef HAS_ABGRTOYJROW_LASX
1175
ANY11(ABGRToYJRow_Any_LASX, ABGRToYJRow_LASX, 0, 4, 1, 31)
1176
#endif
1177
#ifdef HAS_BGRATOYROW_NEON
1178
ANY11(BGRAToYRow_Any_NEON, BGRAToYRow_NEON, 0, 4, 1, 15)
1179
#endif
1180
#ifdef HAS_BGRATOYROW_NEON_DOTPROD
1181
ANY11(BGRAToYRow_Any_NEON_DotProd, BGRAToYRow_NEON_DotProd, 0, 4, 1, 15)
1182
#endif
1183
#ifdef HAS_BGRATOYROW_LSX
1184
ANY11(BGRAToYRow_Any_LSX, BGRAToYRow_LSX, 0, 4, 1, 15)
1185
#endif
1186
#ifdef HAS_BGRATOYROW_LASX
1187
ANY11(BGRAToYRow_Any_LASX, BGRAToYRow_LASX, 0, 4, 1, 31)
1188
#endif
1189
#ifdef HAS_ABGRTOYROW_NEON
1190
ANY11(ABGRToYRow_Any_NEON, ABGRToYRow_NEON, 0, 4, 1, 15)
1191
#endif
1192
#ifdef HAS_ABGRTOYROW_NEON_DOTPROD
1193
ANY11(ABGRToYRow_Any_NEON_DotProd, ABGRToYRow_NEON_DotProd, 0, 4, 1, 15)
1194
#endif
1195
#ifdef HAS_ABGRTOYROW_LSX
1196
ANY11(ABGRToYRow_Any_LSX, ABGRToYRow_LSX, 0, 4, 1, 15)
1197
#endif
1198
#ifdef HAS_ABGRTOYROW_LASX
1199
ANY11(ABGRToYRow_Any_LASX, ABGRToYRow_LASX, 0, 4, 1, 31)
1200
#endif
1201
#ifdef HAS_RGBATOYROW_NEON
1202
ANY11(RGBAToYRow_Any_NEON, RGBAToYRow_NEON, 0, 4, 1, 15)
1203
#endif
1204
#ifdef HAS_RGBATOYROW_NEON_DOTPROD
1205
ANY11(RGBAToYRow_Any_NEON_DotProd, RGBAToYRow_NEON_DotProd, 0, 4, 1, 15)
1206
#endif
1207
#ifdef HAS_RGBATOYROW_LSX
1208
ANY11(RGBAToYRow_Any_LSX, RGBAToYRow_LSX, 0, 4, 1, 15)
1209
#endif
1210
#ifdef HAS_RGBATOYROW_LASX
1211
ANY11(RGBAToYRow_Any_LASX, RGBAToYRow_LASX, 0, 4, 1, 31)
1212
#endif
1213
#ifdef HAS_RGB24TOYROW_NEON
1214
#endif
1215
#ifdef HAS_RGB24TOYJROW_AVX2
1216
#endif
1217
#ifdef HAS_RGB24TOYJROW_SSSE3
1218
#endif
1219
#ifdef HAS_RGB24TOYJROW_NEON
1220
#endif
1221
#ifdef HAS_RGB24TOYROW_LSX
1222
#endif
1223
#ifdef HAS_RGB24TOYJROW_LSX
1224
#endif
1225
#ifdef HAS_RGB24TOYJROW_LASX
1226
#endif
1227
#ifdef HAS_RGB24TOYROW_LASX
1228
#endif
1229
#ifdef HAS_RAWTOYROW_NEON
1230
#endif
1231
#ifdef HAS_RAWTOYJROW_AVX2
1232
#endif
1233
#ifdef HAS_RAWTOYJROW_SSSE3
1234
#endif
1235
#ifdef HAS_RAWTOYJROW_NEON
1236
#endif
1237
#ifdef HAS_RAWTOYROW_LSX
1238
#endif
1239
#ifdef HAS_RAWTOYROW_LASX
1240
#endif
1241
#ifdef HAS_RAWTOYJROW_LSX
1242
#endif
1243
#ifdef HAS_RAWTOYJROW_LASX
1244
#endif
1245
#ifdef HAS_RGB565TOYROW_NEON
1246
ANY11(RGB565ToYRow_Any_NEON, RGB565ToYRow_NEON, 0, 2, 1, 15)
1247
#endif
1248
#ifdef HAS_RGB565TOYROW_LSX
1249
ANY11(RGB565ToYRow_Any_LSX, RGB565ToYRow_LSX, 0, 2, 1, 15)
1250
#endif
1251
#ifdef HAS_RGB565TOYROW_LASX
1252
ANY11(RGB565ToYRow_Any_LASX, RGB565ToYRow_LASX, 0, 2, 1, 31)
1253
#endif
1254
#ifdef HAS_ARGB1555TOYROW_NEON
1255
#ifdef __aarch64__
1256
ANY11(ARGB1555ToYRow_Any_NEON, ARGB1555ToYRow_NEON, 0, 2, 1, 15)
1257
#else
1258
ANY11(ARGB1555ToYRow_Any_NEON, ARGB1555ToYRow_NEON, 0, 2, 1, 7)
1259
#endif
1260
#endif
1261
#ifdef HAS_ARGB1555TOYROW_LSX
1262
ANY11(ARGB1555ToYRow_Any_LSX, ARGB1555ToYRow_LSX, 0, 2, 1, 15)
1263
#endif
1264
#ifdef HAS_ARGB1555TOYROW_LASX
1265
ANY11(ARGB1555ToYRow_Any_LASX, ARGB1555ToYRow_LASX, 0, 2, 1, 31)
1266
#endif
1267
#ifdef HAS_ARGB4444TOYROW_NEON
1268
#ifdef __aarch64__
1269
ANY11(ARGB4444ToYRow_Any_NEON, ARGB4444ToYRow_NEON, 0, 2, 1, 15)
1270
#else
1271
ANY11(ARGB4444ToYRow_Any_NEON, ARGB4444ToYRow_NEON, 0, 2, 1, 7)
1272
#endif
1273
#endif
1274
#ifdef HAS_YUY2TOYROW_NEON
1275
ANY11(YUY2ToYRow_Any_NEON, YUY2ToYRow_NEON, 1, 4, 1, 15)
1276
#endif
1277
#ifdef HAS_UYVYTOYROW_NEON
1278
ANY11(UYVYToYRow_Any_NEON, UYVYToYRow_NEON, 1, 4, 1, 15)
1279
#endif
1280
#ifdef HAS_YUY2TOYROW_LSX
1281
ANY11(YUY2ToYRow_Any_LSX, YUY2ToYRow_LSX, 1, 4, 1, 15)
1282
#endif
1283
#ifdef HAS_YUY2TOYROW_LASX
1284
ANY11(YUY2ToYRow_Any_LASX, YUY2ToYRow_LASX, 1, 4, 1, 31)
1285
#endif
1286
#ifdef HAS_UYVYTOYROW_LSX
1287
ANY11(UYVYToYRow_Any_LSX, UYVYToYRow_LSX, 1, 4, 1, 15)
1288
#endif
1289
#ifdef HAS_UYVYTOYROW_LASX
1290
ANY11(UYVYToYRow_Any_LASX, UYVYToYRow_LASX, 1, 4, 1, 31)
1291
#endif
1292
#ifdef HAS_AYUVTOYROW_NEON
1293
ANY11(AYUVToYRow_Any_NEON, AYUVToYRow_NEON, 0, 4, 1, 15)
1294
#endif
1295
#ifdef HAS_SWAPUVROW_SSSE3
1296
ANY11(SwapUVRow_Any_SSSE3, SwapUVRow_SSSE3, 0, 2, 2, 15)
1297
#endif
1298
#ifdef HAS_SWAPUVROW_AVX2
1299
ANY11(SwapUVRow_Any_AVX2, SwapUVRow_AVX2, 0, 2, 2, 31)
1300
#endif
1301
#ifdef HAS_SWAPUVROW_NEON
1302
ANY11(SwapUVRow_Any_NEON, SwapUVRow_NEON, 0, 2, 2, 15)
1303
#endif
1304
#ifdef HAS_RGB24TOARGBROW_NEON
1305
ANY11(RGB24ToARGBRow_Any_NEON, RGB24ToARGBRow_NEON, 0, 3, 4, 7)
1306
#endif
1307
#ifdef HAS_RGB24TOARGBROW_LSX
1308
ANY11(RGB24ToARGBRow_Any_LSX, RGB24ToARGBRow_LSX, 0, 3, 4, 15)
1309
#endif
1310
#ifdef HAS_RGB24TOARGBROW_LASX
1311
ANY11(RGB24ToARGBRow_Any_LASX, RGB24ToARGBRow_LASX, 0, 3, 4, 31)
1312
#endif
1313
#ifdef HAS_RAWTOARGBROW_NEON
1314
ANY11(RAWToARGBRow_Any_NEON, RAWToARGBRow_NEON, 0, 3, 4, 7)
1315
#endif
1316
#ifdef HAS_RAWTORGBAROW_NEON
1317
ANY11(RAWToRGBARow_Any_NEON, RAWToRGBARow_NEON, 0, 3, 4, 7)
1318
#endif
1319
#ifdef HAS_RAWTOARGBROW_LSX
1320
ANY11(RAWToARGBRow_Any_LSX, RAWToARGBRow_LSX, 0, 3, 4, 15)
1321
#endif
1322
#ifdef HAS_RAWTOARGBROW_LASX
1323
ANY11(RAWToARGBRow_Any_LASX, RAWToARGBRow_LASX, 0, 3, 4, 31)
1324
#endif
1325
#ifdef HAS_RGB565TOARGBROW_NEON
1326
ANY11(RGB565ToARGBRow_Any_NEON, RGB565ToARGBRow_NEON, 0, 2, 4, 15)
1327
#endif
1328
#ifdef HAS_RGB565TOARGBROW_LSX
1329
ANY11(RGB565ToARGBRow_Any_LSX, RGB565ToARGBRow_LSX, 0, 2, 4, 15)
1330
#endif
1331
#ifdef HAS_RGB565TOARGBROW_LASX
1332
ANY11(RGB565ToARGBRow_Any_LASX, RGB565ToARGBRow_LASX, 0, 2, 4, 31)
1333
#endif
1334
#ifdef HAS_ARGB1555TOARGBROW_NEON
1335
ANY11(ARGB1555ToARGBRow_Any_NEON, ARGB1555ToARGBRow_NEON, 0, 2, 4, 15)
1336
#endif
1337
#ifdef HAS_ARGB1555TOARGBROW_LSX
1338
ANY11(ARGB1555ToARGBRow_Any_LSX, ARGB1555ToARGBRow_LSX, 0, 2, 4, 15)
1339
#endif
1340
#ifdef HAS_ARGB1555TOARGBROW_LASX
1341
ANY11(ARGB1555ToARGBRow_Any_LASX, ARGB1555ToARGBRow_LASX, 0, 2, 4, 31)
1342
#endif
1343
#ifdef HAS_ARGB4444TOARGBROW_NEON
1344
ANY11(ARGB4444ToARGBRow_Any_NEON, ARGB4444ToARGBRow_NEON, 0, 2, 4, 7)
1345
#endif
1346
#ifdef HAS_ARGB4444TOARGBROW_LSX
1347
ANY11(ARGB4444ToARGBRow_Any_LSX, ARGB4444ToARGBRow_LSX, 0, 2, 4, 15)
1348
#endif
1349
#ifdef HAS_ARGB4444TOARGBROW_LASX
1350
ANY11(ARGB4444ToARGBRow_Any_LASX, ARGB4444ToARGBRow_LASX, 0, 2, 4, 31)
1351
#endif
1352
#ifdef HAS_ARGBATTENUATEROW_SSSE3
1353
ANY11(ARGBAttenuateRow_Any_SSSE3, ARGBAttenuateRow_SSSE3, 0, 4, 4, 3)
1354
#endif
1355
#ifdef HAS_ARGBUNATTENUATEROW_SSE2
1356
ANY11(ARGBUnattenuateRow_Any_SSE2, ARGBUnattenuateRow_SSE2, 0, 4, 4, 3)
1357
#endif
1358
#ifdef HAS_ARGBATTENUATEROW_AVX2
1359
ANY11(ARGBAttenuateRow_Any_AVX2, ARGBAttenuateRow_AVX2, 0, 4, 4, 7)
1360
#endif
1361
#ifdef HAS_ARGBUNATTENUATEROW_AVX2
1362
ANY11(ARGBUnattenuateRow_Any_AVX2, ARGBUnattenuateRow_AVX2, 0, 4, 4, 7)
1363
#endif
1364
#ifdef HAS_ARGBATTENUATEROW_NEON
1365
ANY11(ARGBAttenuateRow_Any_NEON, ARGBAttenuateRow_NEON, 0, 4, 4, 7)
1366
#endif
1367
#ifdef HAS_ARGBATTENUATEROW_LSX
1368
ANY11(ARGBAttenuateRow_Any_LSX, ARGBAttenuateRow_LSX, 0, 4, 4, 7)
1369
#endif
1370
#ifdef HAS_ARGBATTENUATEROW_LASX
1371
ANY11(ARGBAttenuateRow_Any_LASX, ARGBAttenuateRow_LASX, 0, 4, 4, 15)
1372
#endif
1373
#ifdef HAS_ARGBEXTRACTALPHAROW_SSE2
1374
ANY11(ARGBExtractAlphaRow_Any_SSE2, ARGBExtractAlphaRow_SSE2, 0, 4, 1, 7)
1375
#endif
1376
#ifdef HAS_ARGBEXTRACTALPHAROW_AVX2
1377
ANY11(ARGBExtractAlphaRow_Any_AVX2, ARGBExtractAlphaRow_AVX2, 0, 4, 1, 31)
1378
#endif
1379
#ifdef HAS_ARGBEXTRACTALPHAROW_NEON
1380
ANY11(ARGBExtractAlphaRow_Any_NEON, ARGBExtractAlphaRow_NEON, 0, 4, 1, 15)
1381
#endif
1382
#ifdef HAS_ARGBEXTRACTALPHAROW_LSX
1383
ANY11(ARGBExtractAlphaRow_Any_LSX, ARGBExtractAlphaRow_LSX, 0, 4, 1, 15)
1384
#endif
1385
#undef ANY11
1386
1387
// Any 1 to 1 blended.  Destination is read, modify, write.
1388
#define ANY11B(NAMEANY, ANY_SIMD, UVSHIFT, SBPP, BPP, MASK)               \
1389
0
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_ptr, int width) {     \
1390
0
    SIMD_ALIGNED(uint8_t vin[64]);                                        \
1391
0
    SIMD_ALIGNED(uint8_t vout[64]);                                       \
1392
0
    memset(vin, 0, sizeof(vin));   /* for msan */                         \
1393
0
    memset(vout, 0, sizeof(vout)); /* for msan */                         \
1394
0
    int r = width & MASK;                                                 \
1395
0
    int n = width & ~MASK;                                                \
1396
0
    if (n > 0) {                                                          \
1397
0
      ANY_SIMD(src_ptr, dst_ptr, n);                                      \
1398
0
    }                                                                     \
1399
0
    ptrdiff_t np = n;                                                     \
1400
0
    memcpy(vin, src_ptr + (np >> UVSHIFT) * SBPP, SS(r, UVSHIFT) * SBPP); \
1401
0
    memcpy(vout, dst_ptr + np * BPP, r * BPP);                            \
1402
0
    ANY_SIMD(vin, vout, MASK + 1);                                        \
1403
0
    memcpy(dst_ptr + np * BPP, vout, r * BPP);                            \
1404
0
  }
Unexecuted instantiation: ARGBCopyAlphaRow_Any_AVX2
Unexecuted instantiation: ARGBCopyAlphaRow_Any_SSE2
Unexecuted instantiation: ARGBCopyYToAlphaRow_Any_AVX2
Unexecuted instantiation: ARGBCopyYToAlphaRow_Any_SSE2
1405
1406
#ifdef HAS_ARGBCOPYALPHAROW_AVX2
1407
ANY11B(ARGBCopyAlphaRow_Any_AVX2, ARGBCopyAlphaRow_AVX2, 0, 4, 4, 15)
1408
#endif
1409
#ifdef HAS_ARGBCOPYALPHAROW_SSE2
1410
ANY11B(ARGBCopyAlphaRow_Any_SSE2, ARGBCopyAlphaRow_SSE2, 0, 4, 4, 7)
1411
#endif
1412
#ifdef HAS_ARGBCOPYYTOALPHAROW_AVX2
1413
ANY11B(ARGBCopyYToAlphaRow_Any_AVX2, ARGBCopyYToAlphaRow_AVX2, 0, 1, 4, 15)
1414
#endif
1415
#ifdef HAS_ARGBCOPYYTOALPHAROW_SSE2
1416
ANY11B(ARGBCopyYToAlphaRow_Any_SSE2, ARGBCopyYToAlphaRow_SSE2, 0, 1, 4, 7)
1417
#endif
1418
#undef ANY11B
1419
1420
// Any 1 to 1 with parameter.
1421
#define ANY11P(NAMEANY, ANY_SIMD, T, SBPP, BPP, MASK)                          \
1422
308
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_ptr, T param, int width) { \
1423
308
    SIMD_ALIGNED(uint8_t vin[(MASK + 1) * SBPP]);                              \
1424
308
    SIMD_ALIGNED(uint8_t vout[(MASK + 1) * BPP]);                              \
1425
308
    memset(vin, 0, sizeof(vin)); /* for msan */                                \
1426
308
    int r = width & MASK;                                                      \
1427
308
    int n = width & ~MASK;                                                     \
1428
308
    if (n > 0) {                                                               \
1429
89
      ANY_SIMD(src_ptr, dst_ptr, param, n);                                    \
1430
89
    }                                                                          \
1431
308
    ptrdiff_t np = n;                                                          \
1432
308
    memcpy(vin, src_ptr + np * SBPP, r * SBPP);                                \
1433
308
    ANY_SIMD(vin, vout, param, MASK + 1);                                      \
1434
308
    memcpy(dst_ptr + np * BPP, vout, r * BPP);                                 \
1435
308
  }
Unexecuted instantiation: I400ToARGBRow_Any_SSE2
I400ToARGBRow_Any_AVX2
Line
Count
Source
1422
308
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_ptr, T param, int width) { \
1423
308
    SIMD_ALIGNED(uint8_t vin[(MASK + 1) * SBPP]);                              \
1424
308
    SIMD_ALIGNED(uint8_t vout[(MASK + 1) * BPP]);                              \
1425
308
    memset(vin, 0, sizeof(vin)); /* for msan */                                \
1426
308
    int r = width & MASK;                                                      \
1427
308
    int n = width & ~MASK;                                                     \
1428
308
    if (n > 0) {                                                               \
1429
89
      ANY_SIMD(src_ptr, dst_ptr, param, n);                                    \
1430
89
    }                                                                          \
1431
308
    ptrdiff_t np = n;                                                          \
1432
308
    memcpy(vin, src_ptr + np * SBPP, r * SBPP);                                \
1433
308
    ANY_SIMD(vin, vout, param, MASK + 1);                                      \
1434
308
    memcpy(dst_ptr + np * BPP, vout, r * BPP);                                 \
1435
308
  }
Unexecuted instantiation: ARGBToRGB565DitherRow_Any_AVX2
Unexecuted instantiation: ARGBShuffleRow_Any_SSSE3
Unexecuted instantiation: ARGBShuffleRow_Any_AVX2
Unexecuted instantiation: ARGBShuffleRow_Any_AVX512BW
1436
1437
#if defined(HAS_I400TOARGBROW_SSE2)
1438
ANY11P(I400ToARGBRow_Any_SSE2,
1439
       I400ToARGBRow_SSE2,
1440
       const struct YuvConstants*,
1441
       1,
1442
       4,
1443
       7)
1444
#endif
1445
#if defined(HAS_I400TOARGBROW_AVX2)
1446
ANY11P(I400ToARGBRow_Any_AVX2,
1447
       I400ToARGBRow_AVX2,
1448
       const struct YuvConstants*,
1449
       1,
1450
       4,
1451
       15)
1452
#endif
1453
#if defined(HAS_I400TOARGBROW_NEON)
1454
ANY11P(I400ToARGBRow_Any_NEON,
1455
       I400ToARGBRow_NEON,
1456
       const struct YuvConstants*,
1457
       1,
1458
       4,
1459
       7)
1460
#endif
1461
#if defined(HAS_I400TOARGBROW_LSX)
1462
ANY11P(I400ToARGBRow_Any_LSX,
1463
       I400ToARGBRow_LSX,
1464
       const struct YuvConstants*,
1465
       1,
1466
       4,
1467
       15)
1468
#endif
1469
1470
#if defined(HAS_ARGBTORGB565DITHERROW_AVX2)
1471
ANY11P(ARGBToRGB565DitherRow_Any_AVX2,
1472
       ARGBToRGB565DitherRow_AVX2,
1473
       const uint32_t,
1474
       4,
1475
       2,
1476
       7)
1477
#endif
1478
#if defined(HAS_ARGBTORGB565DITHERROW_NEON)
1479
ANY11P(ARGBToRGB565DitherRow_Any_NEON,
1480
       ARGBToRGB565DitherRow_NEON,
1481
       const uint32_t,
1482
       4,
1483
       2,
1484
       7)
1485
#endif
1486
#if defined(HAS_ARGBTORGB565DITHERROW_LSX)
1487
ANY11P(ARGBToRGB565DitherRow_Any_LSX,
1488
       ARGBToRGB565DitherRow_LSX,
1489
       const uint32_t,
1490
       4,
1491
       2,
1492
       7)
1493
#endif
1494
#if defined(HAS_ARGBTORGB565DITHERROW_LASX)
1495
ANY11P(ARGBToRGB565DitherRow_Any_LASX,
1496
       ARGBToRGB565DitherRow_LASX,
1497
       const uint32_t,
1498
       4,
1499
       2,
1500
       15)
1501
#endif
1502
#ifdef HAS_ARGBSHUFFLEROW_SSSE3
1503
ANY11P(ARGBShuffleRow_Any_SSSE3, ARGBShuffleRow_SSSE3, const uint8_t*, 4, 4, 7)
1504
#endif
1505
#ifdef HAS_ARGBSHUFFLEROW_AVX2
1506
ANY11P(ARGBShuffleRow_Any_AVX2, ARGBShuffleRow_AVX2, const uint8_t*, 4, 4, 15)
1507
#endif
1508
#ifdef HAS_ARGBSHUFFLEROW_AVX512BW
1509
ANY11P(ARGBShuffleRow_Any_AVX512BW,
1510
       ARGBShuffleRow_AVX512BW,
1511
       const uint8_t*,
1512
       4,
1513
       4,
1514
       31)
1515
#endif
1516
#ifdef HAS_ARGBSHUFFLEROW_NEON
1517
ANY11P(ARGBShuffleRow_Any_NEON, ARGBShuffleRow_NEON, const uint8_t*, 4, 4, 3)
1518
#endif
1519
#ifdef HAS_ARGBSHUFFLEROW_LSX
1520
ANY11P(ARGBShuffleRow_Any_LSX, ARGBShuffleRow_LSX, const uint8_t*, 4, 4, 7)
1521
#endif
1522
#ifdef HAS_ARGBSHUFFLEROW_LASX
1523
ANY11P(ARGBShuffleRow_Any_LASX, ARGBShuffleRow_LASX, const uint8_t*, 4, 4, 15)
1524
#endif
1525
#undef ANY11P
1526
#undef ANY11P
1527
1528
// Any 1 to 1 with type
1529
#define ANY11T(NAMEANY, ANY_SIMD, SBPP, BPP, STYPE, DTYPE, MASK)  \
1530
0
  void NAMEANY(const STYPE* src_ptr, DTYPE* dst_ptr, int width) { \
1531
0
    SIMD_ALIGNED(uint8_t vin[(MASK + 1) * SBPP]);                 \
1532
0
    SIMD_ALIGNED(uint8_t vout[(MASK + 1) * BPP]);                 \
1533
0
    memset(vin, 0, sizeof(vin)); /* for msan */                   \
1534
0
    int r = width & MASK;                                         \
1535
0
    int n = width & ~MASK;                                        \
1536
0
    if (n > 0) {                                                  \
1537
0
      ANY_SIMD(src_ptr, dst_ptr, n);                              \
1538
0
    }                                                             \
1539
0
    ptrdiff_t np = n;                                             \
1540
0
    memcpy(vin, (uint8_t*)(src_ptr) + np * SBPP, r * SBPP);       \
1541
0
    ANY_SIMD((STYPE*)vin, (DTYPE*)vout, MASK + 1);                \
1542
0
    memcpy((uint8_t*)(dst_ptr) + np * BPP, vout, r * BPP);        \
1543
0
  }
Unexecuted instantiation: ARGBToAR64Row_Any_SSSE3
Unexecuted instantiation: ARGBToAB64Row_Any_SSSE3
Unexecuted instantiation: AR64ToARGBRow_Any_SSSE3
Unexecuted instantiation: AB64ToARGBRow_Any_SSSE3
Unexecuted instantiation: ARGBToAR64Row_Any_AVX2
Unexecuted instantiation: ARGBToAB64Row_Any_AVX2
Unexecuted instantiation: AR64ToARGBRow_Any_AVX2
Unexecuted instantiation: AB64ToARGBRow_Any_AVX2
1544
1545
#ifdef HAS_ARGBTOAR64ROW_SSSE3
1546
ANY11T(ARGBToAR64Row_Any_SSSE3, ARGBToAR64Row_SSSE3, 4, 8, uint8_t, uint16_t, 3)
1547
#endif
1548
1549
#ifdef HAS_ARGBTOAB64ROW_SSSE3
1550
ANY11T(ARGBToAB64Row_Any_SSSE3, ARGBToAB64Row_SSSE3, 4, 8, uint8_t, uint16_t, 3)
1551
#endif
1552
1553
#ifdef HAS_AR64TOARGBROW_SSSE3
1554
ANY11T(AR64ToARGBRow_Any_SSSE3, AR64ToARGBRow_SSSE3, 8, 4, uint16_t, uint8_t, 3)
1555
#endif
1556
1557
#ifdef HAS_ARGBTOAR64ROW_SSSE3
1558
ANY11T(AB64ToARGBRow_Any_SSSE3, AB64ToARGBRow_SSSE3, 8, 4, uint16_t, uint8_t, 3)
1559
#endif
1560
1561
#ifdef HAS_ARGBTOAR64ROW_AVX2
1562
ANY11T(ARGBToAR64Row_Any_AVX2, ARGBToAR64Row_AVX2, 4, 8, uint8_t, uint16_t, 7)
1563
#endif
1564
1565
#ifdef HAS_ARGBTOAB64ROW_AVX2
1566
ANY11T(ARGBToAB64Row_Any_AVX2, ARGBToAB64Row_AVX2, 4, 8, uint8_t, uint16_t, 7)
1567
#endif
1568
1569
#ifdef HAS_AR64TOARGBROW_AVX2
1570
ANY11T(AR64ToARGBRow_Any_AVX2, AR64ToARGBRow_AVX2, 8, 4, uint16_t, uint8_t, 7)
1571
#endif
1572
1573
#ifdef HAS_ARGBTOAR64ROW_AVX2
1574
ANY11T(AB64ToARGBRow_Any_AVX2, AB64ToARGBRow_AVX2, 8, 4, uint16_t, uint8_t, 7)
1575
#endif
1576
1577
#ifdef HAS_ARGBTOAR64ROW_NEON
1578
ANY11T(ARGBToAR64Row_Any_NEON, ARGBToAR64Row_NEON, 4, 8, uint8_t, uint16_t, 7)
1579
#endif
1580
1581
#ifdef HAS_ARGBTOAB64ROW_NEON
1582
ANY11T(ARGBToAB64Row_Any_NEON, ARGBToAB64Row_NEON, 4, 8, uint8_t, uint16_t, 7)
1583
#endif
1584
1585
#ifdef HAS_AR64TOARGBROW_NEON
1586
ANY11T(AR64ToARGBRow_Any_NEON, AR64ToARGBRow_NEON, 8, 4, uint16_t, uint8_t, 7)
1587
#endif
1588
1589
#ifdef HAS_ARGBTOAR64ROW_NEON
1590
ANY11T(AB64ToARGBRow_Any_NEON, AB64ToARGBRow_NEON, 8, 4, uint16_t, uint8_t, 7)
1591
#endif
1592
1593
#undef ANY11T
1594
1595
// Any 1 to 1 with parameter and shorts.  BPP measures in shorts.
1596
#define ANY11C(NAMEANY, ANY_SIMD, SBPP, BPP, STYPE, DTYPE, MASK)             \
1597
513
  void NAMEANY(const STYPE* src_ptr, DTYPE* dst_ptr, int scale, int width) { \
1598
513
    SIMD_ALIGNED(STYPE vin[64]);                                             \
1599
513
    SIMD_ALIGNED(DTYPE vout[64]);                                            \
1600
513
    memset(vin, 0, sizeof(vin)); /* for msan */                              \
1601
513
    int r = width & MASK;                                                    \
1602
513
    int n = width & ~MASK;                                                   \
1603
513
    if (n > 0) {                                                             \
1604
111
      ANY_SIMD(src_ptr, dst_ptr, scale, n);                                  \
1605
111
    }                                                                        \
1606
513
    ptrdiff_t np = n;                                                        \
1607
513
    memcpy(vin, src_ptr + np, r * SBPP);                                     \
1608
513
    ANY_SIMD(vin, vout, scale, MASK + 1);                                    \
1609
513
    memcpy(dst_ptr + np, vout, r * BPP);                                     \
1610
513
  }
Unexecuted instantiation: Convert16To8Row_Any_SSSE3
Convert16To8Row_Any_AVX2
Line
Count
Source
1597
513
  void NAMEANY(const STYPE* src_ptr, DTYPE* dst_ptr, int scale, int width) { \
1598
513
    SIMD_ALIGNED(STYPE vin[64]);                                             \
1599
513
    SIMD_ALIGNED(DTYPE vout[64]);                                            \
1600
513
    memset(vin, 0, sizeof(vin)); /* for msan */                              \
1601
513
    int r = width & MASK;                                                    \
1602
513
    int n = width & ~MASK;                                                   \
1603
513
    if (n > 0) {                                                             \
1604
111
      ANY_SIMD(src_ptr, dst_ptr, scale, n);                                  \
1605
111
    }                                                                        \
1606
513
    ptrdiff_t np = n;                                                        \
1607
513
    memcpy(vin, src_ptr + np, r * SBPP);                                     \
1608
513
    ANY_SIMD(vin, vout, scale, MASK + 1);                                    \
1609
513
    memcpy(dst_ptr + np, vout, r * BPP);                                     \
1610
513
  }
Unexecuted instantiation: Convert16To8Row_Any_AVX512BW
Unexecuted instantiation: Convert8To16Row_Any_SSE2
Unexecuted instantiation: Convert8To16Row_Any_AVX2
Unexecuted instantiation: MultiplyRow_16_Any_AVX2
Unexecuted instantiation: DivideRow_16_Any_AVX2
1611
1612
#ifdef HAS_CONVERT16TO8ROW_SSSE3
1613
ANY11C(Convert16To8Row_Any_SSSE3,
1614
       Convert16To8Row_SSSE3,
1615
       2,
1616
       1,
1617
       uint16_t,
1618
       uint8_t,
1619
       15)
1620
#endif
1621
#ifdef HAS_CONVERT16TO8ROW_AVX2
1622
ANY11C(Convert16To8Row_Any_AVX2,
1623
       Convert16To8Row_AVX2,
1624
       2,
1625
       1,
1626
       uint16_t,
1627
       uint8_t,
1628
       31)
1629
#endif
1630
#ifdef HAS_CONVERT16TO8ROW_AVX512BW
1631
ANY11C(Convert16To8Row_Any_AVX512BW,
1632
       Convert16To8Row_AVX512BW,
1633
       2,
1634
       1,
1635
       uint16_t,
1636
       uint8_t,
1637
       63)
1638
#endif
1639
#ifdef HAS_CONVERT16TO8ROW_NEON
1640
ANY11C(Convert16To8Row_Any_NEON,
1641
       Convert16To8Row_NEON,
1642
       2,
1643
       1,
1644
       uint16_t,
1645
       uint8_t,
1646
       15)
1647
#endif
1648
#ifdef HAS_CONVERT8TO16ROW_SSE2
1649
ANY11C(Convert8To16Row_Any_SSE2,
1650
       Convert8To16Row_SSE2,
1651
       1,
1652
       2,
1653
       uint8_t,
1654
       uint16_t,
1655
       15)
1656
#endif
1657
#ifdef HAS_CONVERT8TO16ROW_AVX2
1658
ANY11C(Convert8To16Row_Any_AVX2,
1659
       Convert8To16Row_AVX2,
1660
       1,
1661
       2,
1662
       uint8_t,
1663
       uint16_t,
1664
       31)
1665
#endif
1666
#ifdef HAS_CONVERT8TO16ROW_NEON
1667
ANY11C(Convert8To16Row_Any_NEON,
1668
       Convert8To16Row_NEON,
1669
       1,
1670
       2,
1671
       uint8_t,
1672
       uint16_t,
1673
       15)
1674
#endif
1675
#ifdef HAS_MULTIPLYROW_16_AVX2
1676
ANY11C(MultiplyRow_16_Any_AVX2,
1677
       MultiplyRow_16_AVX2,
1678
       2,
1679
       2,
1680
       uint16_t,
1681
       uint16_t,
1682
       31)
1683
#endif
1684
#ifdef HAS_MULTIPLYROW_16_NEON
1685
ANY11C(MultiplyRow_16_Any_NEON,
1686
       MultiplyRow_16_NEON,
1687
       2,
1688
       2,
1689
       uint16_t,
1690
       uint16_t,
1691
       15)
1692
#endif
1693
#ifdef HAS_DIVIDEROW_16_AVX2
1694
ANY11C(DivideRow_16_Any_AVX2, DivideRow_16_AVX2, 2, 2, uint16_t, uint16_t, 31)
1695
#endif
1696
#ifdef HAS_DIVIDEROW_16_NEON
1697
ANY11C(DivideRow_16_Any_NEON, DivideRow_16_NEON, 2, 2, uint16_t, uint16_t, 15)
1698
#endif
1699
#undef ANY11C
1700
1701
// Any 1 to 1 with parameter and shorts.  BPP measures in shorts.
1702
#define ANY11SB(NAMEANY, ANY_SIMD, SBPP, BPP, STYPE, DTYPE, MASK)         \
1703
  void NAMEANY(const STYPE* src_ptr, DTYPE* dst_ptr, int scale, int bias, \
1704
0
               int width) {                                               \
1705
0
    SIMD_ALIGNED(STYPE vin[64]);                                          \
1706
0
    SIMD_ALIGNED(DTYPE vout[64]);                                         \
1707
0
    memset(vin, 0, sizeof(vin)); /* for msan */                           \
1708
0
    int r = width & MASK;                                                 \
1709
0
    int n = width & ~MASK;                                                \
1710
0
    if (n > 0) {                                                          \
1711
0
      ANY_SIMD(src_ptr, dst_ptr, scale, bias, n);                         \
1712
0
    }                                                                     \
1713
0
    ptrdiff_t np = n;                                                     \
1714
0
    memcpy(vin, src_ptr + np, r * SBPP);                                  \
1715
0
    ANY_SIMD(vin, vout, scale, bias, MASK + 1);                           \
1716
0
    memcpy(dst_ptr + np, vout, r * BPP);                                  \
1717
0
  }
1718
1719
#ifdef HAS_CONVERT8TO8ROW_NEON
1720
ANY11SB(Convert8To8Row_Any_NEON,
1721
        Convert8To8Row_NEON,
1722
        1,
1723
        1,
1724
        uint8_t,
1725
        uint8_t,
1726
        31)
1727
#endif
1728
#ifdef HAS_CONVERT8TO8ROW_AVX2
1729
ANY11SB(Convert8To8Row_Any_AVX2,
1730
        Convert8To8Row_AVX2,
1731
        1,
1732
        1,
1733
        uint8_t,
1734
        uint8_t,
1735
        31)
1736
#endif
1737
#undef ANY11B
1738
1739
// Any 1 to 1 with parameter and shorts to byte.  BPP measures in shorts.
1740
#define ANY11P16(NAMEANY, ANY_SIMD, ST, T, SBPP, BPP, MASK)             \
1741
237
  void NAMEANY(const ST* src_ptr, T* dst_ptr, float param, int width) { \
1742
237
    SIMD_ALIGNED(ST vin[32]);                                           \
1743
237
    SIMD_ALIGNED(T vout[32]);                                           \
1744
237
    memset(vin, 0, sizeof(vin)); /* for msan */                         \
1745
237
    int r = width & MASK;                                               \
1746
237
    int n = width & ~MASK;                                              \
1747
237
    if (n > 0) {                                                        \
1748
96
      ANY_SIMD(src_ptr, dst_ptr, param, n);                             \
1749
96
    }                                                                   \
1750
237
    ptrdiff_t np = n;                                                   \
1751
237
    memcpy(vin, src_ptr + np, r * SBPP);                                \
1752
237
    ANY_SIMD(vin, vout, param, MASK + 1);                               \
1753
237
    memcpy(dst_ptr + np, vout, r * BPP);                                \
1754
237
  }
1755
1756
#ifdef HAS_HALFFLOATROW_AVX2
1757
ANY11P16(HalfFloatRow_Any_AVX2, HalfFloatRow_AVX2, uint16_t, uint16_t, 2, 2, 15)
1758
#endif
1759
#ifdef HAS_HALFFLOATROW_F16C
1760
ANY11P16(HalfFloatRow_Any_F16C, HalfFloatRow_F16C, uint16_t, uint16_t, 2, 2, 15)
1761
ANY11P16(HalfFloat1Row_Any_F16C,
1762
         HalfFloat1Row_F16C,
1763
         uint16_t,
1764
         uint16_t,
1765
         2,
1766
         2,
1767
         15)
1768
#endif
1769
#ifdef HAS_HALFFLOATROW_NEON
1770
ANY11P16(HalfFloatRow_Any_NEON, HalfFloatRow_NEON, uint16_t, uint16_t, 2, 2, 15)
1771
#endif
1772
#ifdef HAS_BYTETOFLOATROW_NEON
1773
ANY11P16(ByteToFloatRow_Any_NEON, ByteToFloatRow_NEON, uint8_t, float, 1, 3, 7)
1774
#endif
1775
#ifdef HAS_HALFFLOATROW_LSX
1776
ANY11P16(HalfFloatRow_Any_LSX, HalfFloatRow_LSX, uint16_t, uint16_t, 2, 2, 31)
1777
#endif
1778
#undef ANY11P16
1779
1780
// Any 1 to 1 with yuvconstants
1781
#define ANY11C(NAMEANY, ANY_SIMD, UVSHIFT, SBPP, BPP, MASK)               \
1782
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_ptr,                  \
1783
0
               const struct YuvConstants* yuvconstants, int width) {      \
1784
0
    SIMD_ALIGNED(uint8_t vin[256]);                                       \
1785
0
    SIMD_ALIGNED(uint8_t vout[256]);                                      \
1786
0
    memset(vin, 0, sizeof(vin)); /* for YUY2 and msan */                  \
1787
0
    int r = width & MASK;                                                 \
1788
0
    int n = width & ~MASK;                                                \
1789
0
    if (n > 0) {                                                          \
1790
0
      ANY_SIMD(src_ptr, dst_ptr, yuvconstants, n);                        \
1791
0
    }                                                                     \
1792
0
    ptrdiff_t np = n;                                                     \
1793
0
    memcpy(vin, src_ptr + (np >> UVSHIFT) * SBPP, SS(r, UVSHIFT) * SBPP); \
1794
0
    ANY_SIMD(vin, vout, yuvconstants, MASK + 1);                          \
1795
0
    memcpy(dst_ptr + np * BPP, vout, r * BPP);                            \
1796
0
  }
Unexecuted instantiation: YUY2ToARGBRow_Any_SSSE3
Unexecuted instantiation: UYVYToARGBRow_Any_SSSE3
Unexecuted instantiation: YUY2ToARGBRow_Any_AVX2
Unexecuted instantiation: UYVYToARGBRow_Any_AVX2
1797
1798
#if defined(HAS_YUY2TOARGBROW_SSSE3)
1799
ANY11C(YUY2ToARGBRow_Any_SSSE3, YUY2ToARGBRow_SSSE3, 1, 4, 4, 15)
1800
ANY11C(UYVYToARGBRow_Any_SSSE3, UYVYToARGBRow_SSSE3, 1, 4, 4, 15)
1801
#endif
1802
#if defined(HAS_YUY2TOARGBROW_AVX2)
1803
ANY11C(YUY2ToARGBRow_Any_AVX2, YUY2ToARGBRow_AVX2, 1, 4, 4, 31)
1804
ANY11C(UYVYToARGBRow_Any_AVX2, UYVYToARGBRow_AVX2, 1, 4, 4, 31)
1805
#endif
1806
#if defined(HAS_YUY2TOARGBROW_NEON)
1807
ANY11C(YUY2ToARGBRow_Any_NEON, YUY2ToARGBRow_NEON, 1, 4, 4, 7)
1808
ANY11C(UYVYToARGBRow_Any_NEON, UYVYToARGBRow_NEON, 1, 4, 4, 7)
1809
#endif
1810
#if defined(HAS_YUY2TOARGBROW_LSX)
1811
ANY11C(YUY2ToARGBRow_Any_LSX, YUY2ToARGBRow_LSX, 1, 4, 4, 7)
1812
ANY11C(UYVYToARGBRow_Any_LSX, UYVYToARGBRow_LSX, 1, 4, 4, 7)
1813
#endif
1814
#undef ANY11C
1815
1816
// Any 1 to 1 interpolate.  Takes 2 rows of source via stride.
1817
#define ANY11I(NAMEANY, ANY_SIMD, TD, TS, SBPP, BPP, MASK)           \
1818
  void NAMEANY(TD* dst_ptr, const TS* src_ptr, ptrdiff_t src_stride, \
1819
5.95M
               int width, int source_y_fraction) {                   \
1820
5.95M
    SIMD_ALIGNED(TS vin[64 * 2]);                                    \
1821
5.95M
    SIMD_ALIGNED(TD vout[64]);                                       \
1822
5.95M
    memset(vin, 0, sizeof(vin)); /* for msan */                      \
1823
5.95M
    int r = width & MASK;                                            \
1824
5.95M
    int n = width & ~MASK;                                           \
1825
5.95M
    if (n > 0) {                                                     \
1826
2.75M
      ANY_SIMD(dst_ptr, src_ptr, src_stride, n, source_y_fraction);  \
1827
2.75M
    }                                                                \
1828
5.95M
    ptrdiff_t np = n;                                                \
1829
5.95M
    memcpy(vin, src_ptr + np * SBPP, r * SBPP * sizeof(TS));         \
1830
5.95M
    if (source_y_fraction) {                                         \
1831
3.86M
      memcpy(vin + 64, src_ptr + src_stride + np * SBPP,             \
1832
3.86M
             r * SBPP * sizeof(TS));                                 \
1833
3.86M
    }                                                                \
1834
5.95M
    ANY_SIMD(vout, vin, 64, MASK + 1, source_y_fraction);            \
1835
5.95M
    memcpy(dst_ptr + np * BPP, vout, r * BPP * sizeof(TD));          \
1836
5.95M
  }
InterpolateRow_Any_AVX2
Line
Count
Source
1819
2.54M
               int width, int source_y_fraction) {                   \
1820
2.54M
    SIMD_ALIGNED(TS vin[64 * 2]);                                    \
1821
2.54M
    SIMD_ALIGNED(TD vout[64]);                                       \
1822
2.54M
    memset(vin, 0, sizeof(vin)); /* for msan */                      \
1823
2.54M
    int r = width & MASK;                                            \
1824
2.54M
    int n = width & ~MASK;                                           \
1825
2.54M
    if (n > 0) {                                                     \
1826
797k
      ANY_SIMD(dst_ptr, src_ptr, src_stride, n, source_y_fraction);  \
1827
797k
    }                                                                \
1828
2.54M
    ptrdiff_t np = n;                                                \
1829
2.54M
    memcpy(vin, src_ptr + np * SBPP, r * SBPP * sizeof(TS));         \
1830
2.54M
    if (source_y_fraction) {                                         \
1831
1.50M
      memcpy(vin + 64, src_ptr + src_stride + np * SBPP,             \
1832
1.50M
             r * SBPP * sizeof(TS));                                 \
1833
1.50M
    }                                                                \
1834
2.54M
    ANY_SIMD(vout, vin, 64, MASK + 1, source_y_fraction);            \
1835
2.54M
    memcpy(dst_ptr + np * BPP, vout, r * BPP * sizeof(TD));          \
1836
2.54M
  }
InterpolateRow_16_Any_AVX2
Line
Count
Source
1819
3.40M
               int width, int source_y_fraction) {                   \
1820
3.40M
    SIMD_ALIGNED(TS vin[64 * 2]);                                    \
1821
3.40M
    SIMD_ALIGNED(TD vout[64]);                                       \
1822
3.40M
    memset(vin, 0, sizeof(vin)); /* for msan */                      \
1823
3.40M
    int r = width & MASK;                                            \
1824
3.40M
    int n = width & ~MASK;                                           \
1825
3.40M
    if (n > 0) {                                                     \
1826
1.95M
      ANY_SIMD(dst_ptr, src_ptr, src_stride, n, source_y_fraction);  \
1827
1.95M
    }                                                                \
1828
3.40M
    ptrdiff_t np = n;                                                \
1829
3.40M
    memcpy(vin, src_ptr + np * SBPP, r * SBPP * sizeof(TS));         \
1830
3.40M
    if (source_y_fraction) {                                         \
1831
2.35M
      memcpy(vin + 64, src_ptr + src_stride + np * SBPP,             \
1832
2.35M
             r * SBPP * sizeof(TS));                                 \
1833
2.35M
    }                                                                \
1834
3.40M
    ANY_SIMD(vout, vin, 64, MASK + 1, source_y_fraction);            \
1835
3.40M
    memcpy(dst_ptr + np * BPP, vout, r * BPP * sizeof(TD));          \
1836
3.40M
  }
1837
1838
#if defined(HAS_INTERPOLATEROW_AVX2)
1839
ANY11I(InterpolateRow_Any_AVX2, InterpolateRow_AVX2, uint8_t, uint8_t, 1, 1, 31)
1840
#endif
1841
#ifdef HAS_INTERPOLATEROW_NEON
1842
ANY11I(InterpolateRow_Any_NEON, InterpolateRow_NEON, uint8_t, uint8_t, 1, 1, 15)
1843
#endif
1844
#ifdef HAS_INTERPOLATEROW_LSX
1845
ANY11I(InterpolateRow_Any_LSX, InterpolateRow_LSX, uint8_t, uint8_t, 1, 1, 31)
1846
#endif
1847
1848
#ifdef HAS_INTERPOLATEROW_16_NEON
1849
ANY11I(InterpolateRow_16_Any_NEON,
1850
       InterpolateRow_16_NEON,
1851
       uint16_t,
1852
       uint16_t,
1853
       1,
1854
       1,
1855
       7)
1856
#endif
1857
#ifdef HAS_INTERPOLATEROW_16_AVX2
1858
ANY11I(InterpolateRow_16_Any_AVX2,
1859
       InterpolateRow_16_AVX2,
1860
       uint16_t,
1861
       uint16_t,
1862
       1,
1863
       1,
1864
       15)
1865
#endif
1866
#undef ANY11I
1867
1868
// Any 1 to 1 interpolate with scale param
1869
#define ANY11IS(NAMEANY, ANY_SIMD, TD, TS, SBPP, BPP, MASK)                \
1870
  void NAMEANY(TD* dst_ptr, const TS* src_ptr, ptrdiff_t src_stride,       \
1871
0
               int scale, int width, int source_y_fraction) {              \
1872
0
    SIMD_ALIGNED(TS vin[64 * 2]);                                          \
1873
0
    SIMD_ALIGNED(TD vout[64]);                                             \
1874
0
    memset(vin, 0, sizeof(vin)); /* for msan */                            \
1875
0
    int r = width & MASK;                                                  \
1876
0
    int n = width & ~MASK;                                                 \
1877
0
    if (n > 0) {                                                           \
1878
0
      ANY_SIMD(dst_ptr, src_ptr, src_stride, scale, n, source_y_fraction); \
1879
0
    }                                                                      \
1880
0
    ptrdiff_t np = n;                                                      \
1881
0
    memcpy(vin, src_ptr + np * SBPP, r * SBPP * sizeof(TS));               \
1882
0
    if (source_y_fraction) {                                               \
1883
0
      memcpy(vin + 64, src_ptr + src_stride + np * SBPP,                   \
1884
0
             r * SBPP * sizeof(TS));                                       \
1885
0
    }                                                                      \
1886
0
    ANY_SIMD(vout, vin, 64, scale, MASK + 1, source_y_fraction);           \
1887
0
    memcpy(dst_ptr + np * BPP, vout, r * BPP * sizeof(TD));                \
1888
0
  }
1889
1890
#ifdef HAS_INTERPOLATEROW_16TO8_NEON
1891
ANY11IS(InterpolateRow_16To8_Any_NEON,
1892
        InterpolateRow_16To8_NEON,
1893
        uint8_t,
1894
        uint16_t,
1895
        1,
1896
        1,
1897
        7)
1898
#endif
1899
#ifdef HAS_INTERPOLATEROW_16TO8_AVX2
1900
ANY11IS(InterpolateRow_16To8_Any_AVX2,
1901
        InterpolateRow_16To8_AVX2,
1902
        uint8_t,
1903
        uint16_t,
1904
        1,
1905
        1,
1906
        31)
1907
#endif
1908
1909
#undef ANY11IS
1910
1911
// Any 1 to 1 mirror.
1912
#define ANY11M(NAMEANY, ANY_SIMD, BPP, MASK)                          \
1913
0
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_ptr, int width) { \
1914
0
    SIMD_ALIGNED(uint8_t vin[128]);                                   \
1915
0
    SIMD_ALIGNED(uint8_t vout[128]);                                  \
1916
0
    memset(vin, 0, sizeof(vin)); /* for msan */                       \
1917
0
    int r = width & MASK;                                             \
1918
0
    int n = width & ~MASK;                                            \
1919
0
    if (n > 0) {                                                      \
1920
0
      ANY_SIMD(src_ptr + r * BPP, dst_ptr, n);                        \
1921
0
    }                                                                 \
1922
0
    ptrdiff_t np = n;                                                 \
1923
0
    memcpy(vin, src_ptr, r * BPP);                                    \
1924
0
    ANY_SIMD(vin, vout, MASK + 1);                                    \
1925
0
    memcpy(dst_ptr + np * BPP, vout + (MASK + 1 - r) * BPP, r * BPP); \
1926
0
  }
Unexecuted instantiation: MirrorRow_Any_AVX512BW
Unexecuted instantiation: MirrorRow_Any_AVX2
Unexecuted instantiation: MirrorRow_Any_SSSE3
Unexecuted instantiation: MirrorUVRow_Any_AVX2
Unexecuted instantiation: ARGBMirrorRow_Any_AVX2
Unexecuted instantiation: ARGBMirrorRow_Any_SSE2
Unexecuted instantiation: RGB24MirrorRow_Any_AVX2
1927
1928
#ifdef HAS_MIRRORROW_AVX512BW
1929
ANY11M(MirrorRow_Any_AVX512BW, MirrorRow_AVX512BW, 1, 63)
1930
#endif
1931
#ifdef HAS_MIRRORROW_AVX2
1932
ANY11M(MirrorRow_Any_AVX2, MirrorRow_AVX2, 1, 31)
1933
#endif
1934
#ifdef HAS_MIRRORROW_SSSE3
1935
ANY11M(MirrorRow_Any_SSSE3, MirrorRow_SSSE3, 1, 15)
1936
#endif
1937
#ifdef HAS_MIRRORROW_NEON
1938
ANY11M(MirrorRow_Any_NEON, MirrorRow_NEON, 1, 31)
1939
#endif
1940
#ifdef HAS_MIRRORROW_LSX
1941
ANY11M(MirrorRow_Any_LSX, MirrorRow_LSX, 1, 31)
1942
#endif
1943
#ifdef HAS_MIRRORROW_LASX
1944
ANY11M(MirrorRow_Any_LASX, MirrorRow_LASX, 1, 63)
1945
#endif
1946
#ifdef HAS_MIRRORUVROW_AVX2
1947
ANY11M(MirrorUVRow_Any_AVX2, MirrorUVRow_AVX2, 2, 15)
1948
#endif
1949
#ifdef HAS_MIRRORUVROW_NEON
1950
ANY11M(MirrorUVRow_Any_NEON, MirrorUVRow_NEON, 2, 31)
1951
#endif
1952
#ifdef HAS_MIRRORUVROW_LSX
1953
ANY11M(MirrorUVRow_Any_LSX, MirrorUVRow_LSX, 2, 7)
1954
#endif
1955
#ifdef HAS_MIRRORUVROW_LASX
1956
ANY11M(MirrorUVRow_Any_LASX, MirrorUVRow_LASX, 2, 15)
1957
#endif
1958
#ifdef HAS_ARGBMIRRORROW_AVX2
1959
ANY11M(ARGBMirrorRow_Any_AVX2, ARGBMirrorRow_AVX2, 4, 7)
1960
#endif
1961
#ifdef HAS_ARGBMIRRORROW_SSE2
1962
ANY11M(ARGBMirrorRow_Any_SSE2, ARGBMirrorRow_SSE2, 4, 3)
1963
#endif
1964
#ifdef HAS_ARGBMIRRORROW_NEON
1965
ANY11M(ARGBMirrorRow_Any_NEON, ARGBMirrorRow_NEON, 4, 7)
1966
#endif
1967
#ifdef HAS_ARGBMIRRORROW_LSX
1968
ANY11M(ARGBMirrorRow_Any_LSX, ARGBMirrorRow_LSX, 4, 7)
1969
#endif
1970
#ifdef HAS_ARGBMIRRORROW_LASX
1971
ANY11M(ARGBMirrorRow_Any_LASX, ARGBMirrorRow_LASX, 4, 15)
1972
#endif
1973
#ifdef HAS_RGB24MIRRORROW_AVX2
1974
ANY11M(RGB24MirrorRow_Any_AVX2, RGB24MirrorRow_AVX2, 3, 31)
1975
#endif
1976
#ifdef HAS_RGB24MIRRORROW_NEON
1977
ANY11M(RGB24MirrorRow_Any_NEON, RGB24MirrorRow_NEON, 3, 15)
1978
#endif
1979
#undef ANY11M
1980
1981
// Any 1 plane. (memset)
1982
#define ANY1(NAMEANY, ANY_SIMD, T, BPP, MASK)        \
1983
0
  void NAMEANY(uint8_t* dst_ptr, T v32, int width) { \
1984
0
    SIMD_ALIGNED(uint8_t vout[64]);                  \
1985
0
    int r = width & MASK;                            \
1986
0
    int n = width & ~MASK;                           \
1987
0
    if (n > 0) {                                     \
1988
0
      ANY_SIMD(dst_ptr, v32, n);                     \
1989
0
    }                                                \
1990
0
    ptrdiff_t np = n;                                \
1991
0
    ANY_SIMD(vout, v32, MASK + 1);                   \
1992
0
    memcpy(dst_ptr + np * BPP, vout, r * BPP);       \
1993
0
  }
1994
1995
#ifdef HAS_SETROW_X86
1996
ANY1(SetRow_Any_X86, SetRow_X86, uint8_t, 1, 3)
1997
#endif
1998
#ifdef HAS_SETROW_NEON
1999
ANY1(SetRow_Any_NEON, SetRow_NEON, uint8_t, 1, 15)
2000
#endif
2001
#ifdef HAS_SETROW_LSX
2002
ANY1(SetRow_Any_LSX, SetRow_LSX, uint8_t, 1, 15)
2003
#endif
2004
#ifdef HAS_ARGBSETROW_NEON
2005
ANY1(ARGBSetRow_Any_NEON, ARGBSetRow_NEON, uint32_t, 4, 3)
2006
#endif
2007
#ifdef HAS_ARGBSETROW_LSX
2008
ANY1(ARGBSetRow_Any_LSX, ARGBSetRow_LSX, uint32_t, 4, 3)
2009
#endif
2010
#undef ANY1
2011
2012
// Any 1 to 2.  Outputs UV planes.
2013
#define ANY12(NAMEANY, ANY_SIMD, UVSHIFT, BPP, DUVSHIFT, MASK)          \
2014
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_u, uint8_t* dst_v,  \
2015
0
               int width) {                                             \
2016
0
    SIMD_ALIGNED(uint8_t vin[256]);                                     \
2017
0
    SIMD_ALIGNED(uint8_t vout[256 * 2]);                                \
2018
0
    memset(vin, 0, sizeof(vin)); /* for msan */                         \
2019
0
    int r = width & MASK;                                               \
2020
0
    int n = width & ~MASK;                                              \
2021
0
    if (n > 0) {                                                        \
2022
0
      ANY_SIMD(src_ptr, dst_u, dst_v, n);                               \
2023
0
    }                                                                   \
2024
0
    ptrdiff_t np = n;                                                   \
2025
0
    memcpy(vin, src_ptr + (np >> UVSHIFT) * BPP, SS(r, UVSHIFT) * BPP); \
2026
0
    ANY_SIMD(vin, vout, vout + 256, MASK + 1);                          \
2027
0
    memcpy(dst_u + (np >> DUVSHIFT), vout, SS(r, DUVSHIFT));            \
2028
0
    memcpy(dst_v + (np >> DUVSHIFT), vout + 256, SS(r, DUVSHIFT));      \
2029
0
  }
Unexecuted instantiation: SplitUVRow_Any_SSE2
Unexecuted instantiation: SplitUVRow_Any_AVX512BW
Unexecuted instantiation: SplitUVRow_Any_AVX2
Unexecuted instantiation: ARGBToUV444Row_Any_SSSE3
Unexecuted instantiation: ARGBToUVJ444Row_Any_SSSE3
Unexecuted instantiation: ARGBToUV444Row_Any_AVX2
Unexecuted instantiation: ARGBToUV444Row_Any_AVX512BW
Unexecuted instantiation: ARGBToUVJ444Row_Any_AVX2
Unexecuted instantiation: ARGBToUVJ444Row_Any_AVX512BW
Unexecuted instantiation: YUY2ToUV422Row_Any_AVX2
Unexecuted instantiation: UYVYToUV422Row_Any_AVX2
Unexecuted instantiation: YUY2ToUV422Row_Any_SSE2
Unexecuted instantiation: UYVYToUV422Row_Any_SSE2
2030
2031
#ifdef HAS_SPLITUVROW_SSE2
2032
ANY12(SplitUVRow_Any_SSE2, SplitUVRow_SSE2, 0, 2, 0, 15)
2033
#endif
2034
#ifdef HAS_SPLITUVROW_AVX512BW
2035
ANY12(SplitUVRow_Any_AVX512BW, SplitUVRow_AVX512BW, 0, 2, 0, 63)
2036
#endif
2037
#ifdef HAS_SPLITUVROW_AVX2
2038
ANY12(SplitUVRow_Any_AVX2, SplitUVRow_AVX2, 0, 2, 0, 31)
2039
#endif
2040
#ifdef HAS_SPLITUVROW_NEON
2041
ANY12(SplitUVRow_Any_NEON, SplitUVRow_NEON, 0, 2, 0, 15)
2042
#endif
2043
#ifdef HAS_SPLITUVROW_LSX
2044
ANY12(SplitUVRow_Any_LSX, SplitUVRow_LSX, 0, 2, 0, 31)
2045
#endif
2046
#ifdef HAS_ARGBTOUV444ROW_SSSE3
2047
ANY12(ARGBToUV444Row_Any_SSSE3, ARGBToUV444Row_SSSE3, 0, 4, 0, 15)
2048
#endif
2049
#ifdef HAS_ARGBTOUVJ444ROW_SSSE3
2050
ANY12(ARGBToUVJ444Row_Any_SSSE3, ARGBToUVJ444Row_SSSE3, 0, 4, 0, 15)
2051
#endif
2052
#ifdef HAS_ARGBTOUV444ROW_AVX2
2053
ANY12(ARGBToUV444Row_Any_AVX2, ARGBToUV444Row_AVX2, 0, 4, 0, 31)
2054
#endif
2055
#ifdef HAS_ARGBTOUV444ROW_AVX512BW
2056
ANY12(ARGBToUV444Row_Any_AVX512BW, ARGBToUV444Row_AVX512BW, 0, 4, 0, 63)
2057
#endif
2058
#ifdef HAS_ARGBTOUVJ444ROW_AVX2
2059
ANY12(ARGBToUVJ444Row_Any_AVX2, ARGBToUVJ444Row_AVX2, 0, 4, 0, 31)
2060
#endif
2061
#ifdef HAS_ARGBTOUVJ444ROW_AVX512BW
2062
ANY12(ARGBToUVJ444Row_Any_AVX512BW, ARGBToUVJ444Row_AVX512BW, 0, 4, 0, 63)
2063
#endif
2064
#ifdef HAS_YUY2TOUV422ROW_AVX2
2065
ANY12(YUY2ToUV422Row_Any_AVX2, YUY2ToUV422Row_AVX2, 1, 4, 1, 31)
2066
ANY12(UYVYToUV422Row_Any_AVX2, UYVYToUV422Row_AVX2, 1, 4, 1, 31)
2067
#endif
2068
#ifdef HAS_YUY2TOUV422ROW_SSE2
2069
ANY12(YUY2ToUV422Row_Any_SSE2, YUY2ToUV422Row_SSE2, 1, 4, 1, 15)
2070
ANY12(UYVYToUV422Row_Any_SSE2, UYVYToUV422Row_SSE2, 1, 4, 1, 15)
2071
#endif
2072
#ifdef HAS_YUY2TOUV422ROW_NEON
2073
ANY12(ARGBToUV444Row_Any_NEON, ARGBToUV444Row_NEON, 0, 4, 0, 7)
2074
ANY12(ARGBToUVJ444Row_Any_NEON, ARGBToUVJ444Row_NEON, 0, 4, 0, 7)
2075
ANY12(YUY2ToUV422Row_Any_NEON, YUY2ToUV422Row_NEON, 1, 4, 1, 15)
2076
ANY12(UYVYToUV422Row_Any_NEON, UYVYToUV422Row_NEON, 1, 4, 1, 15)
2077
#endif
2078
#ifdef HAS_ARGBTOUV444ROW_NEON_I8MM
2079
ANY12(ARGBToUV444Row_Any_NEON_I8MM, ARGBToUV444Row_NEON_I8MM, 0, 4, 0, 7)
2080
ANY12(ARGBToUVJ444Row_Any_NEON_I8MM, ARGBToUVJ444Row_NEON_I8MM, 0, 4, 0, 7)
2081
#endif
2082
#ifdef HAS_YUY2TOUV422ROW_LSX
2083
ANY12(ARGBToUV444Row_Any_LSX, ARGBToUV444Row_LSX, 0, 4, 0, 15)
2084
ANY12(YUY2ToUV422Row_Any_LSX, YUY2ToUV422Row_LSX, 1, 4, 1, 15)
2085
ANY12(UYVYToUV422Row_Any_LSX, UYVYToUV422Row_LSX, 1, 4, 1, 15)
2086
#endif
2087
#ifdef HAS_YUY2TOUV422ROW_LASX
2088
ANY12(ARGBToUV444Row_Any_LASX, ARGBToUV444Row_LASX, 0, 4, 0, 31)
2089
ANY12(YUY2ToUV422Row_Any_LASX, YUY2ToUV422Row_LASX, 1, 4, 1, 31)
2090
ANY12(UYVYToUV422Row_Any_LASX, UYVYToUV422Row_LASX, 1, 4, 1, 31)
2091
#endif
2092
#undef ANY12
2093
2094
// Any 2 16 bit planes with parameter to 1
2095
#define ANY12PT(NAMEANY, ANY_SIMD, T, BPP, MASK)                            \
2096
0
  void NAMEANY(const T* src_uv, T* dst_u, T* dst_v, int depth, int width) { \
2097
0
    SIMD_ALIGNED(T vin[16 * 2]);                                            \
2098
0
    SIMD_ALIGNED(T vout[16 * 2]);                                           \
2099
0
    memset(vin, 0, sizeof(vin)); /* for msan */                             \
2100
0
    int r = width & MASK;                                                   \
2101
0
    int n = width & ~MASK;                                                  \
2102
0
    if (n > 0) {                                                            \
2103
0
      ANY_SIMD(src_uv, dst_u, dst_v, depth, n);                             \
2104
0
    }                                                                       \
2105
0
    ptrdiff_t np = n;                                                       \
2106
0
    memcpy(vin, src_uv + np * 2, r * BPP * 2);                              \
2107
0
    ANY_SIMD(vin, vout, vout + 16, depth, MASK + 1);                        \
2108
0
    memcpy(dst_u + np, vout, r * BPP);                                      \
2109
0
    memcpy(dst_v + np, vout + 16, r * BPP);                                 \
2110
0
  }
2111
2112
#ifdef HAS_SPLITUVROW_16_AVX2
2113
ANY12PT(SplitUVRow_16_Any_AVX2, SplitUVRow_16_AVX2, uint16_t, 2, 15)
2114
#endif
2115
2116
#ifdef HAS_SPLITUVROW_16_NEON
2117
ANY12PT(SplitUVRow_16_Any_NEON, SplitUVRow_16_NEON, uint16_t, 2, 7)
2118
#endif
2119
2120
#undef ANY21CT
2121
2122
// Any 1 to 3.  Outputs RGB planes.
2123
#define ANY13(NAMEANY, ANY_SIMD, BPP, MASK)                            \
2124
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_r, uint8_t* dst_g, \
2125
0
               uint8_t* dst_b, int width) {                            \
2126
0
    SIMD_ALIGNED(uint8_t vin[16 * 3]);                                 \
2127
0
    SIMD_ALIGNED(uint8_t vout[16 * 3]);                                \
2128
0
    memset(vin, 0, sizeof(vin)); /* for msan */                        \
2129
0
    int r = width & MASK;                                              \
2130
0
    int n = width & ~MASK;                                             \
2131
0
    if (n > 0) {                                                       \
2132
0
      ANY_SIMD(src_ptr, dst_r, dst_g, dst_b, n);                       \
2133
0
    }                                                                  \
2134
0
    ptrdiff_t np = n;                                                  \
2135
0
    memcpy(vin, src_ptr + np * BPP, r * BPP);                          \
2136
0
    ANY_SIMD(vin, vout, vout + 16, vout + 32, MASK + 1);               \
2137
0
    memcpy(dst_r + np, vout, r);                                       \
2138
0
    memcpy(dst_g + np, vout + 16, r);                                  \
2139
0
    memcpy(dst_b + np, vout + 32, r);                                  \
2140
0
  }
Unexecuted instantiation: SplitRGBRow_Any_SSSE3
Unexecuted instantiation: SplitRGBRow_Any_SSE41
Unexecuted instantiation: SplitRGBRow_Any_AVX2
Unexecuted instantiation: SplitXRGBRow_Any_SSE2
Unexecuted instantiation: SplitXRGBRow_Any_SSSE3
Unexecuted instantiation: SplitXRGBRow_Any_AVX2
2141
2142
#ifdef HAS_SPLITRGBROW_SSSE3
2143
ANY13(SplitRGBRow_Any_SSSE3, SplitRGBRow_SSSE3, 3, 15)
2144
#endif
2145
#ifdef HAS_SPLITRGBROW_SSE41
2146
ANY13(SplitRGBRow_Any_SSE41, SplitRGBRow_SSE41, 3, 15)
2147
#endif
2148
#ifdef HAS_SPLITRGBROW_AVX2
2149
ANY13(SplitRGBRow_Any_AVX2, SplitRGBRow_AVX2, 3, 31)
2150
#endif
2151
#ifdef HAS_SPLITRGBROW_NEON
2152
ANY13(SplitRGBRow_Any_NEON, SplitRGBRow_NEON, 3, 15)
2153
#endif
2154
#ifdef HAS_SPLITXRGBROW_SSE2
2155
ANY13(SplitXRGBRow_Any_SSE2, SplitXRGBRow_SSE2, 4, 7)
2156
#endif
2157
#ifdef HAS_SPLITXRGBROW_SSSE3
2158
ANY13(SplitXRGBRow_Any_SSSE3, SplitXRGBRow_SSSE3, 4, 7)
2159
#endif
2160
#ifdef HAS_SPLITXRGBROW_AVX2
2161
ANY13(SplitXRGBRow_Any_AVX2, SplitXRGBRow_AVX2, 4, 15)
2162
#endif
2163
#ifdef HAS_SPLITXRGBROW_NEON
2164
ANY13(SplitXRGBRow_Any_NEON, SplitXRGBRow_NEON, 4, 15)
2165
#endif
2166
2167
// Any 1 to 4.  Outputs ARGB planes.
2168
#define ANY14(NAMEANY, ANY_SIMD, BPP, MASK)                            \
2169
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_r, uint8_t* dst_g, \
2170
0
               uint8_t* dst_b, uint8_t* dst_a, int width) {            \
2171
0
    SIMD_ALIGNED(uint8_t vin[16 * 4]);                                 \
2172
0
    SIMD_ALIGNED(uint8_t vout[16 * 4]);                                \
2173
0
    memset(vin, 0, sizeof(vin)); /* for msan */                        \
2174
0
    int r = width & MASK;                                              \
2175
0
    int n = width & ~MASK;                                             \
2176
0
    if (n > 0) {                                                       \
2177
0
      ANY_SIMD(src_ptr, dst_r, dst_g, dst_b, dst_a, n);                \
2178
0
    }                                                                  \
2179
0
    ptrdiff_t np = n;                                                  \
2180
0
    memcpy(vin, src_ptr + np * BPP, r * BPP);                          \
2181
0
    ANY_SIMD(vin, vout, vout + 16, vout + 32, vout + 48, MASK + 1);    \
2182
0
    memcpy(dst_r + np, vout, r);                                       \
2183
0
    memcpy(dst_g + np, vout + 16, r);                                  \
2184
0
    memcpy(dst_b + np, vout + 32, r);                                  \
2185
0
    memcpy(dst_a + np, vout + 48, r);                                  \
2186
0
  }
Unexecuted instantiation: SplitARGBRow_Any_SSE2
Unexecuted instantiation: SplitARGBRow_Any_SSSE3
Unexecuted instantiation: SplitARGBRow_Any_AVX2
2187
2188
#ifdef HAS_SPLITARGBROW_SSE2
2189
ANY14(SplitARGBRow_Any_SSE2, SplitARGBRow_SSE2, 4, 7)
2190
#endif
2191
#ifdef HAS_SPLITARGBROW_SSSE3
2192
ANY14(SplitARGBRow_Any_SSSE3, SplitARGBRow_SSSE3, 4, 7)
2193
#endif
2194
#ifdef HAS_SPLITARGBROW_AVX2
2195
ANY14(SplitARGBRow_Any_AVX2, SplitARGBRow_AVX2, 4, 15)
2196
#endif
2197
#ifdef HAS_SPLITARGBROW_NEON
2198
ANY14(SplitARGBRow_Any_NEON, SplitARGBRow_NEON, 4, 15)
2199
#endif
2200
2201
// Any 1 to 2 with source stride (2 rows of source).  Outputs UV planes.
2202
// 128 byte row allows for 32 avx ARGB pixels.
2203
#define ANY12S(NAMEANY, ANY_SIMD, UVSHIFT, BPP, MASK)                        \
2204
  void NAMEANY(const uint8_t* src_ptr, int src_stride, uint8_t* dst_u,       \
2205
0
               uint8_t* dst_v, int width) {                                  \
2206
0
    SIMD_ALIGNED(uint8_t vin[256 * 2]);                                      \
2207
0
    SIMD_ALIGNED(uint8_t vout[256 * 2]);                                     \
2208
0
    memset(vin, 0, sizeof(vin));   /* for msan */                            \
2209
0
    memset(vout, 0, sizeof(vout)); /* for msan */                            \
2210
0
    int r = width & MASK;                                                    \
2211
0
    int n = width & ~MASK;                                                   \
2212
0
    if (n > 0) {                                                             \
2213
0
      ANY_SIMD(src_ptr, src_stride, dst_u, dst_v, n);                        \
2214
0
    }                                                                        \
2215
0
    ptrdiff_t np = n;                                                        \
2216
0
    memcpy(vin, src_ptr + (np >> UVSHIFT) * BPP, SS(r, UVSHIFT) * BPP);      \
2217
0
    memcpy(vin + 256, src_ptr + src_stride + (np >> UVSHIFT) * BPP,          \
2218
0
           SS(r, UVSHIFT) * BPP);                                            \
2219
0
    if ((width & 1) && UVSHIFT == 0) { /* repeat last pixel for subsample */ \
2220
0
      memcpy(vin + SS(r, UVSHIFT) * BPP, vin + SS(r, UVSHIFT) * BPP - BPP,   \
2221
0
             BPP);                                                           \
2222
0
      memcpy(vin + 256 + SS(r, UVSHIFT) * BPP,                               \
2223
0
             vin + 256 + SS(r, UVSHIFT) * BPP - BPP, BPP);                   \
2224
0
    }                                                                        \
2225
0
    ANY_SIMD(vin, 256, vout, vout + 256, MASK + 1);                          \
2226
0
    memcpy(dst_u + (np >> 1), vout, SS(r, 1));                               \
2227
0
    memcpy(dst_v + (np >> 1), vout + 256, SS(r, 1));                         \
2228
0
  }
Unexecuted instantiation: ARGBToUVRow_Any_AVX2
Unexecuted instantiation: ARGBToUVRow_Any_AVX512BW
Unexecuted instantiation: ABGRToUVRow_Any_AVX2
Unexecuted instantiation: ARGBToUVJRow_Any_AVX2
Unexecuted instantiation: ARGBToUVJRow_Any_AVX512BW
Unexecuted instantiation: ABGRToUVJRow_Any_AVX2
Unexecuted instantiation: ARGBToUVJRow_Any_SSSE3
Unexecuted instantiation: ABGRToUVJRow_Any_SSSE3
Unexecuted instantiation: ARGBToUVRow_Any_SSSE3
Unexecuted instantiation: BGRAToUVRow_Any_SSSE3
Unexecuted instantiation: ABGRToUVRow_Any_SSSE3
Unexecuted instantiation: RGBAToUVRow_Any_SSSE3
2229
2230
#define ANY12M(NAMEANY, ANY_SIMD, BPP, MASK)                           \
2231
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_u, uint8_t* dst_v, \
2232
0
               int width, const struct ArgbConstants* c) {             \
2233
0
    SIMD_ALIGNED(uint8_t vin[256]);                                    \
2234
0
    SIMD_ALIGNED(uint8_t vout[256 * 2]);                               \
2235
0
    memset(vin, 0, sizeof(vin)); /* for msan */                        \
2236
0
    int r = width & MASK;                                              \
2237
0
    int n = width & ~MASK;                                             \
2238
0
    if (n > 0) {                                                       \
2239
0
      ANY_SIMD(src_ptr, dst_u, dst_v, n, c);                           \
2240
0
    }                                                                  \
2241
0
    memcpy(vin, src_ptr + (ptrdiff_t)n * BPP, (ptrdiff_t)r * BPP);     \
2242
0
    ANY_SIMD(vin, vout, vout + 256, MASK + 1, c);                      \
2243
0
    memcpy(dst_u + (ptrdiff_t)n, vout, (ptrdiff_t)r);                  \
2244
0
    memcpy(dst_v + (ptrdiff_t)n, vout + 256, (ptrdiff_t)r);            \
2245
0
  }
Unexecuted instantiation: ARGBToUV444MatrixRow_Any_AVX2
Unexecuted instantiation: ARGBToUV444MatrixRow_Any_AVX512BW
Unexecuted instantiation: ARGBToUV444MatrixRow_Any_SSSE3
2246
2247
#define ANY12MS(NAMEANY, ANY_SIMD, UVSHIFT, BPP, MASK)                       \
2248
  void NAMEANY(const uint8_t* src_ptr, int src_stride, uint8_t* dst_u,       \
2249
0
               uint8_t* dst_v, int width, const struct ArgbConstants* c) {   \
2250
0
    SIMD_ALIGNED(uint8_t vin[256 * 2]);                                      \
2251
0
    SIMD_ALIGNED(uint8_t vout[256 * 2]);                                     \
2252
0
    memset(vin, 0, sizeof(vin));   /* for msan */                            \
2253
0
    memset(vout, 0, sizeof(vout)); /* for msan */                            \
2254
0
    int r = width & MASK;                                                    \
2255
0
    int n = width & ~MASK;                                                   \
2256
0
    if (n > 0) {                                                             \
2257
0
      ANY_SIMD(src_ptr, src_stride, dst_u, dst_v, n, c);                     \
2258
0
    }                                                                        \
2259
0
    ptrdiff_t np = n;                                                        \
2260
0
    memcpy(vin, src_ptr + (np >> UVSHIFT) * BPP, SS(r, UVSHIFT) * BPP);      \
2261
0
    memcpy(vin + 256, src_ptr + src_stride + (np >> UVSHIFT) * BPP,          \
2262
0
           SS(r, UVSHIFT) * BPP);                                            \
2263
0
    if ((width & 1) && UVSHIFT == 0) { /* repeat last pixel for subsample */ \
2264
0
      memcpy(vin + SS(r, UVSHIFT) * BPP, vin + SS(r, UVSHIFT) * BPP - BPP,   \
2265
0
             BPP);                                                           \
2266
0
      memcpy(vin + 256 + SS(r, UVSHIFT) * BPP,                               \
2267
0
             vin + 256 + SS(r, UVSHIFT) * BPP - BPP, BPP);                   \
2268
0
    }                                                                        \
2269
0
    ANY_SIMD(vin, 256, vout, vout + 256, MASK + 1, c);                       \
2270
0
    memcpy(dst_u + (np >> 1), vout, SS(r, 1));                               \
2271
0
    memcpy(dst_v + (np >> 1), vout + 256, SS(r, 1));                         \
2272
0
  }
Unexecuted instantiation: ARGBToUVMatrixRow_Any_AVX2
Unexecuted instantiation: RGBToUVMatrixRow_Any_AVX2
Unexecuted instantiation: RGB565ToUVMatrixRow_Any_AVX2
Unexecuted instantiation: ARGB1555ToUVMatrixRow_Any_AVX2
Unexecuted instantiation: ARGB4444ToUVMatrixRow_Any_AVX2
Unexecuted instantiation: ARGBToUVMatrixRow_Any_AVX512BW
Unexecuted instantiation: RGBToUVMatrixRow_Any_AVX512BW
Unexecuted instantiation: ARGBToUVMatrixRow_Any_SSSE3
2273
2274
#ifdef HAS_ARGBTOUVMATRIXROW_NEON
2275
ANY12MS(ARGBToUVMatrixRow_Any_NEON, ARGBToUVMatrixRow_NEON, 0, 4, 15)
2276
#endif
2277
#ifdef HAS_ARGBTOUVMATRIXROW_NEON_I8MM
2278
ANY12MS(ARGBToUVMatrixRow_Any_NEON_I8MM, ARGBToUVMatrixRow_NEON_I8MM, 0, 4, 15)
2279
#endif
2280
#ifdef HAS_RGBTOUVMATRIXROW_NEON
2281
ANY12MS(RGBToUVMatrixRow_Any_NEON, RGBToUVMatrixRow_NEON, 0, 3, 15)
2282
#endif
2283
#ifdef HAS_RGB565TOUVMATRIXROW_NEON
2284
ANY12MS(RGB565ToUVMatrixRow_Any_NEON, RGB565ToUVMatrixRow_NEON, 0, 2, 15)
2285
#endif
2286
#ifdef HAS_ARGB1555TOUVMATRIXROW_NEON
2287
ANY12MS(ARGB1555ToUVMatrixRow_Any_NEON, ARGB1555ToUVMatrixRow_NEON, 0, 2, 15)
2288
#endif
2289
#ifdef HAS_ARGB4444TOUVMATRIXROW_NEON
2290
ANY12MS(ARGB4444ToUVMatrixRow_Any_NEON, ARGB4444ToUVMatrixRow_NEON, 0, 2, 15)
2291
#endif
2292
#ifdef HAS_ARGBTOUVMATRIXROW_AVX2
2293
ANY12MS(ARGBToUVMatrixRow_Any_AVX2, ARGBToUVMatrixRow_AVX2, 0, 4, 31)
2294
ANY12MS(RGBToUVMatrixRow_Any_AVX2, RGBToUVMatrixRow_AVX2, 0, 3, 31)
2295
ANY12MS(RGB565ToUVMatrixRow_Any_AVX2, RGB565ToUVMatrixRow_AVX2, 0, 2, 31)
2296
#ifdef HAS_ARGB1555TOARGBROW_AVX2
2297
ANY12MS(ARGB1555ToUVMatrixRow_Any_AVX2, ARGB1555ToUVMatrixRow_AVX2, 0, 2, 31)
2298
#endif
2299
#ifdef HAS_ARGB4444TOARGBROW_AVX2
2300
ANY12MS(ARGB4444ToUVMatrixRow_Any_AVX2, ARGB4444ToUVMatrixRow_AVX2, 0, 2, 31)
2301
#endif
2302
#endif
2303
#ifdef HAS_ARGBTOUVMATRIXROW_AVX512BW
2304
ANY12MS(ARGBToUVMatrixRow_Any_AVX512BW, ARGBToUVMatrixRow_AVX512BW, 0, 4, 63)
2305
#endif
2306
#ifdef HAS_RGBTOUVMATRIXROW_AVX512BW
2307
ANY12MS(RGBToUVMatrixRow_Any_AVX512BW, RGBToUVMatrixRow_AVX512BW, 0, 3, 63)
2308
#endif
2309
#ifdef HAS_ARGBTOUVMATRIXROW_SSSE3
2310
ANY12MS(ARGBToUVMatrixRow_Any_SSSE3, ARGBToUVMatrixRow_SSSE3, 0, 4, 7)
2311
#endif
2312
#ifdef HAS_ARGBTOUV444MATRIXROW_AVX2
2313
ANY12M(ARGBToUV444MatrixRow_Any_AVX2, ARGBToUV444MatrixRow_AVX2, 4, 31)
2314
#endif
2315
#ifdef HAS_ARGBTOUV444MATRIXROW_AVX512BW
2316
ANY12M(ARGBToUV444MatrixRow_Any_AVX512BW, ARGBToUV444MatrixRow_AVX512BW, 4, 63)
2317
#endif
2318
#ifdef HAS_ARGBTOUV444MATRIXROW_SSSE3
2319
ANY12M(ARGBToUV444MatrixRow_Any_SSSE3, ARGBToUV444MatrixRow_SSSE3, 4, 15)
2320
#endif
2321
#ifdef HAS_ARGBTOUV444MATRIXROW_NEON
2322
ANY12M(ARGBToUV444MatrixRow_Any_NEON, ARGBToUV444MatrixRow_NEON, 4, 7)
2323
#endif
2324
2325
#define ANY11MC(NAMEANY, ANY_SIMD, BPP, MASK)                       \
2326
  void NAMEANY(const uint8_t* src_ptr, uint8_t* dst_ptr, int width, \
2327
0
               const struct ArgbConstants* c) {                     \
2328
0
    SIMD_ALIGNED(uint8_t vin[256]);                                 \
2329
0
    SIMD_ALIGNED(uint8_t vout[256]);                                \
2330
0
    memset(vin, 0, sizeof(vin)); /* for msan */                     \
2331
0
    int r = width & MASK;                                           \
2332
0
    int n = width & ~MASK;                                          \
2333
0
    if (n > 0) {                                                    \
2334
0
      ANY_SIMD(src_ptr, dst_ptr, n, c);                             \
2335
0
    }                                                               \
2336
0
    memcpy(vin, src_ptr + (ptrdiff_t)n * BPP, (ptrdiff_t)r * BPP);  \
2337
0
    ANY_SIMD(vin, vout, MASK + 1, c);                               \
2338
0
    memcpy(dst_ptr + (ptrdiff_t)n, vout, (ptrdiff_t)r);             \
2339
0
  }
Unexecuted instantiation: ARGBToYMatrixRow_Any_SSSE3
Unexecuted instantiation: ARGBToYMatrixRow_Any_AVX2
Unexecuted instantiation: RGBToYMatrixRow_Any_AVX2
Unexecuted instantiation: RGB565ToYMatrixRow_Any_AVX2
Unexecuted instantiation: ARGB1555ToYMatrixRow_Any_AVX2
Unexecuted instantiation: ARGB4444ToYMatrixRow_Any_AVX2
Unexecuted instantiation: ARGBToYMatrixRow_Any_AVX512BW
2340
2341
#ifdef HAS_ARGBTOYROW_SSSE3
2342
ANY11MC(ARGBToYMatrixRow_Any_SSSE3, ARGBToYMatrixRow_SSSE3, 4, 15)
2343
#endif
2344
#ifdef HAS_ARGBTOYROW_AVX2
2345
ANY11MC(ARGBToYMatrixRow_Any_AVX2, ARGBToYMatrixRow_AVX2, 4, 31)
2346
ANY11MC(RGBToYMatrixRow_Any_AVX2, RGBToYMatrixRow_AVX2, 3, 31)
2347
ANY11MC(RGB565ToYMatrixRow_Any_AVX2, RGB565ToYMatrixRow_AVX2, 2, 31)
2348
#ifdef HAS_ARGB1555TOYMATRIXROW_AVX2
2349
ANY11MC(ARGB1555ToYMatrixRow_Any_AVX2, ARGB1555ToYMatrixRow_AVX2, 2, 31)
2350
#endif
2351
#ifdef HAS_ARGB4444TOYMATRIXROW_AVX2
2352
ANY11MC(ARGB4444ToYMatrixRow_Any_AVX2, ARGB4444ToYMatrixRow_AVX2, 2, 31)
2353
#endif
2354
#endif
2355
#ifdef HAS_ARGBTOYROW_AVX512BW
2356
ANY11MC(ARGBToYMatrixRow_Any_AVX512BW, ARGBToYMatrixRow_AVX512BW, 4, 63)
2357
#endif
2358
#ifdef HAS_ARGBTOYMATRIXROW_NEON
2359
ANY11MC(ARGBToYMatrixRow_Any_NEON, ARGBToYMatrixRow_NEON, 4, 15)
2360
#endif
2361
#ifdef HAS_ARGBTOYMATRIXROW_NEON_DOTPROD
2362
ANY11MC(ARGBToYMatrixRow_Any_NEON_DotProd, ARGBToYMatrixRow_NEON_DotProd, 4, 15)
2363
#endif
2364
#ifdef HAS_RGBTOYMATRIXROW_NEON
2365
ANY11MC(RGBToYMatrixRow_Any_NEON, RGBToYMatrixRow_NEON, 3, 15)
2366
#endif
2367
#ifdef HAS_RGB565TOYMATRIXROW_NEON
2368
ANY11MC(RGB565ToYMatrixRow_Any_NEON, RGB565ToYMatrixRow_NEON, 2, 15)
2369
#endif
2370
#ifdef HAS_ARGB1555TOYMATRIXROW_NEON
2371
ANY11MC(ARGB1555ToYMatrixRow_Any_NEON, ARGB1555ToYMatrixRow_NEON, 2, 15)
2372
#endif
2373
#ifdef HAS_ARGB4444TOYMATRIXROW_NEON
2374
ANY11MC(ARGB4444ToYMatrixRow_Any_NEON, ARGB4444ToYMatrixRow_NEON, 2, 15)
2375
#endif
2376
#ifdef HAS_ARGBTOYMATRIXROW_LSX
2377
ANY11MC(ARGBToYMatrixRow_Any_LSX, ARGBToYMatrixRow_LSX, 4, 15)
2378
#endif
2379
#ifdef HAS_ARGBTOYMATRIXROW_LASX
2380
ANY11MC(ARGBToYMatrixRow_Any_LASX, ARGBToYMatrixRow_LASX, 4, 31)
2381
#endif
2382
#ifdef HAS_ARGBTOYMATRIXROW_RVV
2383
ANY11MC(ARGBToYMatrixRow_Any_RVV, ARGBToYMatrixRow_RVV, 4, 15)
2384
#endif
2385
#undef ANY11MC
2386
2387
#ifdef HAS_ARGBTOUVROW_AVX2
2388
ANY12S(ARGBToUVRow_Any_AVX2, ARGBToUVRow_AVX2, 0, 4, 31)
2389
#endif
2390
#ifdef HAS_ARGBTOUVROW_AVX512BW
2391
ANY12S(ARGBToUVRow_Any_AVX512BW, ARGBToUVRow_AVX512BW, 0, 4, 63)
2392
#endif
2393
#ifdef HAS_ABGRTOUVROW_AVX2
2394
ANY12S(ABGRToUVRow_Any_AVX2, ABGRToUVRow_AVX2, 0, 4, 31)
2395
#endif
2396
#ifdef HAS_ABGRTOUVROW_AVX512BW
2397
ANY12S(ABGRToUVRow_Any_AVX512BW, ABGRToUVRow_AVX512BW, 0, 4, 63)
2398
#endif
2399
#ifdef HAS_ARGBTOUVJROW_AVX2
2400
ANY12S(ARGBToUVJRow_Any_AVX2, ARGBToUVJRow_AVX2, 0, 4, 31)
2401
#endif
2402
#ifdef HAS_ARGBTOUVJROW_AVX512BW
2403
ANY12S(ARGBToUVJRow_Any_AVX512BW, ARGBToUVJRow_AVX512BW, 0, 4, 63)
2404
#endif
2405
#ifdef HAS_ABGRTOUVJROW_AVX2
2406
ANY12S(ABGRToUVJRow_Any_AVX2, ABGRToUVJRow_AVX2, 0, 4, 31)
2407
#endif
2408
#ifdef HAS_ABGRTOUVJROW_AVX512BW
2409
ANY12S(ABGRToUVJRow_Any_AVX512BW, ABGRToUVJRow_AVX512BW, 0, 4, 63)
2410
#endif
2411
#ifdef HAS_ARGBTOUVJROW_SSSE3
2412
ANY12S(ARGBToUVJRow_Any_SSSE3, ARGBToUVJRow_SSSE3, 0, 4, 15)
2413
#endif
2414
#ifdef HAS_ABGRTOUVJROW_SSSE3
2415
ANY12S(ABGRToUVJRow_Any_SSSE3, ABGRToUVJRow_SSSE3, 0, 4, 15)
2416
#endif
2417
#ifdef HAS_ARGBTOUVROW_SSSE3
2418
ANY12S(ARGBToUVRow_Any_SSSE3, ARGBToUVRow_SSSE3, 0, 4, 15)
2419
ANY12S(BGRAToUVRow_Any_SSSE3, BGRAToUVRow_SSSE3, 0, 4, 15)
2420
ANY12S(ABGRToUVRow_Any_SSSE3, ABGRToUVRow_SSSE3, 0, 4, 15)
2421
ANY12S(RGBAToUVRow_Any_SSSE3, RGBAToUVRow_SSSE3, 0, 4, 15)
2422
#endif
2423
#ifdef HAS_YUY2TOUVROW_AVX2
2424
ANY12S(YUY2ToUVRow_Any_AVX2, YUY2ToUVRow_AVX2, 1, 4, 31)
2425
ANY12S(UYVYToUVRow_Any_AVX2, UYVYToUVRow_AVX2, 1, 4, 31)
2426
#endif
2427
#ifdef HAS_YUY2TOUVROW_SSE2
2428
ANY12S(YUY2ToUVRow_Any_SSE2, YUY2ToUVRow_SSE2, 1, 4, 15)
2429
ANY12S(UYVYToUVRow_Any_SSE2, UYVYToUVRow_SSE2, 1, 4, 15)
2430
#endif
2431
#ifdef HAS_ARGBTOUVROW_NEON
2432
ANY12S(ARGBToUVRow_Any_NEON, ARGBToUVRow_NEON, 0, 4, 15)
2433
#endif
2434
#ifdef HAS_ARGBTOUVROW_NEON_I8MM
2435
ANY12S(ARGBToUVRow_Any_NEON_I8MM, ARGBToUVRow_NEON_I8MM, 0, 4, 15)
2436
#endif
2437
#ifdef HAS_ARGBTOUVROW_SVE2
2438
ANY12S(ARGBToUVRow_Any_SVE2, ARGBToUVRow_SVE2, 0, 4, 1)
2439
#endif
2440
#ifdef HAS_ARGBTOUVROW_SME
2441
ANY12S(ARGBToUVRow_Any_SME, ARGBToUVRow_SME, 0, 4, 1)
2442
#endif
2443
#ifdef HAS_ARGBTOUVROW_LSX
2444
ANY12S(ARGBToUVRow_Any_LSX, ARGBToUVRow_LSX, 0, 4, 15)
2445
#endif
2446
#ifdef HAS_ARGBTOUVROW_LASX
2447
ANY12S(ARGBToUVRow_Any_LASX, ARGBToUVRow_LASX, 0, 4, 31)
2448
#endif
2449
#ifdef HAS_ARGBTOUVJROW_NEON
2450
ANY12S(ARGBToUVJRow_Any_NEON, ARGBToUVJRow_NEON, 0, 4, 15)
2451
#endif
2452
#ifdef HAS_ARGBTOUVJROW_NEON_I8MM
2453
ANY12S(ARGBToUVJRow_Any_NEON_I8MM, ARGBToUVJRow_NEON_I8MM, 0, 4, 15)
2454
#endif
2455
#ifdef HAS_ARGBTOUVJROW_SVE2
2456
ANY12S(ARGBToUVJRow_Any_SVE2, ARGBToUVJRow_SVE2, 0, 4, 1)
2457
#endif
2458
#ifdef HAS_ARGBTOUVJROW_SME
2459
ANY12S(ARGBToUVJRow_Any_SME, ARGBToUVJRow_SME, 0, 4, 1)
2460
#endif
2461
#ifdef HAS_ABGRTOUVJROW_NEON
2462
ANY12S(ABGRToUVJRow_Any_NEON, ABGRToUVJRow_NEON, 0, 4, 15)
2463
#endif
2464
#ifdef HAS_ABGRTOUVJROW_NEON_I8MM
2465
ANY12S(ABGRToUVJRow_Any_NEON_I8MM, ABGRToUVJRow_NEON_I8MM, 0, 4, 15)
2466
#endif
2467
#ifdef HAS_ABGRTOUVJROW_SVE2
2468
ANY12S(ABGRToUVJRow_Any_SVE2, ABGRToUVJRow_SVE2, 0, 4, 1)
2469
#endif
2470
#ifdef HAS_ABGRTOUVJROW_SME
2471
ANY12S(ABGRToUVJRow_Any_SME, ABGRToUVJRow_SME, 0, 4, 1)
2472
#endif
2473
#ifdef HAS_ARGBTOUVJROW_LSX
2474
ANY12S(ARGBToUVJRow_Any_LSX, ARGBToUVJRow_LSX, 0, 4, 15)
2475
#endif
2476
#ifdef HAS_ARGBTOUVJROW_LASX
2477
ANY12S(ARGBToUVJRow_Any_LASX, ARGBToUVJRow_LASX, 0, 4, 31)
2478
#endif
2479
#ifdef HAS_BGRATOUVROW_NEON
2480
ANY12S(BGRAToUVRow_Any_NEON, BGRAToUVRow_NEON, 0, 4, 15)
2481
#endif
2482
#ifdef HAS_BGRATOUVROW_NEON_I8MM
2483
ANY12S(BGRAToUVRow_Any_NEON_I8MM, BGRAToUVRow_NEON_I8MM, 0, 4, 15)
2484
#endif
2485
#ifdef HAS_BGRATOUVROW_SVE2
2486
ANY12S(BGRAToUVRow_Any_SVE2, BGRAToUVRow_SVE2, 0, 4, 1)
2487
#endif
2488
#ifdef HAS_BGRATOUVROW_SME
2489
ANY12S(BGRAToUVRow_Any_SME, BGRAToUVRow_SME, 0, 4, 1)
2490
#endif
2491
#ifdef HAS_BGRATOUVROW_LSX
2492
ANY12S(BGRAToUVRow_Any_LSX, BGRAToUVRow_LSX, 0, 4, 15)
2493
#endif
2494
#ifdef HAS_ABGRTOUVROW_NEON
2495
ANY12S(ABGRToUVRow_Any_NEON, ABGRToUVRow_NEON, 0, 4, 15)
2496
#endif
2497
#ifdef HAS_ABGRTOUVROW_NEON_I8MM
2498
ANY12S(ABGRToUVRow_Any_NEON_I8MM, ABGRToUVRow_NEON_I8MM, 0, 4, 15)
2499
#endif
2500
#ifdef HAS_ABGRTOUVROW_SVE2
2501
ANY12S(ABGRToUVRow_Any_SVE2, ABGRToUVRow_SVE2, 0, 4, 1)
2502
#endif
2503
#ifdef HAS_ABGRTOUVROW_SME
2504
ANY12S(ABGRToUVRow_Any_SME, ABGRToUVRow_SME, 0, 4, 1)
2505
#endif
2506
#ifdef HAS_ABGRTOUVROW_LSX
2507
ANY12S(ABGRToUVRow_Any_LSX, ABGRToUVRow_LSX, 0, 4, 15)
2508
#endif
2509
#ifdef HAS_RGBATOUVROW_NEON
2510
ANY12S(RGBAToUVRow_Any_NEON, RGBAToUVRow_NEON, 0, 4, 15)
2511
#endif
2512
#ifdef HAS_RGBATOUVROW_NEON_I8MM
2513
ANY12S(RGBAToUVRow_Any_NEON_I8MM, RGBAToUVRow_NEON_I8MM, 0, 4, 15)
2514
#endif
2515
#ifdef HAS_RGBATOUVROW_SVE2
2516
ANY12S(RGBAToUVRow_Any_SVE2, RGBAToUVRow_SVE2, 0, 4, 1)
2517
#endif
2518
#ifdef HAS_RGBATOUVROW_SME
2519
ANY12S(RGBAToUVRow_Any_SME, RGBAToUVRow_SME, 0, 4, 1)
2520
#endif
2521
#ifdef HAS_RGBATOUVROW_LSX
2522
ANY12S(RGBAToUVRow_Any_LSX, RGBAToUVRow_LSX, 0, 4, 15)
2523
#endif
2524
#ifdef HAS_RGB24TOUVROW_NEON
2525
ANY12S(RGB24ToUVRow_Any_NEON, RGB24ToUVRow_NEON, 0, 3, 15)
2526
#endif
2527
#ifdef HAS_RGB24TOUVJROW_NEON
2528
ANY12S(RGB24ToUVJRow_Any_NEON, RGB24ToUVJRow_NEON, 0, 3, 15)
2529
#endif
2530
#ifdef HAS_RGB24TOUVROW_LSX
2531
ANY12S(RGB24ToUVRow_Any_LSX, RGB24ToUVRow_LSX, 0, 3, 15)
2532
#endif
2533
#ifdef HAS_RGB24TOUVROW_LASX
2534
ANY12S(RGB24ToUVRow_Any_LASX, RGB24ToUVRow_LASX, 0, 3, 31)
2535
#endif
2536
#ifdef HAS_RAWTOUVROW_NEON
2537
ANY12S(RAWToUVRow_Any_NEON, RAWToUVRow_NEON, 0, 3, 15)
2538
#endif
2539
#ifdef HAS_RAWTOUVJROW_NEON
2540
ANY12S(RAWToUVJRow_Any_NEON, RAWToUVJRow_NEON, 0, 3, 15)
2541
#endif
2542
#ifdef HAS_RAWTOUVROW_LSX
2543
ANY12S(RAWToUVRow_Any_LSX, RAWToUVRow_LSX, 0, 3, 15)
2544
#endif
2545
#ifdef HAS_RAWTOUVROW_LASX
2546
ANY12S(RAWToUVRow_Any_LASX, RAWToUVRow_LASX, 0, 3, 31)
2547
#endif
2548
#ifdef HAS_RGB565TOUVROW_NEON
2549
ANY12S(RGB565ToUVRow_Any_NEON, RGB565ToUVRow_NEON, 0, 2, 15)
2550
#endif
2551
#ifdef HAS_RGB565TOUVROW_LSX
2552
ANY12S(RGB565ToUVRow_Any_LSX, RGB565ToUVRow_LSX, 0, 2, 15)
2553
#endif
2554
#ifdef HAS_RGB565TOUVROW_LASX
2555
ANY12S(RGB565ToUVRow_Any_LASX, RGB565ToUVRow_LASX, 0, 2, 31)
2556
#endif
2557
#ifdef HAS_ARGB1555TOUVROW_NEON
2558
ANY12S(ARGB1555ToUVRow_Any_NEON, ARGB1555ToUVRow_NEON, 0, 2, 15)
2559
#endif
2560
#ifdef HAS_ARGB1555TOUVROW_LSX
2561
ANY12S(ARGB1555ToUVRow_Any_LSX, ARGB1555ToUVRow_LSX, 0, 2, 15)
2562
#endif
2563
#ifdef HAS_ARGB1555TOUVROW_LASX
2564
ANY12S(ARGB1555ToUVRow_Any_LASX, ARGB1555ToUVRow_LASX, 0, 2, 31)
2565
#endif
2566
#ifdef HAS_ARGB4444TOUVROW_NEON
2567
ANY12S(ARGB4444ToUVRow_Any_NEON, ARGB4444ToUVRow_NEON, 0, 2, 15)
2568
#endif
2569
#ifdef HAS_YUY2TOUVROW_NEON
2570
ANY12S(YUY2ToUVRow_Any_NEON, YUY2ToUVRow_NEON, 1, 4, 15)
2571
#endif
2572
#ifdef HAS_UYVYTOUVROW_NEON
2573
ANY12S(UYVYToUVRow_Any_NEON, UYVYToUVRow_NEON, 1, 4, 15)
2574
#endif
2575
#ifdef HAS_YUY2TOUVROW_LSX
2576
ANY12S(YUY2ToUVRow_Any_LSX, YUY2ToUVRow_LSX, 1, 4, 15)
2577
#endif
2578
#ifdef HAS_YUY2TOUVROW_LASX
2579
ANY12S(YUY2ToUVRow_Any_LASX, YUY2ToUVRow_LASX, 1, 4, 31)
2580
#endif
2581
#ifdef HAS_UYVYTOUVROW_LSX
2582
ANY12S(UYVYToUVRow_Any_LSX, UYVYToUVRow_LSX, 1, 4, 15)
2583
#endif
2584
#ifdef HAS_UYVYTOUVROW_LASX
2585
ANY12S(UYVYToUVRow_Any_LASX, UYVYToUVRow_LASX, 1, 4, 31)
2586
#endif
2587
#undef ANY12S
2588
2589
// Any 1 to 1 with source stride (2 rows of source).  Outputs UV plane.
2590
// 128 byte row allows for 32 avx ARGB pixels.
2591
#define ANY11S(NAMEANY, ANY_SIMD, UVSHIFT, BPP, MASK)                        \
2592
  void NAMEANY(const uint8_t* src_ptr, int src_stride, uint8_t* dst_vu,      \
2593
               int width) {                                                  \
2594
    SIMD_ALIGNED(uint8_t vin[128 * 2]);                                      \
2595
    SIMD_ALIGNED(uint8_t vout[128]);                                         \
2596
    memset(vin, 0, sizeof(vin)); /* for msan */                              \
2597
    int r = width & MASK;                                                    \
2598
    int n = width & ~MASK;                                                   \
2599
    if (n > 0) {                                                             \
2600
      ANY_SIMD(src_ptr, src_stride, dst_vu, n);                              \
2601
    }                                                                        \
2602
    ptrdiff_t np = n;                                                        \
2603
    memcpy(vin, src_ptr + (np >> UVSHIFT) * BPP, SS(r, UVSHIFT) * BPP);      \
2604
    memcpy(vin + 128, src_ptr + src_stride + (np >> UVSHIFT) * BPP,          \
2605
           SS(r, UVSHIFT) * BPP);                                            \
2606
    if ((width & 1) && UVSHIFT == 0) { /* repeat last pixel for subsample */ \
2607
      memcpy(vin + SS(r, UVSHIFT) * BPP, vin + SS(r, UVSHIFT) * BPP - BPP,   \
2608
             BPP);                                                           \
2609
      memcpy(vin + 128 + SS(r, UVSHIFT) * BPP,                               \
2610
             vin + 128 + SS(r, UVSHIFT) * BPP - BPP, BPP);                   \
2611
    }                                                                        \
2612
    ANY_SIMD(vin, 128, vout, MASK + 1);                                      \
2613
    memcpy(dst_vu + (np >> 1) * 2, vout, SS(r, 1) * 2);                      \
2614
  }
2615
2616
#ifdef HAS_AYUVTOVUROW_NEON
2617
ANY11S(AYUVToUVRow_Any_NEON, AYUVToUVRow_NEON, 0, 4, 15)
2618
ANY11S(AYUVToVURow_Any_NEON, AYUVToVURow_NEON, 0, 4, 15)
2619
#endif
2620
#ifdef HAS_AYUVTOUVROW_SVE2
2621
ANY11S(AYUVToUVRow_Any_SVE2, AYUVToUVRow_SVE2, 0, 4, 1)
2622
#endif
2623
#ifdef HAS_AYUVTOVUROW_SVE2
2624
ANY11S(AYUVToVURow_Any_SVE2, AYUVToVURow_SVE2, 0, 4, 1)
2625
#endif
2626
#undef ANY11S
2627
2628
#define ANYDETILE(NAMEANY, ANY_SIMD, T, BPP, MASK)                           \
2629
0
  void NAMEANY(const T* src, ptrdiff_t src_tile_stride, T* dst, int width) { \
2630
0
    SIMD_ALIGNED(T vin[16]);                                                 \
2631
0
    SIMD_ALIGNED(T vout[16]);                                                \
2632
0
    memset(vin, 0, sizeof(vin)); /* for msan */                              \
2633
0
    int r = width & MASK;                                                    \
2634
0
    int n = width & ~MASK;                                                   \
2635
0
    if (n > 0) {                                                             \
2636
0
      ANY_SIMD(src, src_tile_stride, dst, n);                                \
2637
0
    }                                                                        \
2638
0
    ptrdiff_t np = n;                                                        \
2639
0
    memcpy(vin, src + (np / 16) * src_tile_stride, r * BPP);                 \
2640
0
    ANY_SIMD(vin, src_tile_stride, vout, MASK + 1);                          \
2641
0
    memcpy(dst + np, vout, r * BPP);                                         \
2642
0
  }
Unexecuted instantiation: DetileRow_Any_SSE2
Unexecuted instantiation: DetileRow_16_Any_SSE2
Unexecuted instantiation: DetileRow_16_Any_AVX
2643
2644
#ifdef HAS_DETILEROW_NEON
2645
ANYDETILE(DetileRow_Any_NEON, DetileRow_NEON, uint8_t, 1, 15)
2646
#endif
2647
#ifdef HAS_DETILEROW_SSE2
2648
ANYDETILE(DetileRow_Any_SSE2, DetileRow_SSE2, uint8_t, 1, 15)
2649
#endif
2650
#ifdef HAS_DETILEROW_16_NEON
2651
ANYDETILE(DetileRow_16_Any_NEON, DetileRow_16_NEON, uint16_t, 2, 15)
2652
#endif
2653
#ifdef HAS_DETILEROW_16_SSE2
2654
ANYDETILE(DetileRow_16_Any_SSE2, DetileRow_16_SSE2, uint16_t, 2, 15)
2655
#endif
2656
#ifdef HAS_DETILEROW_16_AVX
2657
ANYDETILE(DetileRow_16_Any_AVX, DetileRow_16_AVX, uint16_t, 2, 15)
2658
#endif
2659
2660
// DetileSplitUVRow width is in bytes
2661
#define ANYDETILESPLITUV(NAMEANY, ANY_SIMD, MASK)                \
2662
  void NAMEANY(const uint8_t* src_uv, ptrdiff_t src_tile_stride, \
2663
0
               uint8_t* dst_u, uint8_t* dst_v, int width) {      \
2664
0
    SIMD_ALIGNED(uint8_t vin[16]);                               \
2665
0
    SIMD_ALIGNED(uint8_t vout[8 * 2]);                           \
2666
0
    memset(vin, 0, sizeof(vin)); /* for msan */                  \
2667
0
    int r = width & MASK;                                        \
2668
0
    int n = width & ~MASK;                                       \
2669
0
    if (n > 0) {                                                 \
2670
0
      ANY_SIMD(src_uv, src_tile_stride, dst_u, dst_v, n);        \
2671
0
    }                                                            \
2672
0
    ptrdiff_t np = n;                                            \
2673
0
    memcpy(vin, src_uv + (np / 16) * src_tile_stride, r);        \
2674
0
    ANY_SIMD(vin, src_tile_stride, vout, vout + 8, r);           \
2675
0
    memcpy(dst_u + np / 2, vout, (r + 1) / 2);                   \
2676
0
    memcpy(dst_v + np / 2, vout + 8, (r + 1) / 2);               \
2677
0
  }
2678
2679
#ifdef HAS_DETILESPLITUVROW_NEON
2680
ANYDETILESPLITUV(DetileSplitUVRow_Any_NEON, DetileSplitUVRow_NEON, 15)
2681
#endif
2682
#ifdef HAS_DETILESPLITUVROW_SSSE3
2683
ANYDETILESPLITUV(DetileSplitUVRow_Any_SSSE3, DetileSplitUVRow_SSSE3, 15)
2684
#endif
2685
2686
#define ANYDETILEMERGE(NAMEANY, ANY_SIMD, MASK)                                \
2687
  void NAMEANY(const uint8_t* src_y, ptrdiff_t src_y_tile_stride,              \
2688
               const uint8_t* src_uv, ptrdiff_t src_uv_tile_stride,            \
2689
0
               uint8_t* dst_yuy2, int width) {                                 \
2690
0
    SIMD_ALIGNED(uint8_t vin[16 * 2]);                                         \
2691
0
    SIMD_ALIGNED(uint8_t vout[16 * 2]);                                        \
2692
0
    memset(vin, 0, sizeof(vin)); /* for msan */                                \
2693
0
    int r = width & MASK;                                                      \
2694
0
    int n = width & ~MASK;                                                     \
2695
0
    if (n > 0) {                                                               \
2696
0
      ANY_SIMD(src_y, src_y_tile_stride, src_uv, src_uv_tile_stride, dst_yuy2, \
2697
0
               n);                                                             \
2698
0
    }                                                                          \
2699
0
    ptrdiff_t np = n;                                                          \
2700
0
    memcpy(vin, src_y + (np / 16) * src_y_tile_stride, r);                     \
2701
0
    memcpy(vin + 16, src_uv + (np / 16) * src_uv_tile_stride, r);              \
2702
0
    ANY_SIMD(vin, src_y_tile_stride, vin + 16, src_uv_tile_stride, vout, r);   \
2703
0
    memcpy(dst_yuy2 + 2 * np, vout, 2 * r);                                    \
2704
0
  }
2705
2706
#ifdef HAS_DETILETOYUY2_NEON
2707
ANYDETILEMERGE(DetileToYUY2_Any_NEON, DetileToYUY2_NEON, 15)
2708
#endif
2709
2710
#ifdef HAS_DETILETOYUY2_SSE2
2711
ANYDETILEMERGE(DetileToYUY2_Any_SSE2, DetileToYUY2_SSE2, 15)
2712
#endif
2713
2714
#ifdef __cplusplus
2715
}  // extern "C"
2716
}  // namespace libyuv
2717
#endif