1 /*
2  * simd/jsimd.h
3  *
4  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
5  * Copyright (C) 2011, 2014-2016, 2018, 2020, D. R. Commander.
6  * Copyright (C) 2013-2014, MIPS Technologies, Inc., California.
7  * Copyright (C) 2014, Linaro Limited.
8  * Copyright (C) 2015-2016, 2018, Matthieu Darbois.
9  * Copyright (C) 2016-2017, Loongson Technology Corporation Limited, BeiJing.
10  *
11  * Based on the x86 SIMD extension for IJG JPEG library,
12  * Copyright (C) 1999-2006, MIYASAKA Masaru.
13  * For conditions of distribution and use, see copyright notice in jsimdext.inc
14  *
15  */
16 
17 /* Bitmask for supported acceleration methods */
18 
19 #define JSIMD_NONE     0x00
20 #define JSIMD_MMX      0x01
21 #define JSIMD_3DNOW    0x02
22 #define JSIMD_SSE      0x04
23 #define JSIMD_SSE2     0x08
24 #define JSIMD_NEON     0x10
25 #define JSIMD_DSPR2    0x20
26 #define JSIMD_ALTIVEC  0x40
27 #define JSIMD_AVX2     0x80
28 #define JSIMD_MMI      0x100
29 
30 /* SIMD Ext: retrieve SIMD/CPU information */
31 EXTERN(unsigned int) jpeg_simd_cpu_support(void);
32 
33 /* RGB & extended RGB --> YCC Colorspace Conversion */
34 EXTERN(void) jsimd_rgb_ycc_convert_mmx
35   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
36    JDIMENSION output_row, int num_rows);
37 EXTERN(void) jsimd_extrgb_ycc_convert_mmx
38   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
39    JDIMENSION output_row, int num_rows);
40 EXTERN(void) jsimd_extrgbx_ycc_convert_mmx
41   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
42    JDIMENSION output_row, int num_rows);
43 EXTERN(void) jsimd_extbgr_ycc_convert_mmx
44   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
45    JDIMENSION output_row, int num_rows);
46 EXTERN(void) jsimd_extbgrx_ycc_convert_mmx
47   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
48    JDIMENSION output_row, int num_rows);
49 EXTERN(void) jsimd_extxbgr_ycc_convert_mmx
50   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
51    JDIMENSION output_row, int num_rows);
52 EXTERN(void) jsimd_extxrgb_ycc_convert_mmx
53   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
54    JDIMENSION output_row, int num_rows);
55 
56 extern const int jconst_rgb_ycc_convert_sse2[];
57 EXTERN(void) jsimd_rgb_ycc_convert_sse2
58   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
59    JDIMENSION output_row, int num_rows);
60 EXTERN(void) jsimd_extrgb_ycc_convert_sse2
61   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
62    JDIMENSION output_row, int num_rows);
63 EXTERN(void) jsimd_extrgbx_ycc_convert_sse2
64   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
65    JDIMENSION output_row, int num_rows);
66 EXTERN(void) jsimd_extbgr_ycc_convert_sse2
67   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
68    JDIMENSION output_row, int num_rows);
69 EXTERN(void) jsimd_extbgrx_ycc_convert_sse2
70   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
71    JDIMENSION output_row, int num_rows);
72 EXTERN(void) jsimd_extxbgr_ycc_convert_sse2
73   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
74    JDIMENSION output_row, int num_rows);
75 EXTERN(void) jsimd_extxrgb_ycc_convert_sse2
76   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
77    JDIMENSION output_row, int num_rows);
78 
79 extern const int jconst_rgb_ycc_convert_avx2[];
80 EXTERN(void) jsimd_rgb_ycc_convert_avx2
81   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
82    JDIMENSION output_row, int num_rows);
83 EXTERN(void) jsimd_extrgb_ycc_convert_avx2
84   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
85    JDIMENSION output_row, int num_rows);
86 EXTERN(void) jsimd_extrgbx_ycc_convert_avx2
87   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
88    JDIMENSION output_row, int num_rows);
89 EXTERN(void) jsimd_extbgr_ycc_convert_avx2
90   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
91    JDIMENSION output_row, int num_rows);
92 EXTERN(void) jsimd_extbgrx_ycc_convert_avx2
93   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
94    JDIMENSION output_row, int num_rows);
95 EXTERN(void) jsimd_extxbgr_ycc_convert_avx2
96   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
97    JDIMENSION output_row, int num_rows);
98 EXTERN(void) jsimd_extxrgb_ycc_convert_avx2
99   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
100    JDIMENSION output_row, int num_rows);
101 
102 EXTERN(void) jsimd_rgb_ycc_convert_neon
103   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
104    JDIMENSION output_row, int num_rows);
105 EXTERN(void) jsimd_extrgb_ycc_convert_neon
106   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
107    JDIMENSION output_row, int num_rows);
108 EXTERN(void) jsimd_extrgbx_ycc_convert_neon
109   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
110    JDIMENSION output_row, int num_rows);
111 EXTERN(void) jsimd_extbgr_ycc_convert_neon
112   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
113    JDIMENSION output_row, int num_rows);
114 EXTERN(void) jsimd_extbgrx_ycc_convert_neon
115   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
116    JDIMENSION output_row, int num_rows);
117 EXTERN(void) jsimd_extxbgr_ycc_convert_neon
118   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
119    JDIMENSION output_row, int num_rows);
120 EXTERN(void) jsimd_extxrgb_ycc_convert_neon
121   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
122    JDIMENSION output_row, int num_rows);
123 
124 EXTERN(void) jsimd_extrgb_ycc_convert_neon_slowld3
125   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
126    JDIMENSION output_row, int num_rows);
127 EXTERN(void) jsimd_extbgr_ycc_convert_neon_slowld3
128   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
129    JDIMENSION output_row, int num_rows);
130 
131 EXTERN(void) jsimd_rgb_ycc_convert_dspr2
132   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
133    JDIMENSION output_row, int num_rows);
134 EXTERN(void) jsimd_extrgb_ycc_convert_dspr2
135   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
136    JDIMENSION output_row, int num_rows);
137 EXTERN(void) jsimd_extrgbx_ycc_convert_dspr2
138   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
139    JDIMENSION output_row, int num_rows);
140 EXTERN(void) jsimd_extbgr_ycc_convert_dspr2
141   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
142    JDIMENSION output_row, int num_rows);
143 EXTERN(void) jsimd_extbgrx_ycc_convert_dspr2
144   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
145    JDIMENSION output_row, int num_rows);
146 EXTERN(void) jsimd_extxbgr_ycc_convert_dspr2
147   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
148    JDIMENSION output_row, int num_rows);
149 EXTERN(void) jsimd_extxrgb_ycc_convert_dspr2
150   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
151    JDIMENSION output_row, int num_rows);
152 
153 EXTERN(void) jsimd_rgb_ycc_convert_mmi
154   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
155    JDIMENSION output_row, int num_rows);
156 EXTERN(void) jsimd_extrgb_ycc_convert_mmi
157   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
158    JDIMENSION output_row, int num_rows);
159 EXTERN(void) jsimd_extrgbx_ycc_convert_mmi
160   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
161    JDIMENSION output_row, int num_rows);
162 EXTERN(void) jsimd_extbgr_ycc_convert_mmi
163   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
164    JDIMENSION output_row, int num_rows);
165 EXTERN(void) jsimd_extbgrx_ycc_convert_mmi
166   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
167    JDIMENSION output_row, int num_rows);
168 EXTERN(void) jsimd_extxbgr_ycc_convert_mmi
169   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
170    JDIMENSION output_row, int num_rows);
171 EXTERN(void) jsimd_extxrgb_ycc_convert_mmi
172   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
173    JDIMENSION output_row, int num_rows);
174 
175 EXTERN(void) jsimd_rgb_ycc_convert_altivec
176   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
177    JDIMENSION output_row, int num_rows);
178 EXTERN(void) jsimd_extrgb_ycc_convert_altivec
179   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
180    JDIMENSION output_row, int num_rows);
181 EXTERN(void) jsimd_extrgbx_ycc_convert_altivec
182   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
183    JDIMENSION output_row, int num_rows);
184 EXTERN(void) jsimd_extbgr_ycc_convert_altivec
185   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
186    JDIMENSION output_row, int num_rows);
187 EXTERN(void) jsimd_extbgrx_ycc_convert_altivec
188   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
189    JDIMENSION output_row, int num_rows);
190 EXTERN(void) jsimd_extxbgr_ycc_convert_altivec
191   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
192    JDIMENSION output_row, int num_rows);
193 EXTERN(void) jsimd_extxrgb_ycc_convert_altivec
194   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
195    JDIMENSION output_row, int num_rows);
196 
197 /* RGB & extended RGB --> Grayscale Colorspace Conversion */
198 EXTERN(void) jsimd_rgb_gray_convert_mmx
199   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
200    JDIMENSION output_row, int num_rows);
201 EXTERN(void) jsimd_extrgb_gray_convert_mmx
202   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
203    JDIMENSION output_row, int num_rows);
204 EXTERN(void) jsimd_extrgbx_gray_convert_mmx
205   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
206    JDIMENSION output_row, int num_rows);
207 EXTERN(void) jsimd_extbgr_gray_convert_mmx
208   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
209    JDIMENSION output_row, int num_rows);
210 EXTERN(void) jsimd_extbgrx_gray_convert_mmx
211   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
212    JDIMENSION output_row, int num_rows);
213 EXTERN(void) jsimd_extxbgr_gray_convert_mmx
214   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
215    JDIMENSION output_row, int num_rows);
216 EXTERN(void) jsimd_extxrgb_gray_convert_mmx
217   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
218    JDIMENSION output_row, int num_rows);
219 
220 extern const int jconst_rgb_gray_convert_sse2[];
221 EXTERN(void) jsimd_rgb_gray_convert_sse2
222   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
223    JDIMENSION output_row, int num_rows);
224 EXTERN(void) jsimd_extrgb_gray_convert_sse2
225   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
226    JDIMENSION output_row, int num_rows);
227 EXTERN(void) jsimd_extrgbx_gray_convert_sse2
228   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
229    JDIMENSION output_row, int num_rows);
230 EXTERN(void) jsimd_extbgr_gray_convert_sse2
231   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
232    JDIMENSION output_row, int num_rows);
233 EXTERN(void) jsimd_extbgrx_gray_convert_sse2
234   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
235    JDIMENSION output_row, int num_rows);
236 EXTERN(void) jsimd_extxbgr_gray_convert_sse2
237   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
238    JDIMENSION output_row, int num_rows);
239 EXTERN(void) jsimd_extxrgb_gray_convert_sse2
240   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
241    JDIMENSION output_row, int num_rows);
242 
243 extern const int jconst_rgb_gray_convert_avx2[];
244 EXTERN(void) jsimd_rgb_gray_convert_avx2
245   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
246    JDIMENSION output_row, int num_rows);
247 EXTERN(void) jsimd_extrgb_gray_convert_avx2
248   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
249    JDIMENSION output_row, int num_rows);
250 EXTERN(void) jsimd_extrgbx_gray_convert_avx2
251   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
252    JDIMENSION output_row, int num_rows);
253 EXTERN(void) jsimd_extbgr_gray_convert_avx2
254   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
255    JDIMENSION output_row, int num_rows);
256 EXTERN(void) jsimd_extbgrx_gray_convert_avx2
257   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
258    JDIMENSION output_row, int num_rows);
259 EXTERN(void) jsimd_extxbgr_gray_convert_avx2
260   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
261    JDIMENSION output_row, int num_rows);
262 EXTERN(void) jsimd_extxrgb_gray_convert_avx2
263   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
264    JDIMENSION output_row, int num_rows);
265 
266 EXTERN(void) jsimd_rgb_gray_convert_dspr2
267   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
268    JDIMENSION output_row, int num_rows);
269 EXTERN(void) jsimd_extrgb_gray_convert_dspr2
270   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
271    JDIMENSION output_row, int num_rows);
272 EXTERN(void) jsimd_extrgbx_gray_convert_dspr2
273   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
274    JDIMENSION output_row, int num_rows);
275 EXTERN(void) jsimd_extbgr_gray_convert_dspr2
276   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
277    JDIMENSION output_row, int num_rows);
278 EXTERN(void) jsimd_extbgrx_gray_convert_dspr2
279   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
280    JDIMENSION output_row, int num_rows);
281 EXTERN(void) jsimd_extxbgr_gray_convert_dspr2
282   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
283    JDIMENSION output_row, int num_rows);
284 EXTERN(void) jsimd_extxrgb_gray_convert_dspr2
285   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
286    JDIMENSION output_row, int num_rows);
287 
288 EXTERN(void) jsimd_rgb_gray_convert_altivec
289   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
290    JDIMENSION output_row, int num_rows);
291 EXTERN(void) jsimd_extrgb_gray_convert_altivec
292   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
293    JDIMENSION output_row, int num_rows);
294 EXTERN(void) jsimd_extrgbx_gray_convert_altivec
295   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
296    JDIMENSION output_row, int num_rows);
297 EXTERN(void) jsimd_extbgr_gray_convert_altivec
298   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
299    JDIMENSION output_row, int num_rows);
300 EXTERN(void) jsimd_extbgrx_gray_convert_altivec
301   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
302    JDIMENSION output_row, int num_rows);
303 EXTERN(void) jsimd_extxbgr_gray_convert_altivec
304   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
305    JDIMENSION output_row, int num_rows);
306 EXTERN(void) jsimd_extxrgb_gray_convert_altivec
307   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
308    JDIMENSION output_row, int num_rows);
309 
310 /* YCC --> RGB & extended RGB Colorspace Conversion */
311 EXTERN(void) jsimd_ycc_rgb_convert_mmx
312   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
313    JSAMPARRAY output_buf, int num_rows);
314 EXTERN(void) jsimd_ycc_extrgb_convert_mmx
315   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
316    JSAMPARRAY output_buf, int num_rows);
317 EXTERN(void) jsimd_ycc_extrgbx_convert_mmx
318   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
319    JSAMPARRAY output_buf, int num_rows);
320 EXTERN(void) jsimd_ycc_extbgr_convert_mmx
321   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
322    JSAMPARRAY output_buf, int num_rows);
323 EXTERN(void) jsimd_ycc_extbgrx_convert_mmx
324   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
325    JSAMPARRAY output_buf, int num_rows);
326 EXTERN(void) jsimd_ycc_extxbgr_convert_mmx
327   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
328    JSAMPARRAY output_buf, int num_rows);
329 EXTERN(void) jsimd_ycc_extxrgb_convert_mmx
330   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
331    JSAMPARRAY output_buf, int num_rows);
332 
333 extern const int jconst_ycc_rgb_convert_sse2[];
334 EXTERN(void) jsimd_ycc_rgb_convert_sse2
335   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
336    JSAMPARRAY output_buf, int num_rows);
337 EXTERN(void) jsimd_ycc_extrgb_convert_sse2
338   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
339    JSAMPARRAY output_buf, int num_rows);
340 EXTERN(void) jsimd_ycc_extrgbx_convert_sse2
341   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
342    JSAMPARRAY output_buf, int num_rows);
343 EXTERN(void) jsimd_ycc_extbgr_convert_sse2
344   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
345    JSAMPARRAY output_buf, int num_rows);
346 EXTERN(void) jsimd_ycc_extbgrx_convert_sse2
347   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
348    JSAMPARRAY output_buf, int num_rows);
349 EXTERN(void) jsimd_ycc_extxbgr_convert_sse2
350   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
351    JSAMPARRAY output_buf, int num_rows);
352 EXTERN(void) jsimd_ycc_extxrgb_convert_sse2
353   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
354    JSAMPARRAY output_buf, int num_rows);
355 
356 extern const int jconst_ycc_rgb_convert_avx2[];
357 EXTERN(void) jsimd_ycc_rgb_convert_avx2
358   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
359    JSAMPARRAY output_buf, int num_rows);
360 EXTERN(void) jsimd_ycc_extrgb_convert_avx2
361   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
362    JSAMPARRAY output_buf, int num_rows);
363 EXTERN(void) jsimd_ycc_extrgbx_convert_avx2
364   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
365    JSAMPARRAY output_buf, int num_rows);
366 EXTERN(void) jsimd_ycc_extbgr_convert_avx2
367   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
368    JSAMPARRAY output_buf, int num_rows);
369 EXTERN(void) jsimd_ycc_extbgrx_convert_avx2
370   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
371    JSAMPARRAY output_buf, int num_rows);
372 EXTERN(void) jsimd_ycc_extxbgr_convert_avx2
373   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
374    JSAMPARRAY output_buf, int num_rows);
375 EXTERN(void) jsimd_ycc_extxrgb_convert_avx2
376   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
377    JSAMPARRAY output_buf, int num_rows);
378 
379 EXTERN(void) jsimd_ycc_rgb_convert_neon
380   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
381    JSAMPARRAY output_buf, int num_rows);
382 EXTERN(void) jsimd_ycc_extrgb_convert_neon
383   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
384    JSAMPARRAY output_buf, int num_rows);
385 EXTERN(void) jsimd_ycc_extrgbx_convert_neon
386   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
387    JSAMPARRAY output_buf, int num_rows);
388 EXTERN(void) jsimd_ycc_extbgr_convert_neon
389   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
390    JSAMPARRAY output_buf, int num_rows);
391 EXTERN(void) jsimd_ycc_extbgrx_convert_neon
392   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
393    JSAMPARRAY output_buf, int num_rows);
394 EXTERN(void) jsimd_ycc_extxbgr_convert_neon
395   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
396    JSAMPARRAY output_buf, int num_rows);
397 EXTERN(void) jsimd_ycc_extxrgb_convert_neon
398   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
399    JSAMPARRAY output_buf, int num_rows);
400 EXTERN(void) jsimd_ycc_rgb565_convert_neon
401   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
402    JSAMPARRAY output_buf, int num_rows);
403 
404 EXTERN(void) jsimd_ycc_extrgb_convert_neon_slowst3
405   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
406    JSAMPARRAY output_buf, int num_rows);
407 EXTERN(void) jsimd_ycc_extbgr_convert_neon_slowst3
408   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
409    JSAMPARRAY output_buf, int num_rows);
410 
411 EXTERN(void) jsimd_ycc_rgb_convert_dspr2
412   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
413    JSAMPARRAY output_buf, int num_rows);
414 EXTERN(void) jsimd_ycc_extrgb_convert_dspr2
415   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
416    JSAMPARRAY output_buf, int num_rows);
417 EXTERN(void) jsimd_ycc_extrgbx_convert_dspr2
418   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
419    JSAMPARRAY output_buf, int num_rows);
420 EXTERN(void) jsimd_ycc_extbgr_convert_dspr2
421   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
422    JSAMPARRAY output_buf, int num_rows);
423 EXTERN(void) jsimd_ycc_extbgrx_convert_dspr2
424   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
425    JSAMPARRAY output_buf, int num_rows);
426 EXTERN(void) jsimd_ycc_extxbgr_convert_dspr2
427   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
428    JSAMPARRAY output_buf, int num_rows);
429 EXTERN(void) jsimd_ycc_extxrgb_convert_dspr2
430   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
431    JSAMPARRAY output_buf, int num_rows);
432 
433 EXTERN(void) jsimd_ycc_rgb_convert_mmi
434   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
435    JSAMPARRAY output_buf, int num_rows);
436 EXTERN(void) jsimd_ycc_extrgb_convert_mmi
437   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
438    JSAMPARRAY output_buf, int num_rows);
439 EXTERN(void) jsimd_ycc_extrgbx_convert_mmi
440   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
441    JSAMPARRAY output_buf, int num_rows);
442 EXTERN(void) jsimd_ycc_extbgr_convert_mmi
443   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
444    JSAMPARRAY output_buf, int num_rows);
445 EXTERN(void) jsimd_ycc_extbgrx_convert_mmi
446   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
447    JSAMPARRAY output_buf, int num_rows);
448 EXTERN(void) jsimd_ycc_extxbgr_convert_mmi
449   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
450    JSAMPARRAY output_buf, int num_rows);
451 EXTERN(void) jsimd_ycc_extxrgb_convert_mmi
452   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
453    JSAMPARRAY output_buf, int num_rows);
454 
455 EXTERN(void) jsimd_ycc_rgb_convert_altivec
456   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
457    JSAMPARRAY output_buf, int num_rows);
458 EXTERN(void) jsimd_ycc_extrgb_convert_altivec
459   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
460    JSAMPARRAY output_buf, int num_rows);
461 EXTERN(void) jsimd_ycc_extrgbx_convert_altivec
462   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
463    JSAMPARRAY output_buf, int num_rows);
464 EXTERN(void) jsimd_ycc_extbgr_convert_altivec
465   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
466    JSAMPARRAY output_buf, int num_rows);
467 EXTERN(void) jsimd_ycc_extbgrx_convert_altivec
468   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
469    JSAMPARRAY output_buf, int num_rows);
470 EXTERN(void) jsimd_ycc_extxbgr_convert_altivec
471   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
472    JSAMPARRAY output_buf, int num_rows);
473 EXTERN(void) jsimd_ycc_extxrgb_convert_altivec
474   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
475    JSAMPARRAY output_buf, int num_rows);
476 
477 /* NULL Colorspace Conversion */
478 EXTERN(void) jsimd_c_null_convert_dspr2
479   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
480    JDIMENSION output_row, int num_rows, int num_components);
481 
482 /* h2v1 Downsampling */
483 EXTERN(void) jsimd_h2v1_downsample_mmx
484   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
485    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
486 
487 EXTERN(void) jsimd_h2v1_downsample_sse2
488   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
489    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
490 
491 EXTERN(void) jsimd_h2v1_downsample_avx2
492   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
493    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
494 
495 EXTERN(void) jsimd_h2v1_downsample_neon
496   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
497    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
498 
499 EXTERN(void) jsimd_h2v1_downsample_dspr2
500   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
501    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
502 
503 EXTERN(void) jsimd_h2v1_downsample_altivec
504   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
505    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
506 
507 /* h2v2 Downsampling */
508 EXTERN(void) jsimd_h2v2_downsample_mmx
509   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
510    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
511 
512 EXTERN(void) jsimd_h2v2_downsample_sse2
513   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
514    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
515 
516 EXTERN(void) jsimd_h2v2_downsample_avx2
517   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
518    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
519 
520 EXTERN(void) jsimd_h2v2_downsample_neon
521   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
522    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
523 
524 EXTERN(void) jsimd_h2v2_downsample_dspr2
525   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
526    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
527 
528 EXTERN(void) jsimd_h2v2_downsample_mmi
529   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
530    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
531 
532 EXTERN(void) jsimd_h2v2_downsample_altivec
533   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
534    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
535 
536 /* h2v2 Smooth Downsampling */
537 EXTERN(void) jsimd_h2v2_smooth_downsample_dspr2
538   (JSAMPARRAY input_data, JSAMPARRAY output_data, JDIMENSION v_samp_factor,
539    int max_v_samp_factor, int smoothing_factor, JDIMENSION width_in_blocks,
540    JDIMENSION image_width);
541 
542 
543 /* Upsampling */
544 EXTERN(void) jsimd_h2v1_upsample_mmx
545   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
546    JSAMPARRAY *output_data_ptr);
547 EXTERN(void) jsimd_h2v2_upsample_mmx
548   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
549    JSAMPARRAY *output_data_ptr);
550 
551 EXTERN(void) jsimd_h2v1_upsample_sse2
552   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
553    JSAMPARRAY *output_data_ptr);
554 EXTERN(void) jsimd_h2v2_upsample_sse2
555   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
556    JSAMPARRAY *output_data_ptr);
557 
558 EXTERN(void) jsimd_h2v1_upsample_avx2
559   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
560    JSAMPARRAY *output_data_ptr);
561 EXTERN(void) jsimd_h2v2_upsample_avx2
562   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
563    JSAMPARRAY *output_data_ptr);
564 
565 EXTERN(void) jsimd_h2v1_upsample_dspr2
566   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
567    JSAMPARRAY *output_data_ptr);
568 EXTERN(void) jsimd_h2v2_upsample_dspr2
569   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
570    JSAMPARRAY *output_data_ptr);
571 
572 EXTERN(void) jsimd_int_upsample_dspr2
573   (UINT8 h_expand, UINT8 v_expand, JSAMPARRAY input_data,
574    JSAMPARRAY *output_data_ptr, JDIMENSION output_width,
575    int max_v_samp_factor);
576 
577 EXTERN(void) jsimd_h2v1_upsample_altivec
578   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
579    JSAMPARRAY *output_data_ptr);
580 EXTERN(void) jsimd_h2v2_upsample_altivec
581   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
582    JSAMPARRAY *output_data_ptr);
583 
584 /* Fancy Upsampling */
585 EXTERN(void) jsimd_h2v1_fancy_upsample_mmx
586   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
587    JSAMPARRAY *output_data_ptr);
588 EXTERN(void) jsimd_h2v2_fancy_upsample_mmx
589   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
590    JSAMPARRAY *output_data_ptr);
591 
592 extern const int jconst_fancy_upsample_sse2[];
593 EXTERN(void) jsimd_h2v1_fancy_upsample_sse2
594   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
595    JSAMPARRAY *output_data_ptr);
596 EXTERN(void) jsimd_h2v2_fancy_upsample_sse2
597   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
598    JSAMPARRAY *output_data_ptr);
599 
600 extern const int jconst_fancy_upsample_avx2[];
601 EXTERN(void) jsimd_h2v1_fancy_upsample_avx2
602   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
603    JSAMPARRAY *output_data_ptr);
604 EXTERN(void) jsimd_h2v2_fancy_upsample_avx2
605   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
606    JSAMPARRAY *output_data_ptr);
607 
608 EXTERN(void) jsimd_h2v1_fancy_upsample_neon
609   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
610    JSAMPARRAY *output_data_ptr);
611 
612 EXTERN(void) jsimd_h2v1_fancy_upsample_dspr2
613   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
614    JSAMPARRAY *output_data_ptr);
615 EXTERN(void) jsimd_h2v2_fancy_upsample_dspr2
616   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
617    JSAMPARRAY *output_data_ptr);
618 
619 EXTERN(void) jsimd_h2v2_fancy_upsample_mmi
620   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
621    JSAMPARRAY *output_data_ptr);
622 
623 EXTERN(void) jsimd_h2v1_fancy_upsample_altivec
624   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
625    JSAMPARRAY *output_data_ptr);
626 EXTERN(void) jsimd_h2v2_fancy_upsample_altivec
627   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
628    JSAMPARRAY *output_data_ptr);
629 
630 /* Merged Upsampling */
631 EXTERN(void) jsimd_h2v1_merged_upsample_mmx
632   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
633    JSAMPARRAY output_buf);
634 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_mmx
635   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
636    JSAMPARRAY output_buf);
637 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_mmx
638   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
639    JSAMPARRAY output_buf);
640 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_mmx
641   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
642    JSAMPARRAY output_buf);
643 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_mmx
644   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
645    JSAMPARRAY output_buf);
646 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_mmx
647   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
648    JSAMPARRAY output_buf);
649 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_mmx
650   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
651    JSAMPARRAY output_buf);
652 
653 EXTERN(void) jsimd_h2v2_merged_upsample_mmx
654   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
655    JSAMPARRAY output_buf);
656 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_mmx
657   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
658    JSAMPARRAY output_buf);
659 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_mmx
660   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
661    JSAMPARRAY output_buf);
662 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_mmx
663   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
664    JSAMPARRAY output_buf);
665 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_mmx
666   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
667    JSAMPARRAY output_buf);
668 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_mmx
669   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
670    JSAMPARRAY output_buf);
671 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_mmx
672   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
673    JSAMPARRAY output_buf);
674 
675 extern const int jconst_merged_upsample_sse2[];
676 EXTERN(void) jsimd_h2v1_merged_upsample_sse2
677   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
678    JSAMPARRAY output_buf);
679 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_sse2
680   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
681    JSAMPARRAY output_buf);
682 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_sse2
683   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
684    JSAMPARRAY output_buf);
685 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_sse2
686   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
687    JSAMPARRAY output_buf);
688 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_sse2
689   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
690    JSAMPARRAY output_buf);
691 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_sse2
692   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
693    JSAMPARRAY output_buf);
694 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_sse2
695   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
696    JSAMPARRAY output_buf);
697 
698 EXTERN(void) jsimd_h2v2_merged_upsample_sse2
699   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
700    JSAMPARRAY output_buf);
701 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_sse2
702   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
703    JSAMPARRAY output_buf);
704 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_sse2
705   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
706    JSAMPARRAY output_buf);
707 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_sse2
708   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
709    JSAMPARRAY output_buf);
710 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_sse2
711   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
712    JSAMPARRAY output_buf);
713 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_sse2
714   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
715    JSAMPARRAY output_buf);
716 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_sse2
717   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
718    JSAMPARRAY output_buf);
719 
720 extern const int jconst_merged_upsample_avx2[];
721 EXTERN(void) jsimd_h2v1_merged_upsample_avx2
722   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
723    JSAMPARRAY output_buf);
724 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_avx2
725   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
726    JSAMPARRAY output_buf);
727 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_avx2
728   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
729    JSAMPARRAY output_buf);
730 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_avx2
731   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
732    JSAMPARRAY output_buf);
733 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_avx2
734   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
735    JSAMPARRAY output_buf);
736 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_avx2
737   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
738    JSAMPARRAY output_buf);
739 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_avx2
740   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
741    JSAMPARRAY output_buf);
742 
743 EXTERN(void) jsimd_h2v2_merged_upsample_avx2
744   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
745    JSAMPARRAY output_buf);
746 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_avx2
747   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
748    JSAMPARRAY output_buf);
749 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_avx2
750   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
751    JSAMPARRAY output_buf);
752 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_avx2
753   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
754    JSAMPARRAY output_buf);
755 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_avx2
756   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
757    JSAMPARRAY output_buf);
758 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_avx2
759   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
760    JSAMPARRAY output_buf);
761 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_avx2
762   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
763    JSAMPARRAY output_buf);
764 
765 EXTERN(void) jsimd_h2v1_merged_upsample_dspr2
766   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
767    JSAMPARRAY output_buf, JSAMPLE *range);
768 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_dspr2
769   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
770    JSAMPARRAY output_buf, JSAMPLE *range);
771 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_dspr2
772   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
773    JSAMPARRAY output_buf, JSAMPLE *range);
774 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_dspr2
775   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
776    JSAMPARRAY output_buf, JSAMPLE *range);
777 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_dspr2
778   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
779    JSAMPARRAY output_buf, JSAMPLE *range);
780 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_dspr2
781   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
782    JSAMPARRAY output_buf, JSAMPLE *range);
783 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_dspr2
784   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
785    JSAMPARRAY output_buf, JSAMPLE *range);
786 
787 EXTERN(void) jsimd_h2v2_merged_upsample_dspr2
788   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
789    JSAMPARRAY output_buf, JSAMPLE *range);
790 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_dspr2
791   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
792    JSAMPARRAY output_buf, JSAMPLE *range);
793 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_dspr2
794   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
795    JSAMPARRAY output_buf, JSAMPLE *range);
796 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_dspr2
797   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
798    JSAMPARRAY output_buf, JSAMPLE *range);
799 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_dspr2
800   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
801    JSAMPARRAY output_buf, JSAMPLE *range);
802 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_dspr2
803   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
804    JSAMPARRAY output_buf, JSAMPLE *range);
805 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_dspr2
806   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
807    JSAMPARRAY output_buf, JSAMPLE *range);
808 
809 EXTERN(void) jsimd_h2v1_merged_upsample_altivec
810   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
811    JSAMPARRAY output_buf);
812 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_altivec
813   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
814    JSAMPARRAY output_buf);
815 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_altivec
816   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
817    JSAMPARRAY output_buf);
818 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_altivec
819   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
820    JSAMPARRAY output_buf);
821 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_altivec
822   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
823    JSAMPARRAY output_buf);
824 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_altivec
825   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
826    JSAMPARRAY output_buf);
827 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_altivec
828   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
829    JSAMPARRAY output_buf);
830 
831 EXTERN(void) jsimd_h2v2_merged_upsample_altivec
832   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
833    JSAMPARRAY output_buf);
834 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_altivec
835   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
836    JSAMPARRAY output_buf);
837 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_altivec
838   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
839    JSAMPARRAY output_buf);
840 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_altivec
841   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
842    JSAMPARRAY output_buf);
843 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_altivec
844   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
845    JSAMPARRAY output_buf);
846 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_altivec
847   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
848    JSAMPARRAY output_buf);
849 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_altivec
850   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
851    JSAMPARRAY output_buf);
852 
853 /* Sample Conversion */
854 EXTERN(void) jsimd_convsamp_mmx
855   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
856 
857 EXTERN(void) jsimd_convsamp_sse2
858   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
859 
860 EXTERN(void) jsimd_convsamp_avx2
861   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
862 
863 EXTERN(void) jsimd_convsamp_neon
864   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
865 
866 EXTERN(void) jsimd_convsamp_dspr2
867   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
868 
869 EXTERN(void) jsimd_convsamp_altivec
870   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
871 
872 /* Floating Point Sample Conversion */
873 EXTERN(void) jsimd_convsamp_float_3dnow
874   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
875 
876 EXTERN(void) jsimd_convsamp_float_sse
877   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
878 
879 EXTERN(void) jsimd_convsamp_float_sse2
880   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
881 
882 EXTERN(void) jsimd_convsamp_float_dspr2
883   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
884 
885 /* Accurate Integer Forward DCT */
886 EXTERN(void) jsimd_fdct_islow_mmx(DCTELEM *data);
887 
888 extern const int jconst_fdct_islow_sse2[];
889 EXTERN(void) jsimd_fdct_islow_sse2(DCTELEM *data);
890 
891 extern const int jconst_fdct_islow_avx2[];
892 EXTERN(void) jsimd_fdct_islow_avx2(DCTELEM *data);
893 
894 EXTERN(void) jsimd_fdct_islow_neon(DCTELEM *data);
895 
896 EXTERN(void) jsimd_fdct_islow_dspr2(DCTELEM *data);
897 
898 EXTERN(void) jsimd_fdct_islow_mmi(DCTELEM *data);
899 
900 EXTERN(void) jsimd_fdct_islow_altivec(DCTELEM *data);
901 
902 /* Fast Integer Forward DCT */
903 EXTERN(void) jsimd_fdct_ifast_mmx(DCTELEM *data);
904 
905 extern const int jconst_fdct_ifast_sse2[];
906 EXTERN(void) jsimd_fdct_ifast_sse2(DCTELEM *data);
907 
908 EXTERN(void) jsimd_fdct_ifast_neon(DCTELEM *data);
909 
910 EXTERN(void) jsimd_fdct_ifast_dspr2(DCTELEM *data);
911 
912 EXTERN(void) jsimd_fdct_ifast_altivec(DCTELEM *data);
913 
914 /* Floating Point Forward DCT */
915 EXTERN(void) jsimd_fdct_float_3dnow(FAST_FLOAT *data);
916 
917 extern const int jconst_fdct_float_sse[];
918 EXTERN(void) jsimd_fdct_float_sse(FAST_FLOAT *data);
919 
920 /* Quantization */
921 EXTERN(void) jsimd_quantize_mmx
922   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
923 
924 EXTERN(void) jsimd_quantize_sse2
925   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
926 
927 EXTERN(void) jsimd_quantize_avx2
928   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
929 
930 EXTERN(void) jsimd_quantize_neon
931   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
932 
933 EXTERN(void) jsimd_quantize_dspr2
934   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
935 
936 EXTERN(void) jsimd_quantize_mmi
937   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
938 
939 EXTERN(void) jsimd_quantize_altivec
940   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
941 
942 /* Floating Point Quantization */
943 EXTERN(void) jsimd_quantize_float_3dnow
944   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
945 
946 EXTERN(void) jsimd_quantize_float_sse
947   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
948 
949 EXTERN(void) jsimd_quantize_float_sse2
950   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
951 
952 EXTERN(void) jsimd_quantize_float_dspr2
953   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
954 
955 /* Scaled Inverse DCT */
956 EXTERN(void) jsimd_idct_2x2_mmx
957   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
958    JDIMENSION output_col);
959 EXTERN(void) jsimd_idct_4x4_mmx
960   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
961    JDIMENSION output_col);
962 
963 extern const int jconst_idct_red_sse2[];
964 EXTERN(void) jsimd_idct_2x2_sse2
965   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
966    JDIMENSION output_col);
967 EXTERN(void) jsimd_idct_4x4_sse2
968   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
969    JDIMENSION output_col);
970 
971 EXTERN(void) jsimd_idct_2x2_neon
972   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
973    JDIMENSION output_col);
974 EXTERN(void) jsimd_idct_4x4_neon
975   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
976    JDIMENSION output_col);
977 
978 EXTERN(void) jsimd_idct_2x2_dspr2
979   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
980    JDIMENSION output_col);
981 EXTERN(void) jsimd_idct_4x4_dspr2
982   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
983    JDIMENSION output_col, int *workspace);
984 EXTERN(void) jsimd_idct_6x6_dspr2
985   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
986    JDIMENSION output_col);
987 EXTERN(void) jsimd_idct_12x12_pass1_dspr2
988   (JCOEFPTR coef_block, void *dct_table, int *workspace);
989 EXTERN(void) jsimd_idct_12x12_pass2_dspr2
990   (int *workspace, int *output);
991 
992 /* Accurate Integer Inverse DCT */
993 EXTERN(void) jsimd_idct_islow_mmx
994   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
995    JDIMENSION output_col);
996 
997 extern const int jconst_idct_islow_sse2[];
998 EXTERN(void) jsimd_idct_islow_sse2
999   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1000    JDIMENSION output_col);
1001 
1002 extern const int jconst_idct_islow_avx2[];
1003 EXTERN(void) jsimd_idct_islow_avx2
1004   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1005    JDIMENSION output_col);
1006 
1007 EXTERN(void) jsimd_idct_islow_neon
1008   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1009    JDIMENSION output_col);
1010 
1011 EXTERN(void) jsimd_idct_islow_dspr2
1012   (void *dct_table, JCOEFPTR coef_block, int *output_buf, JSAMPLE *output_col);
1013 
1014 EXTERN(void) jsimd_idct_islow_mmi
1015   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1016    JDIMENSION output_col);
1017 
1018 EXTERN(void) jsimd_idct_islow_altivec
1019   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1020    JDIMENSION output_col);
1021 
1022 /* Fast Integer Inverse DCT */
1023 EXTERN(void) jsimd_idct_ifast_mmx
1024   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1025    JDIMENSION output_col);
1026 
1027 extern const int jconst_idct_ifast_sse2[];
1028 EXTERN(void) jsimd_idct_ifast_sse2
1029   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1030    JDIMENSION output_col);
1031 
1032 EXTERN(void) jsimd_idct_ifast_neon
1033   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1034    JDIMENSION output_col);
1035 
1036 EXTERN(void) jsimd_idct_ifast_cols_dspr2
1037   (JCOEF *inptr, IFAST_MULT_TYPE *quantptr, DCTELEM *wsptr,
1038    const int *idct_coefs);
1039 EXTERN(void) jsimd_idct_ifast_rows_dspr2
1040   (DCTELEM *wsptr, JSAMPARRAY output_buf, JDIMENSION output_col,
1041    const int *idct_coefs);
1042 
1043 EXTERN(void) jsimd_idct_ifast_altivec
1044   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1045    JDIMENSION output_col);
1046 
1047 /* Floating Point Inverse DCT */
1048 EXTERN(void) jsimd_idct_float_3dnow
1049   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1050    JDIMENSION output_col);
1051 
1052 extern const int jconst_idct_float_sse[];
1053 EXTERN(void) jsimd_idct_float_sse
1054   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1055    JDIMENSION output_col);
1056 
1057 extern const int jconst_idct_float_sse2[];
1058 EXTERN(void) jsimd_idct_float_sse2
1059   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1060    JDIMENSION output_col);
1061 
1062 /* Huffman coding */
1063 extern const int jconst_huff_encode_one_block[];
1064 EXTERN(JOCTET *) jsimd_huff_encode_one_block_sse2
1065   (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
1066    c_derived_tbl *dctbl, c_derived_tbl *actbl);
1067 
1068 EXTERN(JOCTET *) jsimd_huff_encode_one_block_neon
1069   (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
1070    c_derived_tbl *dctbl, c_derived_tbl *actbl);
1071 
1072 EXTERN(JOCTET *) jsimd_huff_encode_one_block_neon_slowtbl
1073   (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
1074    c_derived_tbl *dctbl, c_derived_tbl *actbl);
1075 
1076 /* Progressive Huffman encoding */
1077 EXTERN(void) jsimd_encode_mcu_AC_first_prepare_sse2
1078   (const JCOEF *block, const int *jpeg_natural_order_start, int Sl, int Al,
1079    JCOEF *values, size_t *zerobits);
1080 
1081 EXTERN(int) jsimd_encode_mcu_AC_refine_prepare_sse2
1082   (const JCOEF *block, const int *jpeg_natural_order_start, int Sl, int Al,
1083    JCOEF *absvalues, size_t *bits);
1084