1 /*
2  * simd/jsimd.h
3  *
4  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
5  * Copyright (C) 2011, 2014-2016, 2018, 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_rgb_convert_dspr2
405   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
406    JSAMPARRAY output_buf, int num_rows);
407 EXTERN(void) jsimd_ycc_extrgb_convert_dspr2
408   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
409    JSAMPARRAY output_buf, int num_rows);
410 EXTERN(void) jsimd_ycc_extrgbx_convert_dspr2
411   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
412    JSAMPARRAY output_buf, int num_rows);
413 EXTERN(void) jsimd_ycc_extbgr_convert_dspr2
414   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
415    JSAMPARRAY output_buf, int num_rows);
416 EXTERN(void) jsimd_ycc_extbgrx_convert_dspr2
417   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
418    JSAMPARRAY output_buf, int num_rows);
419 EXTERN(void) jsimd_ycc_extxbgr_convert_dspr2
420   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
421    JSAMPARRAY output_buf, int num_rows);
422 EXTERN(void) jsimd_ycc_extxrgb_convert_dspr2
423   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
424    JSAMPARRAY output_buf, int num_rows);
425 
426 EXTERN(void) jsimd_ycc_rgb_convert_mmi
427   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
428    JSAMPARRAY output_buf, int num_rows);
429 EXTERN(void) jsimd_ycc_extrgb_convert_mmi
430   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
431    JSAMPARRAY output_buf, int num_rows);
432 EXTERN(void) jsimd_ycc_extrgbx_convert_mmi
433   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
434    JSAMPARRAY output_buf, int num_rows);
435 EXTERN(void) jsimd_ycc_extbgr_convert_mmi
436   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
437    JSAMPARRAY output_buf, int num_rows);
438 EXTERN(void) jsimd_ycc_extbgrx_convert_mmi
439   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
440    JSAMPARRAY output_buf, int num_rows);
441 EXTERN(void) jsimd_ycc_extxbgr_convert_mmi
442   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
443    JSAMPARRAY output_buf, int num_rows);
444 EXTERN(void) jsimd_ycc_extxrgb_convert_mmi
445   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
446    JSAMPARRAY output_buf, int num_rows);
447 
448 EXTERN(void) jsimd_ycc_rgb_convert_altivec
449   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
450    JSAMPARRAY output_buf, int num_rows);
451 EXTERN(void) jsimd_ycc_extrgb_convert_altivec
452   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
453    JSAMPARRAY output_buf, int num_rows);
454 EXTERN(void) jsimd_ycc_extrgbx_convert_altivec
455   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
456    JSAMPARRAY output_buf, int num_rows);
457 EXTERN(void) jsimd_ycc_extbgr_convert_altivec
458   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
459    JSAMPARRAY output_buf, int num_rows);
460 EXTERN(void) jsimd_ycc_extbgrx_convert_altivec
461   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
462    JSAMPARRAY output_buf, int num_rows);
463 EXTERN(void) jsimd_ycc_extxbgr_convert_altivec
464   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
465    JSAMPARRAY output_buf, int num_rows);
466 EXTERN(void) jsimd_ycc_extxrgb_convert_altivec
467   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
468    JSAMPARRAY output_buf, int num_rows);
469 
470 /* NULL Colorspace Conversion */
471 EXTERN(void) jsimd_c_null_convert_dspr2
472   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
473    JDIMENSION output_row, int num_rows, int num_components);
474 
475 /* h2v1 Downsampling */
476 EXTERN(void) jsimd_h2v1_downsample_mmx
477   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
478    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
479 
480 EXTERN(void) jsimd_h2v1_downsample_sse2
481   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
482    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
483 
484 EXTERN(void) jsimd_h2v1_downsample_avx2
485   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
486    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
487 
488 EXTERN(void) jsimd_h2v1_downsample_neon
489   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
490    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
491 
492 EXTERN(void) jsimd_h2v1_downsample_dspr2
493   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
494    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
495 
496 EXTERN(void) jsimd_h2v1_downsample_altivec
497   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
498    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
499 
500 /* h2v2 Downsampling */
501 EXTERN(void) jsimd_h2v2_downsample_mmx
502   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
503    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
504 
505 EXTERN(void) jsimd_h2v2_downsample_sse2
506   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
507    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
508 
509 EXTERN(void) jsimd_h2v2_downsample_avx2
510   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
511    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
512 
513 EXTERN(void) jsimd_h2v2_downsample_neon
514   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
515    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
516 
517 EXTERN(void) jsimd_h2v2_downsample_dspr2
518   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
519    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
520 
521 EXTERN(void) jsimd_h2v2_downsample_mmi
522   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
523    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
524 
525 EXTERN(void) jsimd_h2v2_downsample_altivec
526   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
527    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
528 
529 /* h2v2 Smooth Downsampling */
530 EXTERN(void) jsimd_h2v2_smooth_downsample_dspr2
531   (JSAMPARRAY input_data, JSAMPARRAY output_data, JDIMENSION v_samp_factor,
532    int max_v_samp_factor, int smoothing_factor, JDIMENSION width_in_blocks,
533    JDIMENSION image_width);
534 
535 
536 /* Upsampling */
537 EXTERN(void) jsimd_h2v1_upsample_mmx
538   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
539    JSAMPARRAY *output_data_ptr);
540 EXTERN(void) jsimd_h2v2_upsample_mmx
541   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
542    JSAMPARRAY *output_data_ptr);
543 
544 EXTERN(void) jsimd_h2v1_upsample_sse2
545   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
546    JSAMPARRAY *output_data_ptr);
547 EXTERN(void) jsimd_h2v2_upsample_sse2
548   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
549    JSAMPARRAY *output_data_ptr);
550 
551 EXTERN(void) jsimd_h2v1_upsample_avx2
552   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
553    JSAMPARRAY *output_data_ptr);
554 EXTERN(void) jsimd_h2v2_upsample_avx2
555   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
556    JSAMPARRAY *output_data_ptr);
557 
558 EXTERN(void) jsimd_h2v1_upsample_neon
559   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
560    JSAMPARRAY *output_data_ptr);
561 EXTERN(void) jsimd_h2v2_upsample_neon
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 EXTERN(void) jsimd_h2v2_fancy_upsample_neon
612   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
613    JSAMPARRAY *output_data_ptr);
614 EXTERN(void) jsimd_h1v2_fancy_upsample_neon
615   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
616    JSAMPARRAY *output_data_ptr);
617 
618 EXTERN(void) jsimd_h2v1_fancy_upsample_dspr2
619   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
620    JSAMPARRAY *output_data_ptr);
621 EXTERN(void) jsimd_h2v2_fancy_upsample_dspr2
622   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
623    JSAMPARRAY *output_data_ptr);
624 
625 EXTERN(void) jsimd_h2v2_fancy_upsample_mmi
626   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
627    JSAMPARRAY *output_data_ptr);
628 
629 EXTERN(void) jsimd_h2v1_fancy_upsample_altivec
630   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
631    JSAMPARRAY *output_data_ptr);
632 EXTERN(void) jsimd_h2v2_fancy_upsample_altivec
633   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
634    JSAMPARRAY *output_data_ptr);
635 
636 /* Merged Upsampling */
637 EXTERN(void) jsimd_h2v1_merged_upsample_mmx
638   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
639    JSAMPARRAY output_buf);
640 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_mmx
641   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
642    JSAMPARRAY output_buf);
643 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_mmx
644   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
645    JSAMPARRAY output_buf);
646 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_mmx
647   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
648    JSAMPARRAY output_buf);
649 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_mmx
650   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
651    JSAMPARRAY output_buf);
652 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_mmx
653   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
654    JSAMPARRAY output_buf);
655 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_mmx
656   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
657    JSAMPARRAY output_buf);
658 
659 EXTERN(void) jsimd_h2v2_merged_upsample_mmx
660   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
661    JSAMPARRAY output_buf);
662 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_mmx
663   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
664    JSAMPARRAY output_buf);
665 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_mmx
666   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
667    JSAMPARRAY output_buf);
668 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_mmx
669   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
670    JSAMPARRAY output_buf);
671 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_mmx
672   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
673    JSAMPARRAY output_buf);
674 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_mmx
675   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
676    JSAMPARRAY output_buf);
677 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_mmx
678   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
679    JSAMPARRAY output_buf);
680 
681 extern const int jconst_merged_upsample_sse2[];
682 EXTERN(void) jsimd_h2v1_merged_upsample_sse2
683   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
684    JSAMPARRAY output_buf);
685 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_sse2
686   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
687    JSAMPARRAY output_buf);
688 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_sse2
689   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
690    JSAMPARRAY output_buf);
691 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_sse2
692   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
693    JSAMPARRAY output_buf);
694 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_sse2
695   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
696    JSAMPARRAY output_buf);
697 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_sse2
698   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
699    JSAMPARRAY output_buf);
700 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_sse2
701   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
702    JSAMPARRAY output_buf);
703 
704 EXTERN(void) jsimd_h2v2_merged_upsample_sse2
705   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
706    JSAMPARRAY output_buf);
707 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_sse2
708   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
709    JSAMPARRAY output_buf);
710 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_sse2
711   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
712    JSAMPARRAY output_buf);
713 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_sse2
714   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
715    JSAMPARRAY output_buf);
716 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_sse2
717   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
718    JSAMPARRAY output_buf);
719 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_sse2
720   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
721    JSAMPARRAY output_buf);
722 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_sse2
723   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
724    JSAMPARRAY output_buf);
725 
726 extern const int jconst_merged_upsample_avx2[];
727 EXTERN(void) jsimd_h2v1_merged_upsample_avx2
728   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
729    JSAMPARRAY output_buf);
730 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_avx2
731   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
732    JSAMPARRAY output_buf);
733 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_avx2
734   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
735    JSAMPARRAY output_buf);
736 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_avx2
737   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
738    JSAMPARRAY output_buf);
739 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_avx2
740   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
741    JSAMPARRAY output_buf);
742 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_avx2
743   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
744    JSAMPARRAY output_buf);
745 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_avx2
746   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
747    JSAMPARRAY output_buf);
748 
749 EXTERN(void) jsimd_h2v2_merged_upsample_avx2
750   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
751    JSAMPARRAY output_buf);
752 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_avx2
753   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
754    JSAMPARRAY output_buf);
755 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_avx2
756   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
757    JSAMPARRAY output_buf);
758 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_avx2
759   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
760    JSAMPARRAY output_buf);
761 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_avx2
762   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
763    JSAMPARRAY output_buf);
764 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_avx2
765   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
766    JSAMPARRAY output_buf);
767 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_avx2
768   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
769    JSAMPARRAY output_buf);
770 
771 EXTERN(void) jsimd_h2v1_merged_upsample_neon
772   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
773    JSAMPARRAY output_buf);
774 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_neon
775   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
776    JSAMPARRAY output_buf);
777 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_neon
778   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
779    JSAMPARRAY output_buf);
780 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_neon
781   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
782    JSAMPARRAY output_buf);
783 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_neon
784   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
785    JSAMPARRAY output_buf);
786 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_neon
787   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
788    JSAMPARRAY output_buf);
789 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_neon
790   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
791    JSAMPARRAY output_buf);
792 
793 EXTERN(void) jsimd_h2v2_merged_upsample_neon
794   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
795    JSAMPARRAY output_buf);
796 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_neon
797   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
798    JSAMPARRAY output_buf);
799 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_neon
800   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
801    JSAMPARRAY output_buf);
802 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_neon
803   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
804    JSAMPARRAY output_buf);
805 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_neon
806   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
807    JSAMPARRAY output_buf);
808 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_neon
809   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
810    JSAMPARRAY output_buf);
811 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_neon
812   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
813    JSAMPARRAY output_buf);
814 
815 EXTERN(void) jsimd_h2v1_merged_upsample_dspr2
816   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
817    JSAMPARRAY output_buf, JSAMPLE *range);
818 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_dspr2
819   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
820    JSAMPARRAY output_buf, JSAMPLE *range);
821 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_dspr2
822   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
823    JSAMPARRAY output_buf, JSAMPLE *range);
824 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_dspr2
825   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
826    JSAMPARRAY output_buf, JSAMPLE *range);
827 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_dspr2
828   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
829    JSAMPARRAY output_buf, JSAMPLE *range);
830 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_dspr2
831   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
832    JSAMPARRAY output_buf, JSAMPLE *range);
833 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_dspr2
834   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
835    JSAMPARRAY output_buf, JSAMPLE *range);
836 
837 EXTERN(void) jsimd_h2v2_merged_upsample_dspr2
838   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
839    JSAMPARRAY output_buf, JSAMPLE *range);
840 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_dspr2
841   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
842    JSAMPARRAY output_buf, JSAMPLE *range);
843 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_dspr2
844   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
845    JSAMPARRAY output_buf, JSAMPLE *range);
846 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_dspr2
847   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
848    JSAMPARRAY output_buf, JSAMPLE *range);
849 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_dspr2
850   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
851    JSAMPARRAY output_buf, JSAMPLE *range);
852 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_dspr2
853   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
854    JSAMPARRAY output_buf, JSAMPLE *range);
855 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_dspr2
856   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
857    JSAMPARRAY output_buf, JSAMPLE *range);
858 
859 EXTERN(void) jsimd_h2v1_merged_upsample_altivec
860   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
861    JSAMPARRAY output_buf);
862 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_altivec
863   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
864    JSAMPARRAY output_buf);
865 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_altivec
866   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
867    JSAMPARRAY output_buf);
868 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_altivec
869   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
870    JSAMPARRAY output_buf);
871 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_altivec
872   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
873    JSAMPARRAY output_buf);
874 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_altivec
875   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
876    JSAMPARRAY output_buf);
877 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_altivec
878   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
879    JSAMPARRAY output_buf);
880 
881 EXTERN(void) jsimd_h2v2_merged_upsample_altivec
882   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
883    JSAMPARRAY output_buf);
884 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_altivec
885   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
886    JSAMPARRAY output_buf);
887 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_altivec
888   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
889    JSAMPARRAY output_buf);
890 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_altivec
891   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
892    JSAMPARRAY output_buf);
893 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_altivec
894   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
895    JSAMPARRAY output_buf);
896 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_altivec
897   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
898    JSAMPARRAY output_buf);
899 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_altivec
900   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
901    JSAMPARRAY output_buf);
902 
903 /* Sample Conversion */
904 EXTERN(void) jsimd_convsamp_mmx
905   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
906 
907 EXTERN(void) jsimd_convsamp_sse2
908   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
909 
910 EXTERN(void) jsimd_convsamp_avx2
911   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
912 
913 EXTERN(void) jsimd_convsamp_neon
914   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
915 
916 EXTERN(void) jsimd_convsamp_dspr2
917   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
918 
919 EXTERN(void) jsimd_convsamp_altivec
920   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
921 
922 /* Floating Point Sample Conversion */
923 EXTERN(void) jsimd_convsamp_float_3dnow
924   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
925 
926 EXTERN(void) jsimd_convsamp_float_sse
927   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
928 
929 EXTERN(void) jsimd_convsamp_float_sse2
930   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
931 
932 EXTERN(void) jsimd_convsamp_float_dspr2
933   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
934 
935 /* Slow Integer Forward DCT */
936 EXTERN(void) jsimd_fdct_islow_mmx(DCTELEM *data);
937 
938 extern const int jconst_fdct_islow_sse2[];
939 EXTERN(void) jsimd_fdct_islow_sse2(DCTELEM *data);
940 
941 extern const int jconst_fdct_islow_avx2[];
942 EXTERN(void) jsimd_fdct_islow_avx2(DCTELEM *data);
943 
944 EXTERN(void) jsimd_fdct_islow_neon(DCTELEM *data);
945 
946 EXTERN(void) jsimd_fdct_islow_dspr2(DCTELEM *data);
947 
948 EXTERN(void) jsimd_fdct_islow_mmi(DCTELEM *data);
949 
950 EXTERN(void) jsimd_fdct_islow_altivec(DCTELEM *data);
951 
952 /* Fast Integer Forward DCT */
953 EXTERN(void) jsimd_fdct_ifast_mmx(DCTELEM *data);
954 
955 extern const int jconst_fdct_ifast_sse2[];
956 EXTERN(void) jsimd_fdct_ifast_sse2(DCTELEM *data);
957 
958 EXTERN(void) jsimd_fdct_ifast_neon(DCTELEM *data);
959 
960 EXTERN(void) jsimd_fdct_ifast_dspr2(DCTELEM *data);
961 
962 EXTERN(void) jsimd_fdct_ifast_altivec(DCTELEM *data);
963 
964 /* Floating Point Forward DCT */
965 EXTERN(void) jsimd_fdct_float_3dnow(FAST_FLOAT *data);
966 
967 extern const int jconst_fdct_float_sse[];
968 EXTERN(void) jsimd_fdct_float_sse(FAST_FLOAT *data);
969 
970 /* Quantization */
971 EXTERN(void) jsimd_quantize_mmx
972   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
973 
974 EXTERN(void) jsimd_quantize_sse2
975   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
976 
977 EXTERN(void) jsimd_quantize_avx2
978   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
979 
980 EXTERN(void) jsimd_quantize_neon
981   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
982 
983 EXTERN(void) jsimd_quantize_dspr2
984   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
985 
986 EXTERN(void) jsimd_quantize_mmi
987   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
988 
989 EXTERN(void) jsimd_quantize_altivec
990   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
991 
992 /* Floating Point Quantization */
993 EXTERN(void) jsimd_quantize_float_3dnow
994   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
995 
996 EXTERN(void) jsimd_quantize_float_sse
997   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
998 
999 EXTERN(void) jsimd_quantize_float_sse2
1000   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
1001 
1002 EXTERN(void) jsimd_quantize_float_dspr2
1003   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
1004 
1005 /* Scaled Inverse DCT */
1006 EXTERN(void) jsimd_idct_2x2_mmx
1007   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1008    JDIMENSION output_col);
1009 EXTERN(void) jsimd_idct_4x4_mmx
1010   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1011    JDIMENSION output_col);
1012 
1013 extern const int jconst_idct_red_sse2[];
1014 EXTERN(void) jsimd_idct_2x2_sse2
1015   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1016    JDIMENSION output_col);
1017 EXTERN(void) jsimd_idct_4x4_sse2
1018   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1019    JDIMENSION output_col);
1020 
1021 EXTERN(void) jsimd_idct_2x2_neon
1022   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1023    JDIMENSION output_col);
1024 EXTERN(void) jsimd_idct_4x4_neon
1025   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1026    JDIMENSION output_col);
1027 
1028 EXTERN(void) jsimd_idct_2x2_dspr2
1029   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1030    JDIMENSION output_col);
1031 EXTERN(void) jsimd_idct_4x4_dspr2
1032   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1033    JDIMENSION output_col, int *workspace);
1034 EXTERN(void) jsimd_idct_6x6_dspr2
1035   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1036    JDIMENSION output_col);
1037 EXTERN(void) jsimd_idct_12x12_pass1_dspr2
1038   (JCOEFPTR coef_block, void *dct_table, int *workspace);
1039 EXTERN(void) jsimd_idct_12x12_pass2_dspr2
1040   (int *workspace, int *output);
1041 
1042 /* Slow Integer Inverse DCT */
1043 EXTERN(void) jsimd_idct_islow_mmx
1044   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1045    JDIMENSION output_col);
1046 
1047 extern const int jconst_idct_islow_sse2[];
1048 EXTERN(void) jsimd_idct_islow_sse2
1049   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1050    JDIMENSION output_col);
1051 
1052 extern const int jconst_idct_islow_avx2[];
1053 EXTERN(void) jsimd_idct_islow_avx2
1054   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1055    JDIMENSION output_col);
1056 
1057 EXTERN(void) jsimd_idct_islow_neon
1058   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1059    JDIMENSION output_col);
1060 
1061 EXTERN(void) jsimd_idct_islow_dspr2
1062   (void *dct_table, JCOEFPTR coef_block, int *output_buf, JSAMPLE *output_col);
1063 
1064 EXTERN(void) jsimd_idct_islow_mmi
1065   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1066    JDIMENSION output_col);
1067 
1068 EXTERN(void) jsimd_idct_islow_altivec
1069   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1070    JDIMENSION output_col);
1071 
1072 /* Fast Integer Inverse DCT */
1073 EXTERN(void) jsimd_idct_ifast_mmx
1074   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1075    JDIMENSION output_col);
1076 
1077 extern const int jconst_idct_ifast_sse2[];
1078 EXTERN(void) jsimd_idct_ifast_sse2
1079   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1080    JDIMENSION output_col);
1081 
1082 EXTERN(void) jsimd_idct_ifast_neon
1083   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1084    JDIMENSION output_col);
1085 
1086 EXTERN(void) jsimd_idct_ifast_cols_dspr2
1087   (JCOEF *inptr, IFAST_MULT_TYPE *quantptr, DCTELEM *wsptr,
1088    const int *idct_coefs);
1089 EXTERN(void) jsimd_idct_ifast_rows_dspr2
1090   (DCTELEM *wsptr, JSAMPARRAY output_buf, JDIMENSION output_col,
1091    const int *idct_coefs);
1092 
1093 EXTERN(void) jsimd_idct_ifast_altivec
1094   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1095    JDIMENSION output_col);
1096 
1097 /* Floating Point Inverse DCT */
1098 EXTERN(void) jsimd_idct_float_3dnow
1099   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1100    JDIMENSION output_col);
1101 
1102 extern const int jconst_idct_float_sse[];
1103 EXTERN(void) jsimd_idct_float_sse
1104   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1105    JDIMENSION output_col);
1106 
1107 extern const int jconst_idct_float_sse2[];
1108 EXTERN(void) jsimd_idct_float_sse2
1109   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1110    JDIMENSION output_col);
1111 
1112 /* Huffman coding */
1113 extern const int jconst_huff_encode_one_block[];
1114 EXTERN(JOCTET *) jsimd_huff_encode_one_block_sse2
1115   (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
1116    c_derived_tbl *dctbl, c_derived_tbl *actbl);
1117 
1118 EXTERN(JOCTET *) jsimd_huff_encode_one_block_neon
1119   (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
1120    c_derived_tbl *dctbl, c_derived_tbl *actbl);
1121 
1122 EXTERN(JOCTET *) jsimd_huff_encode_one_block_neon_slowtbl
1123   (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
1124    c_derived_tbl *dctbl, c_derived_tbl *actbl);
1125 
1126 /* Progressive Huffman encoding */
1127 EXTERN(void) jsimd_encode_mcu_AC_first_prepare_sse2
1128   (const JCOEF *block, const int *jpeg_natural_order_start, int Sl, int Al,
1129    JCOEF *values, size_t *zerobits);
1130 
1131 EXTERN(int) jsimd_encode_mcu_AC_refine_prepare_sse2
1132   (const JCOEF *block, const int *jpeg_natural_order_start, int Sl, int Al,
1133    JCOEF *absvalues, size_t *bits);
1134