Imported Upstream version 1.4+222+hg5f9f7194267b
[deb_x265.git] / source / common / x86 / ipfilter8.h
1 /*****************************************************************************
2 * Copyright (C) 2013 x265 project
3 *
4 * Authors: Steve Borho <steve@borho.org>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA.
19 *
20 * This program is also available under a commercial proprietary license.
21 * For more information, contact us at license @ x265.com.
22 *****************************************************************************/
23
24 #ifndef X265_IPFILTER8_H
25 #define X265_IPFILTER8_H
26
27 #define SETUP_LUMA_FUNC_DEF(W, H, cpu) \
28 void x265_interp_8tap_horiz_pp_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); \
29 void x265_interp_8tap_horiz_ps_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx, int isRowExt); \
30 void x265_interp_8tap_vert_pp_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); \
31 void x265_interp_8tap_vert_ps_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx);
32
33 #define LUMA_FILTERS(cpu) \
34 SETUP_LUMA_FUNC_DEF(4, 4, cpu); \
35 SETUP_LUMA_FUNC_DEF(8, 8, cpu); \
36 SETUP_LUMA_FUNC_DEF(8, 4, cpu); \
37 SETUP_LUMA_FUNC_DEF(4, 8, cpu); \
38 SETUP_LUMA_FUNC_DEF(16, 16, cpu); \
39 SETUP_LUMA_FUNC_DEF(16, 8, cpu); \
40 SETUP_LUMA_FUNC_DEF(8, 16, cpu); \
41 SETUP_LUMA_FUNC_DEF(16, 12, cpu); \
42 SETUP_LUMA_FUNC_DEF(12, 16, cpu); \
43 SETUP_LUMA_FUNC_DEF(16, 4, cpu); \
44 SETUP_LUMA_FUNC_DEF(4, 16, cpu); \
45 SETUP_LUMA_FUNC_DEF(32, 32, cpu); \
46 SETUP_LUMA_FUNC_DEF(32, 16, cpu); \
47 SETUP_LUMA_FUNC_DEF(16, 32, cpu); \
48 SETUP_LUMA_FUNC_DEF(32, 24, cpu); \
49 SETUP_LUMA_FUNC_DEF(24, 32, cpu); \
50 SETUP_LUMA_FUNC_DEF(32, 8, cpu); \
51 SETUP_LUMA_FUNC_DEF(8, 32, cpu); \
52 SETUP_LUMA_FUNC_DEF(64, 64, cpu); \
53 SETUP_LUMA_FUNC_DEF(64, 32, cpu); \
54 SETUP_LUMA_FUNC_DEF(32, 64, cpu); \
55 SETUP_LUMA_FUNC_DEF(64, 48, cpu); \
56 SETUP_LUMA_FUNC_DEF(48, 64, cpu); \
57 SETUP_LUMA_FUNC_DEF(64, 16, cpu); \
58 SETUP_LUMA_FUNC_DEF(16, 64, cpu)
59
60 #define SETUP_LUMA_SP_FUNC_DEF(W, H, cpu) \
61 void x265_interp_8tap_vert_sp_ ## W ## x ## H ## cpu(const int16_t* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
62
63 #define LUMA_SP_FILTERS(cpu) \
64 SETUP_LUMA_SP_FUNC_DEF(4, 4, cpu); \
65 SETUP_LUMA_SP_FUNC_DEF(8, 8, cpu); \
66 SETUP_LUMA_SP_FUNC_DEF(8, 4, cpu); \
67 SETUP_LUMA_SP_FUNC_DEF(4, 8, cpu); \
68 SETUP_LUMA_SP_FUNC_DEF(16, 16, cpu); \
69 SETUP_LUMA_SP_FUNC_DEF(16, 8, cpu); \
70 SETUP_LUMA_SP_FUNC_DEF(8, 16, cpu); \
71 SETUP_LUMA_SP_FUNC_DEF(16, 12, cpu); \
72 SETUP_LUMA_SP_FUNC_DEF(12, 16, cpu); \
73 SETUP_LUMA_SP_FUNC_DEF(16, 4, cpu); \
74 SETUP_LUMA_SP_FUNC_DEF(4, 16, cpu); \
75 SETUP_LUMA_SP_FUNC_DEF(32, 32, cpu); \
76 SETUP_LUMA_SP_FUNC_DEF(32, 16, cpu); \
77 SETUP_LUMA_SP_FUNC_DEF(16, 32, cpu); \
78 SETUP_LUMA_SP_FUNC_DEF(32, 24, cpu); \
79 SETUP_LUMA_SP_FUNC_DEF(24, 32, cpu); \
80 SETUP_LUMA_SP_FUNC_DEF(32, 8, cpu); \
81 SETUP_LUMA_SP_FUNC_DEF(8, 32, cpu); \
82 SETUP_LUMA_SP_FUNC_DEF(64, 64, cpu); \
83 SETUP_LUMA_SP_FUNC_DEF(64, 32, cpu); \
84 SETUP_LUMA_SP_FUNC_DEF(32, 64, cpu); \
85 SETUP_LUMA_SP_FUNC_DEF(64, 48, cpu); \
86 SETUP_LUMA_SP_FUNC_DEF(48, 64, cpu); \
87 SETUP_LUMA_SP_FUNC_DEF(64, 16, cpu); \
88 SETUP_LUMA_SP_FUNC_DEF(16, 64, cpu);
89
90 #define SETUP_LUMA_SS_FUNC_DEF(W, H, cpu) \
91 void x265_interp_8tap_vert_ss_ ## W ## x ## H ## cpu(const int16_t* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx);
92
93 #define LUMA_SS_FILTERS(cpu) \
94 SETUP_LUMA_SS_FUNC_DEF(4, 4, cpu); \
95 SETUP_LUMA_SS_FUNC_DEF(8, 8, cpu); \
96 SETUP_LUMA_SS_FUNC_DEF(8, 4, cpu); \
97 SETUP_LUMA_SS_FUNC_DEF(4, 8, cpu); \
98 SETUP_LUMA_SS_FUNC_DEF(16, 16, cpu); \
99 SETUP_LUMA_SS_FUNC_DEF(16, 8, cpu); \
100 SETUP_LUMA_SS_FUNC_DEF(8, 16, cpu); \
101 SETUP_LUMA_SS_FUNC_DEF(16, 12, cpu); \
102 SETUP_LUMA_SS_FUNC_DEF(12, 16, cpu); \
103 SETUP_LUMA_SS_FUNC_DEF(16, 4, cpu); \
104 SETUP_LUMA_SS_FUNC_DEF(4, 16, cpu); \
105 SETUP_LUMA_SS_FUNC_DEF(32, 32, cpu); \
106 SETUP_LUMA_SS_FUNC_DEF(32, 16, cpu); \
107 SETUP_LUMA_SS_FUNC_DEF(16, 32, cpu); \
108 SETUP_LUMA_SS_FUNC_DEF(32, 24, cpu); \
109 SETUP_LUMA_SS_FUNC_DEF(24, 32, cpu); \
110 SETUP_LUMA_SS_FUNC_DEF(32, 8, cpu); \
111 SETUP_LUMA_SS_FUNC_DEF(8, 32, cpu); \
112 SETUP_LUMA_SS_FUNC_DEF(64, 64, cpu); \
113 SETUP_LUMA_SS_FUNC_DEF(64, 32, cpu); \
114 SETUP_LUMA_SS_FUNC_DEF(32, 64, cpu); \
115 SETUP_LUMA_SS_FUNC_DEF(64, 48, cpu); \
116 SETUP_LUMA_SS_FUNC_DEF(48, 64, cpu); \
117 SETUP_LUMA_SS_FUNC_DEF(64, 16, cpu); \
118 SETUP_LUMA_SS_FUNC_DEF(16, 64, cpu);
119
120 #if HIGH_BIT_DEPTH
121
122 #define SETUP_CHROMA_VERT_FUNC_DEF(W, H, cpu) \
123 void x265_interp_4tap_vert_ss_ ## W ## x ## H ## cpu(const int16_t* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx); \
124 void x265_interp_4tap_vert_sp_ ## W ## x ## H ## cpu(const int16_t* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); \
125 void x265_interp_4tap_vert_pp_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); \
126 void x265_interp_4tap_vert_ps_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx);
127
128 #define CHROMA_VERT_FILTERS(cpu) \
129 SETUP_CHROMA_VERT_FUNC_DEF(4, 4, cpu); \
130 SETUP_CHROMA_VERT_FUNC_DEF(8, 8, cpu); \
131 SETUP_CHROMA_VERT_FUNC_DEF(8, 4, cpu); \
132 SETUP_CHROMA_VERT_FUNC_DEF(4, 8, cpu); \
133 SETUP_CHROMA_VERT_FUNC_DEF(8, 6, cpu); \
134 SETUP_CHROMA_VERT_FUNC_DEF(8, 2, cpu); \
135 SETUP_CHROMA_VERT_FUNC_DEF(16, 16, cpu); \
136 SETUP_CHROMA_VERT_FUNC_DEF(16, 8, cpu); \
137 SETUP_CHROMA_VERT_FUNC_DEF(8, 16, cpu); \
138 SETUP_CHROMA_VERT_FUNC_DEF(16, 12, cpu); \
139 SETUP_CHROMA_VERT_FUNC_DEF(12, 16, cpu); \
140 SETUP_CHROMA_VERT_FUNC_DEF(16, 4, cpu); \
141 SETUP_CHROMA_VERT_FUNC_DEF(4, 16, cpu); \
142 SETUP_CHROMA_VERT_FUNC_DEF(32, 32, cpu); \
143 SETUP_CHROMA_VERT_FUNC_DEF(32, 16, cpu); \
144 SETUP_CHROMA_VERT_FUNC_DEF(16, 32, cpu); \
145 SETUP_CHROMA_VERT_FUNC_DEF(32, 24, cpu); \
146 SETUP_CHROMA_VERT_FUNC_DEF(24, 32, cpu); \
147 SETUP_CHROMA_VERT_FUNC_DEF(32, 8, cpu); \
148 SETUP_CHROMA_VERT_FUNC_DEF(8, 32, cpu)
149
150 #define CHROMA_VERT_FILTERS_SSE4(cpu) \
151 SETUP_CHROMA_VERT_FUNC_DEF(2, 4, cpu); \
152 SETUP_CHROMA_VERT_FUNC_DEF(2, 8, cpu); \
153 SETUP_CHROMA_VERT_FUNC_DEF(4, 2, cpu); \
154 SETUP_CHROMA_VERT_FUNC_DEF(6, 8, cpu);
155
156 #define CHROMA_VERT_FILTERS_422(cpu) \
157 SETUP_CHROMA_VERT_FUNC_DEF(4, 8, cpu); \
158 SETUP_CHROMA_VERT_FUNC_DEF(8, 16, cpu); \
159 SETUP_CHROMA_VERT_FUNC_DEF(8, 8, cpu); \
160 SETUP_CHROMA_VERT_FUNC_DEF(4, 16, cpu); \
161 SETUP_CHROMA_VERT_FUNC_DEF(8, 12, cpu); \
162 SETUP_CHROMA_VERT_FUNC_DEF(8, 4, cpu); \
163 SETUP_CHROMA_VERT_FUNC_DEF(16, 32, cpu); \
164 SETUP_CHROMA_VERT_FUNC_DEF(16, 16, cpu); \
165 SETUP_CHROMA_VERT_FUNC_DEF(8, 32, cpu); \
166 SETUP_CHROMA_VERT_FUNC_DEF(16, 24, cpu); \
167 SETUP_CHROMA_VERT_FUNC_DEF(12, 32, cpu); \
168 SETUP_CHROMA_VERT_FUNC_DEF(16, 8, cpu); \
169 SETUP_CHROMA_VERT_FUNC_DEF(4, 32, cpu); \
170 SETUP_CHROMA_VERT_FUNC_DEF(32, 64, cpu); \
171 SETUP_CHROMA_VERT_FUNC_DEF(32, 32, cpu); \
172 SETUP_CHROMA_VERT_FUNC_DEF(16, 64, cpu); \
173 SETUP_CHROMA_VERT_FUNC_DEF(32, 48, cpu); \
174 SETUP_CHROMA_VERT_FUNC_DEF(24, 64, cpu); \
175 SETUP_CHROMA_VERT_FUNC_DEF(32, 16, cpu); \
176 SETUP_CHROMA_VERT_FUNC_DEF(8, 64, cpu);
177
178 #define CHROMA_VERT_FILTERS_SSE4_422(cpu) \
179 SETUP_CHROMA_VERT_FUNC_DEF(2, 8, cpu); \
180 SETUP_CHROMA_VERT_FUNC_DEF(2, 16, cpu); \
181 SETUP_CHROMA_VERT_FUNC_DEF(4, 4, cpu); \
182 SETUP_CHROMA_VERT_FUNC_DEF(6, 16, cpu);
183
184 #define CHROMA_VERT_FILTERS_444(cpu) \
185 SETUP_CHROMA_VERT_FUNC_DEF(8, 8, cpu); \
186 SETUP_CHROMA_VERT_FUNC_DEF(8, 4, cpu); \
187 SETUP_CHROMA_VERT_FUNC_DEF(4, 8, cpu); \
188 SETUP_CHROMA_VERT_FUNC_DEF(16, 16, cpu); \
189 SETUP_CHROMA_VERT_FUNC_DEF(16, 8, cpu); \
190 SETUP_CHROMA_VERT_FUNC_DEF(8, 16, cpu); \
191 SETUP_CHROMA_VERT_FUNC_DEF(16, 12, cpu); \
192 SETUP_CHROMA_VERT_FUNC_DEF(12, 16, cpu); \
193 SETUP_CHROMA_VERT_FUNC_DEF(16, 4, cpu); \
194 SETUP_CHROMA_VERT_FUNC_DEF(4, 16, cpu); \
195 SETUP_CHROMA_VERT_FUNC_DEF(32, 32, cpu); \
196 SETUP_CHROMA_VERT_FUNC_DEF(32, 16, cpu); \
197 SETUP_CHROMA_VERT_FUNC_DEF(16, 32, cpu); \
198 SETUP_CHROMA_VERT_FUNC_DEF(32, 24, cpu); \
199 SETUP_CHROMA_VERT_FUNC_DEF(24, 32, cpu); \
200 SETUP_CHROMA_VERT_FUNC_DEF(32, 8, cpu); \
201 SETUP_CHROMA_VERT_FUNC_DEF(8, 32, cpu); \
202 SETUP_CHROMA_VERT_FUNC_DEF(64, 64, cpu); \
203 SETUP_CHROMA_VERT_FUNC_DEF(64, 32, cpu); \
204 SETUP_CHROMA_VERT_FUNC_DEF(32, 64, cpu); \
205 SETUP_CHROMA_VERT_FUNC_DEF(64, 48, cpu); \
206 SETUP_CHROMA_VERT_FUNC_DEF(48, 64, cpu); \
207 SETUP_CHROMA_VERT_FUNC_DEF(64, 16, cpu); \
208 SETUP_CHROMA_VERT_FUNC_DEF(16, 64, cpu)
209
210 #define SETUP_CHROMA_HORIZ_FUNC_DEF(W, H, cpu) \
211 void x265_interp_4tap_horiz_pp_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); \
212 void x265_interp_4tap_horiz_ps_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx, int isRowExt);
213
214 #define CHROMA_HORIZ_FILTERS(cpu) \
215 SETUP_CHROMA_HORIZ_FUNC_DEF(4, 4, cpu); \
216 SETUP_CHROMA_HORIZ_FUNC_DEF(4, 2, cpu); \
217 SETUP_CHROMA_HORIZ_FUNC_DEF(2, 4, cpu); \
218 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 8, cpu); \
219 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 4, cpu); \
220 SETUP_CHROMA_HORIZ_FUNC_DEF(4, 8, cpu); \
221 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 6, cpu); \
222 SETUP_CHROMA_HORIZ_FUNC_DEF(6, 8, cpu); \
223 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 2, cpu); \
224 SETUP_CHROMA_HORIZ_FUNC_DEF(2, 8, cpu); \
225 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 16, cpu); \
226 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 8, cpu); \
227 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 16, cpu); \
228 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 12, cpu); \
229 SETUP_CHROMA_HORIZ_FUNC_DEF(12, 16, cpu); \
230 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 4, cpu); \
231 SETUP_CHROMA_HORIZ_FUNC_DEF(4, 16, cpu); \
232 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 32, cpu); \
233 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 16, cpu); \
234 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 32, cpu); \
235 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 24, cpu); \
236 SETUP_CHROMA_HORIZ_FUNC_DEF(24, 32, cpu); \
237 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 8, cpu); \
238 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 32, cpu)
239
240 #define CHROMA_HORIZ_FILTERS_422(cpu) \
241 SETUP_CHROMA_HORIZ_FUNC_DEF(4, 8, cpu); \
242 SETUP_CHROMA_HORIZ_FUNC_DEF(4, 4, cpu); \
243 SETUP_CHROMA_HORIZ_FUNC_DEF(2, 8, cpu); \
244 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 16, cpu); \
245 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 8, cpu); \
246 SETUP_CHROMA_HORIZ_FUNC_DEF(4, 16, cpu); \
247 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 12, cpu); \
248 SETUP_CHROMA_HORIZ_FUNC_DEF(6, 16, cpu); \
249 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 4, cpu); \
250 SETUP_CHROMA_HORIZ_FUNC_DEF(2, 16, cpu); \
251 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 32, cpu); \
252 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 16, cpu); \
253 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 32, cpu); \
254 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 24, cpu); \
255 SETUP_CHROMA_HORIZ_FUNC_DEF(12, 32, cpu); \
256 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 8, cpu); \
257 SETUP_CHROMA_HORIZ_FUNC_DEF(4, 32, cpu); \
258 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 64, cpu); \
259 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 32, cpu); \
260 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 64, cpu); \
261 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 48, cpu); \
262 SETUP_CHROMA_HORIZ_FUNC_DEF(24, 64, cpu); \
263 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 16, cpu); \
264 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 64, cpu)
265
266 #define CHROMA_HORIZ_FILTERS_444(cpu) \
267 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 8, cpu); \
268 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 4, cpu); \
269 SETUP_CHROMA_HORIZ_FUNC_DEF(4, 8, cpu); \
270 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 16, cpu); \
271 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 8, cpu); \
272 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 16, cpu); \
273 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 12, cpu); \
274 SETUP_CHROMA_HORIZ_FUNC_DEF(12, 16, cpu); \
275 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 4, cpu); \
276 SETUP_CHROMA_HORIZ_FUNC_DEF(4, 16, cpu); \
277 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 32, cpu); \
278 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 16, cpu); \
279 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 32, cpu); \
280 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 24, cpu); \
281 SETUP_CHROMA_HORIZ_FUNC_DEF(24, 32, cpu); \
282 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 8, cpu); \
283 SETUP_CHROMA_HORIZ_FUNC_DEF(8, 32, cpu); \
284 SETUP_CHROMA_HORIZ_FUNC_DEF(64, 64, cpu); \
285 SETUP_CHROMA_HORIZ_FUNC_DEF(64, 32, cpu); \
286 SETUP_CHROMA_HORIZ_FUNC_DEF(32, 64, cpu); \
287 SETUP_CHROMA_HORIZ_FUNC_DEF(64, 48, cpu); \
288 SETUP_CHROMA_HORIZ_FUNC_DEF(48, 64, cpu); \
289 SETUP_CHROMA_HORIZ_FUNC_DEF(64, 16, cpu); \
290 SETUP_CHROMA_HORIZ_FUNC_DEF(16, 64, cpu)
291
292 void x265_chroma_p2s_sse2(const pixel* src, intptr_t srcStride, int16_t* dst, int width, int height);
293 void x265_luma_p2s_sse2(const pixel* src, intptr_t srcStride, int16_t* dst, int width, int height);
294
295 CHROMA_VERT_FILTERS(_sse2);
296 CHROMA_HORIZ_FILTERS(_sse4);
297 CHROMA_VERT_FILTERS_SSE4(_sse4);
298
299 CHROMA_VERT_FILTERS_422(_sse2);
300 CHROMA_HORIZ_FILTERS_422(_sse4);
301 CHROMA_VERT_FILTERS_SSE4_422(_sse4);
302
303 CHROMA_VERT_FILTERS_444(_sse2);
304 CHROMA_HORIZ_FILTERS_444(_sse4);
305
306 #undef CHROMA_VERT_FILTERS_SSE4
307 #undef CHROMA_VERT_FILTERS
308 #undef SETUP_CHROMA_VERT_FUNC_DEF
309 #undef CHROMA_HORIZ_FILTERS
310 #undef SETUP_CHROMA_HORIZ_FUNC_DEF
311
312 #undef CHROMA_VERT_FILTERS_422
313 #undef CHROMA_VERT_FILTERS_SSE4_422
314 #undef CHROMA_HORIZ_FILTERS_422
315
316 #undef CHROMA_VERT_FILTERS_444
317 #undef CHROMA_HORIZ_FILTERS_444
318
319 #else // if HIGH_BIT_DEPTH
320
321 #define SETUP_CHROMA_FUNC_DEF(W, H, cpu) \
322 void x265_interp_4tap_horiz_pp_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); \
323 void x265_interp_4tap_horiz_ps_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx, int isRowExt); \
324 void x265_interp_4tap_vert_pp_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); \
325 void x265_interp_4tap_vert_ps_ ## W ## x ## H ## cpu(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx);
326
327 #define CHROMA_FILTERS(cpu) \
328 SETUP_CHROMA_FUNC_DEF(4, 4, cpu); \
329 SETUP_CHROMA_FUNC_DEF(4, 2, cpu); \
330 SETUP_CHROMA_FUNC_DEF(2, 4, cpu); \
331 SETUP_CHROMA_FUNC_DEF(8, 8, cpu); \
332 SETUP_CHROMA_FUNC_DEF(8, 4, cpu); \
333 SETUP_CHROMA_FUNC_DEF(4, 8, cpu); \
334 SETUP_CHROMA_FUNC_DEF(8, 6, cpu); \
335 SETUP_CHROMA_FUNC_DEF(6, 8, cpu); \
336 SETUP_CHROMA_FUNC_DEF(8, 2, cpu); \
337 SETUP_CHROMA_FUNC_DEF(2, 8, cpu); \
338 SETUP_CHROMA_FUNC_DEF(16, 16, cpu); \
339 SETUP_CHROMA_FUNC_DEF(16, 8, cpu); \
340 SETUP_CHROMA_FUNC_DEF(8, 16, cpu); \
341 SETUP_CHROMA_FUNC_DEF(16, 12, cpu); \
342 SETUP_CHROMA_FUNC_DEF(12, 16, cpu); \
343 SETUP_CHROMA_FUNC_DEF(16, 4, cpu); \
344 SETUP_CHROMA_FUNC_DEF(4, 16, cpu); \
345 SETUP_CHROMA_FUNC_DEF(32, 32, cpu); \
346 SETUP_CHROMA_FUNC_DEF(32, 16, cpu); \
347 SETUP_CHROMA_FUNC_DEF(16, 32, cpu); \
348 SETUP_CHROMA_FUNC_DEF(32, 24, cpu); \
349 SETUP_CHROMA_FUNC_DEF(24, 32, cpu); \
350 SETUP_CHROMA_FUNC_DEF(32, 8, cpu); \
351 SETUP_CHROMA_FUNC_DEF(8, 32, cpu)
352
353 #define CHROMA_FILTERS_422(cpu) \
354 SETUP_CHROMA_FUNC_DEF(4, 8, cpu); \
355 SETUP_CHROMA_FUNC_DEF(4, 4, cpu); \
356 SETUP_CHROMA_FUNC_DEF(2, 8, cpu); \
357 SETUP_CHROMA_FUNC_DEF(8, 16, cpu); \
358 SETUP_CHROMA_FUNC_DEF(8, 8, cpu); \
359 SETUP_CHROMA_FUNC_DEF(4, 16, cpu); \
360 SETUP_CHROMA_FUNC_DEF(8, 12, cpu); \
361 SETUP_CHROMA_FUNC_DEF(6, 16, cpu); \
362 SETUP_CHROMA_FUNC_DEF(8, 4, cpu); \
363 SETUP_CHROMA_FUNC_DEF(2, 16, cpu); \
364 SETUP_CHROMA_FUNC_DEF(16, 32, cpu); \
365 SETUP_CHROMA_FUNC_DEF(16, 16, cpu); \
366 SETUP_CHROMA_FUNC_DEF(8, 32, cpu); \
367 SETUP_CHROMA_FUNC_DEF(16, 24, cpu); \
368 SETUP_CHROMA_FUNC_DEF(12, 32, cpu); \
369 SETUP_CHROMA_FUNC_DEF(16, 8, cpu); \
370 SETUP_CHROMA_FUNC_DEF(4, 32, cpu); \
371 SETUP_CHROMA_FUNC_DEF(32, 64, cpu); \
372 SETUP_CHROMA_FUNC_DEF(32, 32, cpu); \
373 SETUP_CHROMA_FUNC_DEF(16, 64, cpu); \
374 SETUP_CHROMA_FUNC_DEF(32, 48, cpu); \
375 SETUP_CHROMA_FUNC_DEF(24, 64, cpu); \
376 SETUP_CHROMA_FUNC_DEF(32, 16, cpu); \
377 SETUP_CHROMA_FUNC_DEF(8, 64, cpu);
378
379 #define CHROMA_FILTERS_444(cpu) \
380 SETUP_CHROMA_FUNC_DEF(8, 8, cpu); \
381 SETUP_CHROMA_FUNC_DEF(8, 4, cpu); \
382 SETUP_CHROMA_FUNC_DEF(4, 8, cpu); \
383 SETUP_CHROMA_FUNC_DEF(16, 16, cpu); \
384 SETUP_CHROMA_FUNC_DEF(16, 8, cpu); \
385 SETUP_CHROMA_FUNC_DEF(8, 16, cpu); \
386 SETUP_CHROMA_FUNC_DEF(16, 12, cpu); \
387 SETUP_CHROMA_FUNC_DEF(12, 16, cpu); \
388 SETUP_CHROMA_FUNC_DEF(16, 4, cpu); \
389 SETUP_CHROMA_FUNC_DEF(4, 16, cpu); \
390 SETUP_CHROMA_FUNC_DEF(32, 32, cpu); \
391 SETUP_CHROMA_FUNC_DEF(32, 16, cpu); \
392 SETUP_CHROMA_FUNC_DEF(16, 32, cpu); \
393 SETUP_CHROMA_FUNC_DEF(32, 24, cpu); \
394 SETUP_CHROMA_FUNC_DEF(24, 32, cpu); \
395 SETUP_CHROMA_FUNC_DEF(32, 8, cpu); \
396 SETUP_CHROMA_FUNC_DEF(8, 32, cpu); \
397 SETUP_CHROMA_FUNC_DEF(64, 64, cpu); \
398 SETUP_CHROMA_FUNC_DEF(64, 32, cpu); \
399 SETUP_CHROMA_FUNC_DEF(32, 64, cpu); \
400 SETUP_CHROMA_FUNC_DEF(64, 48, cpu); \
401 SETUP_CHROMA_FUNC_DEF(48, 64, cpu); \
402 SETUP_CHROMA_FUNC_DEF(64, 16, cpu); \
403 SETUP_CHROMA_FUNC_DEF(16, 64, cpu);
404
405 #define SETUP_CHROMA_SP_FUNC_DEF(W, H, cpu) \
406 void x265_interp_4tap_vert_sp_ ## W ## x ## H ## cpu(const int16_t* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
407
408 #define CHROMA_SP_FILTERS(cpu) \
409 SETUP_CHROMA_SP_FUNC_DEF(8, 2, cpu); \
410 SETUP_CHROMA_SP_FUNC_DEF(8, 4, cpu); \
411 SETUP_CHROMA_SP_FUNC_DEF(8, 6, cpu); \
412 SETUP_CHROMA_SP_FUNC_DEF(8, 8, cpu); \
413 SETUP_CHROMA_SP_FUNC_DEF(8, 16, cpu); \
414 SETUP_CHROMA_SP_FUNC_DEF(8, 32, cpu);
415
416 #define CHROMA_SP_FILTERS_SSE4(cpu) \
417 SETUP_CHROMA_SP_FUNC_DEF(2, 4, cpu); \
418 SETUP_CHROMA_SP_FUNC_DEF(2, 8, cpu); \
419 SETUP_CHROMA_SP_FUNC_DEF(4, 2, cpu); \
420 SETUP_CHROMA_SP_FUNC_DEF(4, 4, cpu); \
421 SETUP_CHROMA_SP_FUNC_DEF(4, 8, cpu); \
422 SETUP_CHROMA_SP_FUNC_DEF(4, 16, cpu); \
423 SETUP_CHROMA_SP_FUNC_DEF(6, 8, cpu); \
424 SETUP_CHROMA_SP_FUNC_DEF(16, 16, cpu); \
425 SETUP_CHROMA_SP_FUNC_DEF(16, 8, cpu); \
426 SETUP_CHROMA_SP_FUNC_DEF(16, 12, cpu); \
427 SETUP_CHROMA_SP_FUNC_DEF(12, 16, cpu); \
428 SETUP_CHROMA_SP_FUNC_DEF(16, 4, cpu); \
429 SETUP_CHROMA_SP_FUNC_DEF(32, 32, cpu); \
430 SETUP_CHROMA_SP_FUNC_DEF(32, 16, cpu); \
431 SETUP_CHROMA_SP_FUNC_DEF(16, 32, cpu); \
432 SETUP_CHROMA_SP_FUNC_DEF(32, 24, cpu); \
433 SETUP_CHROMA_SP_FUNC_DEF(24, 32, cpu); \
434 SETUP_CHROMA_SP_FUNC_DEF(32, 8, cpu);
435
436 #define CHROMA_SP_FILTERS_422(cpu) \
437 SETUP_CHROMA_SP_FUNC_DEF(8, 4, cpu); \
438 SETUP_CHROMA_SP_FUNC_DEF(8, 8, cpu); \
439 SETUP_CHROMA_SP_FUNC_DEF(8, 12, cpu); \
440 SETUP_CHROMA_SP_FUNC_DEF(8, 16, cpu); \
441 SETUP_CHROMA_SP_FUNC_DEF(8, 32, cpu); \
442 SETUP_CHROMA_SP_FUNC_DEF(8, 64, cpu);
443
444 #define CHROMA_SP_FILTERS_422_SSE4(cpu) \
445 SETUP_CHROMA_SP_FUNC_DEF(2, 8, cpu); \
446 SETUP_CHROMA_SP_FUNC_DEF(2, 16, cpu); \
447 SETUP_CHROMA_SP_FUNC_DEF(4, 4, cpu); \
448 SETUP_CHROMA_SP_FUNC_DEF(4, 8, cpu); \
449 SETUP_CHROMA_SP_FUNC_DEF(4, 16, cpu); \
450 SETUP_CHROMA_SP_FUNC_DEF(4, 32, cpu); \
451 SETUP_CHROMA_SP_FUNC_DEF(6, 16, cpu); \
452 SETUP_CHROMA_SP_FUNC_DEF(16, 32, cpu); \
453 SETUP_CHROMA_SP_FUNC_DEF(16, 16, cpu); \
454 SETUP_CHROMA_SP_FUNC_DEF(16, 24, cpu); \
455 SETUP_CHROMA_SP_FUNC_DEF(12, 32, cpu); \
456 SETUP_CHROMA_SP_FUNC_DEF(16, 8, cpu); \
457 SETUP_CHROMA_SP_FUNC_DEF(32, 64, cpu); \
458 SETUP_CHROMA_SP_FUNC_DEF(32, 32, cpu); \
459 SETUP_CHROMA_SP_FUNC_DEF(16, 64, cpu); \
460 SETUP_CHROMA_SP_FUNC_DEF(32, 48, cpu); \
461 SETUP_CHROMA_SP_FUNC_DEF(24, 64, cpu); \
462 SETUP_CHROMA_SP_FUNC_DEF(32, 16, cpu);
463
464 #define CHROMA_SP_FILTERS_444(cpu) \
465 SETUP_CHROMA_SP_FUNC_DEF(8, 8, cpu); \
466 SETUP_CHROMA_SP_FUNC_DEF(8, 4, cpu); \
467 SETUP_CHROMA_SP_FUNC_DEF(4, 8, cpu); \
468 SETUP_CHROMA_SP_FUNC_DEF(16, 16, cpu); \
469 SETUP_CHROMA_SP_FUNC_DEF(16, 8, cpu); \
470 SETUP_CHROMA_SP_FUNC_DEF(8, 16, cpu); \
471 SETUP_CHROMA_SP_FUNC_DEF(16, 12, cpu); \
472 SETUP_CHROMA_SP_FUNC_DEF(12, 16, cpu); \
473 SETUP_CHROMA_SP_FUNC_DEF(16, 4, cpu); \
474 SETUP_CHROMA_SP_FUNC_DEF(4, 16, cpu); \
475 SETUP_CHROMA_SP_FUNC_DEF(32, 32, cpu); \
476 SETUP_CHROMA_SP_FUNC_DEF(32, 16, cpu); \
477 SETUP_CHROMA_SP_FUNC_DEF(16, 32, cpu); \
478 SETUP_CHROMA_SP_FUNC_DEF(32, 24, cpu); \
479 SETUP_CHROMA_SP_FUNC_DEF(24, 32, cpu); \
480 SETUP_CHROMA_SP_FUNC_DEF(32, 8, cpu); \
481 SETUP_CHROMA_SP_FUNC_DEF(8, 32, cpu); \
482 SETUP_CHROMA_SP_FUNC_DEF(64, 64, cpu); \
483 SETUP_CHROMA_SP_FUNC_DEF(64, 32, cpu); \
484 SETUP_CHROMA_SP_FUNC_DEF(32, 64, cpu); \
485 SETUP_CHROMA_SP_FUNC_DEF(64, 48, cpu); \
486 SETUP_CHROMA_SP_FUNC_DEF(48, 64, cpu); \
487 SETUP_CHROMA_SP_FUNC_DEF(64, 16, cpu); \
488 SETUP_CHROMA_SP_FUNC_DEF(16, 64, cpu);
489
490 #define SETUP_CHROMA_SS_FUNC_DEF(W, H, cpu) \
491 void x265_interp_4tap_vert_ss_ ## W ## x ## H ## cpu(const int16_t* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx);
492
493 #define CHROMA_SS_FILTERS(cpu) \
494 SETUP_CHROMA_SS_FUNC_DEF(4, 4, cpu); \
495 SETUP_CHROMA_SS_FUNC_DEF(4, 2, cpu); \
496 SETUP_CHROMA_SS_FUNC_DEF(8, 8, cpu); \
497 SETUP_CHROMA_SS_FUNC_DEF(8, 4, cpu); \
498 SETUP_CHROMA_SS_FUNC_DEF(4, 8, cpu); \
499 SETUP_CHROMA_SS_FUNC_DEF(8, 6, cpu); \
500 SETUP_CHROMA_SS_FUNC_DEF(8, 2, cpu); \
501 SETUP_CHROMA_SS_FUNC_DEF(16, 16, cpu); \
502 SETUP_CHROMA_SS_FUNC_DEF(16, 8, cpu); \
503 SETUP_CHROMA_SS_FUNC_DEF(8, 16, cpu); \
504 SETUP_CHROMA_SS_FUNC_DEF(16, 12, cpu); \
505 SETUP_CHROMA_SS_FUNC_DEF(12, 16, cpu); \
506 SETUP_CHROMA_SS_FUNC_DEF(16, 4, cpu); \
507 SETUP_CHROMA_SS_FUNC_DEF(4, 16, cpu); \
508 SETUP_CHROMA_SS_FUNC_DEF(32, 32, cpu); \
509 SETUP_CHROMA_SS_FUNC_DEF(32, 16, cpu); \
510 SETUP_CHROMA_SS_FUNC_DEF(16, 32, cpu); \
511 SETUP_CHROMA_SS_FUNC_DEF(32, 24, cpu); \
512 SETUP_CHROMA_SS_FUNC_DEF(24, 32, cpu); \
513 SETUP_CHROMA_SS_FUNC_DEF(32, 8, cpu); \
514 SETUP_CHROMA_SS_FUNC_DEF(8, 32, cpu);
515
516 #define CHROMA_SS_FILTERS_SSE4(cpu) \
517 SETUP_CHROMA_SS_FUNC_DEF(2, 4, cpu); \
518 SETUP_CHROMA_SS_FUNC_DEF(2, 8, cpu); \
519 SETUP_CHROMA_SS_FUNC_DEF(6, 8, cpu);
520
521 #define CHROMA_SS_FILTERS_422(cpu) \
522 SETUP_CHROMA_SS_FUNC_DEF(4, 8, cpu); \
523 SETUP_CHROMA_SS_FUNC_DEF(4, 4, cpu); \
524 SETUP_CHROMA_SS_FUNC_DEF(8, 16, cpu); \
525 SETUP_CHROMA_SS_FUNC_DEF(8, 8, cpu); \
526 SETUP_CHROMA_SS_FUNC_DEF(4, 16, cpu); \
527 SETUP_CHROMA_SS_FUNC_DEF(8, 12, cpu); \
528 SETUP_CHROMA_SS_FUNC_DEF(8, 4, cpu); \
529 SETUP_CHROMA_SS_FUNC_DEF(16, 32, cpu); \
530 SETUP_CHROMA_SS_FUNC_DEF(16, 16, cpu); \
531 SETUP_CHROMA_SS_FUNC_DEF(8, 32, cpu); \
532 SETUP_CHROMA_SS_FUNC_DEF(16, 24, cpu); \
533 SETUP_CHROMA_SS_FUNC_DEF(12, 32, cpu); \
534 SETUP_CHROMA_SS_FUNC_DEF(16, 8, cpu); \
535 SETUP_CHROMA_SS_FUNC_DEF(4, 32, cpu); \
536 SETUP_CHROMA_SS_FUNC_DEF(32, 64, cpu); \
537 SETUP_CHROMA_SS_FUNC_DEF(32, 32, cpu); \
538 SETUP_CHROMA_SS_FUNC_DEF(16, 64, cpu); \
539 SETUP_CHROMA_SS_FUNC_DEF(32, 48, cpu); \
540 SETUP_CHROMA_SS_FUNC_DEF(24, 64, cpu); \
541 SETUP_CHROMA_SS_FUNC_DEF(32, 16, cpu); \
542 SETUP_CHROMA_SS_FUNC_DEF(8, 64, cpu);
543
544 #define CHROMA_SS_FILTERS_422_SSE4(cpu) \
545 SETUP_CHROMA_SS_FUNC_DEF(2, 8, cpu); \
546 SETUP_CHROMA_SS_FUNC_DEF(2, 16, cpu); \
547 SETUP_CHROMA_SS_FUNC_DEF(6, 16, cpu);
548
549 #define CHROMA_SS_FILTERS_444(cpu) \
550 SETUP_CHROMA_SS_FUNC_DEF(8, 8, cpu); \
551 SETUP_CHROMA_SS_FUNC_DEF(8, 4, cpu); \
552 SETUP_CHROMA_SS_FUNC_DEF(4, 8, cpu); \
553 SETUP_CHROMA_SS_FUNC_DEF(16, 16, cpu); \
554 SETUP_CHROMA_SS_FUNC_DEF(16, 8, cpu); \
555 SETUP_CHROMA_SS_FUNC_DEF(8, 16, cpu); \
556 SETUP_CHROMA_SS_FUNC_DEF(16, 12, cpu); \
557 SETUP_CHROMA_SS_FUNC_DEF(12, 16, cpu); \
558 SETUP_CHROMA_SS_FUNC_DEF(16, 4, cpu); \
559 SETUP_CHROMA_SS_FUNC_DEF(4, 16, cpu); \
560 SETUP_CHROMA_SS_FUNC_DEF(32, 32, cpu); \
561 SETUP_CHROMA_SS_FUNC_DEF(32, 16, cpu); \
562 SETUP_CHROMA_SS_FUNC_DEF(16, 32, cpu); \
563 SETUP_CHROMA_SS_FUNC_DEF(32, 24, cpu); \
564 SETUP_CHROMA_SS_FUNC_DEF(24, 32, cpu); \
565 SETUP_CHROMA_SS_FUNC_DEF(32, 8, cpu); \
566 SETUP_CHROMA_SS_FUNC_DEF(8, 32, cpu); \
567 SETUP_CHROMA_SS_FUNC_DEF(64, 64, cpu); \
568 SETUP_CHROMA_SS_FUNC_DEF(64, 32, cpu); \
569 SETUP_CHROMA_SS_FUNC_DEF(32, 64, cpu); \
570 SETUP_CHROMA_SS_FUNC_DEF(64, 48, cpu); \
571 SETUP_CHROMA_SS_FUNC_DEF(48, 64, cpu); \
572 SETUP_CHROMA_SS_FUNC_DEF(64, 16, cpu); \
573 SETUP_CHROMA_SS_FUNC_DEF(16, 64, cpu);
574
575 CHROMA_FILTERS(_sse4);
576 CHROMA_FILTERS(_avx2);
577 CHROMA_SP_FILTERS(_sse2);
578 CHROMA_SP_FILTERS_SSE4(_sse4);
579 CHROMA_SS_FILTERS(_sse2);
580 CHROMA_SS_FILTERS_SSE4(_sse4);
581
582 CHROMA_FILTERS_422(_sse4);
583 CHROMA_FILTERS_422(_avx2);
584 CHROMA_SP_FILTERS_422(_sse2);
585 CHROMA_SP_FILTERS_422_SSE4(_sse4);
586 CHROMA_SS_FILTERS_422(_sse2);
587 CHROMA_SS_FILTERS_422_SSE4(_sse4);
588
589 CHROMA_FILTERS_444(_sse4);
590 CHROMA_SP_FILTERS_444(_sse4);
591 CHROMA_SS_FILTERS_444(_sse2);
592
593 void x265_chroma_p2s_ssse3(const pixel* src, intptr_t srcStride, int16_t* dst, int width, int height);
594
595 #undef SETUP_CHROMA_FUNC_DEF
596 #undef SETUP_CHROMA_SP_FUNC_DEF
597 #undef SETUP_CHROMA_SS_FUNC_DEF
598 #undef CHROMA_FILTERS
599 #undef CHROMA_SP_FILTERS
600 #undef CHROMA_SS_FILTERS
601 #undef CHROMA_SS_FILTERS_SSE4
602 #undef CHROMA_SP_FILTERS_SSE4
603
604 #undef CHROMA_FILTERS_422
605 #undef CHROMA_SP_FILTERS_422
606 #undef CHROMA_SS_FILTERS_422
607 #undef CHROMA_SS_FILTERS_422_SSE4
608 #undef CHROMA_SP_FILTERS_422_SSE4
609
610 #undef CHROMA_FILTERS_444
611 #undef CHROMA_SP_FILTERS_444
612 #undef CHROMA_SS_FILTERS_444
613
614 #endif // if HIGH_BIT_DEPTH
615
616 LUMA_FILTERS(_sse4);
617 LUMA_SP_FILTERS(_sse4);
618 LUMA_SS_FILTERS(_sse2);
619 LUMA_FILTERS(_avx2);
620
621 void x265_interp_8tap_hv_pp_8x8_ssse3(const pixel* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int idxX, int idxY);
622 void x265_luma_p2s_ssse3(const pixel* src, intptr_t srcStride, int16_t* dst, int width, int height);
623
624 #undef LUMA_FILTERS
625 #undef LUMA_SP_FILTERS
626 #undef LUMA_SS_FILTERS
627 #undef SETUP_LUMA_FUNC_DEF
628 #undef SETUP_LUMA_SP_FUNC_DEF
629 #undef SETUP_LUMA_SS_FUNC_DEF
630
631 #endif // ifndef X265_MC_H