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_rgb_ycc_convert_dspr2
125   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
126    JDIMENSION output_row, int num_rows);
127 EXTERN(void) jsimd_extrgb_ycc_convert_dspr2
128   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
129    JDIMENSION output_row, int num_rows);
130 EXTERN(void) jsimd_extrgbx_ycc_convert_dspr2
131   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
132    JDIMENSION output_row, int num_rows);
133 EXTERN(void) jsimd_extbgr_ycc_convert_dspr2
134   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
135    JDIMENSION output_row, int num_rows);
136 EXTERN(void) jsimd_extbgrx_ycc_convert_dspr2
137   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
138    JDIMENSION output_row, int num_rows);
139 EXTERN(void) jsimd_extxbgr_ycc_convert_dspr2
140   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
141    JDIMENSION output_row, int num_rows);
142 EXTERN(void) jsimd_extxrgb_ycc_convert_dspr2
143   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
144    JDIMENSION output_row, int num_rows);
145 
146 EXTERN(void) jsimd_rgb_ycc_convert_mmi
147   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
148    JDIMENSION output_row, int num_rows);
149 EXTERN(void) jsimd_extrgb_ycc_convert_mmi
150   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
151    JDIMENSION output_row, int num_rows);
152 EXTERN(void) jsimd_extrgbx_ycc_convert_mmi
153   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
154    JDIMENSION output_row, int num_rows);
155 EXTERN(void) jsimd_extbgr_ycc_convert_mmi
156   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
157    JDIMENSION output_row, int num_rows);
158 EXTERN(void) jsimd_extbgrx_ycc_convert_mmi
159   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
160    JDIMENSION output_row, int num_rows);
161 EXTERN(void) jsimd_extxbgr_ycc_convert_mmi
162   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
163    JDIMENSION output_row, int num_rows);
164 EXTERN(void) jsimd_extxrgb_ycc_convert_mmi
165   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
166    JDIMENSION output_row, int num_rows);
167 
168 EXTERN(void) jsimd_rgb_ycc_convert_altivec
169   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
170    JDIMENSION output_row, int num_rows);
171 EXTERN(void) jsimd_extrgb_ycc_convert_altivec
172   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
173    JDIMENSION output_row, int num_rows);
174 EXTERN(void) jsimd_extrgbx_ycc_convert_altivec
175   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
176    JDIMENSION output_row, int num_rows);
177 EXTERN(void) jsimd_extbgr_ycc_convert_altivec
178   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
179    JDIMENSION output_row, int num_rows);
180 EXTERN(void) jsimd_extbgrx_ycc_convert_altivec
181   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
182    JDIMENSION output_row, int num_rows);
183 EXTERN(void) jsimd_extxbgr_ycc_convert_altivec
184   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
185    JDIMENSION output_row, int num_rows);
186 EXTERN(void) jsimd_extxrgb_ycc_convert_altivec
187   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
188    JDIMENSION output_row, int num_rows);
189 
190 /* RGB & extended RGB --> Grayscale Colorspace Conversion */
191 EXTERN(void) jsimd_rgb_gray_convert_mmx
192   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
193    JDIMENSION output_row, int num_rows);
194 EXTERN(void) jsimd_extrgb_gray_convert_mmx
195   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
196    JDIMENSION output_row, int num_rows);
197 EXTERN(void) jsimd_extrgbx_gray_convert_mmx
198   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
199    JDIMENSION output_row, int num_rows);
200 EXTERN(void) jsimd_extbgr_gray_convert_mmx
201   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
202    JDIMENSION output_row, int num_rows);
203 EXTERN(void) jsimd_extbgrx_gray_convert_mmx
204   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
205    JDIMENSION output_row, int num_rows);
206 EXTERN(void) jsimd_extxbgr_gray_convert_mmx
207   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
208    JDIMENSION output_row, int num_rows);
209 EXTERN(void) jsimd_extxrgb_gray_convert_mmx
210   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
211    JDIMENSION output_row, int num_rows);
212 
213 extern const int jconst_rgb_gray_convert_sse2[];
214 EXTERN(void) jsimd_rgb_gray_convert_sse2
215   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
216    JDIMENSION output_row, int num_rows);
217 EXTERN(void) jsimd_extrgb_gray_convert_sse2
218   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
219    JDIMENSION output_row, int num_rows);
220 EXTERN(void) jsimd_extrgbx_gray_convert_sse2
221   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
222    JDIMENSION output_row, int num_rows);
223 EXTERN(void) jsimd_extbgr_gray_convert_sse2
224   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
225    JDIMENSION output_row, int num_rows);
226 EXTERN(void) jsimd_extbgrx_gray_convert_sse2
227   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
228    JDIMENSION output_row, int num_rows);
229 EXTERN(void) jsimd_extxbgr_gray_convert_sse2
230   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
231    JDIMENSION output_row, int num_rows);
232 EXTERN(void) jsimd_extxrgb_gray_convert_sse2
233   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
234    JDIMENSION output_row, int num_rows);
235 
236 extern const int jconst_rgb_gray_convert_avx2[];
237 EXTERN(void) jsimd_rgb_gray_convert_avx2
238   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
239    JDIMENSION output_row, int num_rows);
240 EXTERN(void) jsimd_extrgb_gray_convert_avx2
241   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
242    JDIMENSION output_row, int num_rows);
243 EXTERN(void) jsimd_extrgbx_gray_convert_avx2
244   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
245    JDIMENSION output_row, int num_rows);
246 EXTERN(void) jsimd_extbgr_gray_convert_avx2
247   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
248    JDIMENSION output_row, int num_rows);
249 EXTERN(void) jsimd_extbgrx_gray_convert_avx2
250   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
251    JDIMENSION output_row, int num_rows);
252 EXTERN(void) jsimd_extxbgr_gray_convert_avx2
253   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
254    JDIMENSION output_row, int num_rows);
255 EXTERN(void) jsimd_extxrgb_gray_convert_avx2
256   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
257    JDIMENSION output_row, int num_rows);
258 
259 EXTERN(void) jsimd_rgb_gray_convert_neon
260   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
261    JDIMENSION output_row, int num_rows);
262 EXTERN(void) jsimd_extrgb_gray_convert_neon
263   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
264    JDIMENSION output_row, int num_rows);
265 EXTERN(void) jsimd_extrgbx_gray_convert_neon
266   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
267    JDIMENSION output_row, int num_rows);
268 EXTERN(void) jsimd_extbgr_gray_convert_neon
269   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
270    JDIMENSION output_row, int num_rows);
271 EXTERN(void) jsimd_extbgrx_gray_convert_neon
272   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
273    JDIMENSION output_row, int num_rows);
274 EXTERN(void) jsimd_extxbgr_gray_convert_neon
275   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
276    JDIMENSION output_row, int num_rows);
277 EXTERN(void) jsimd_extxrgb_gray_convert_neon
278   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
279    JDIMENSION output_row, int num_rows);
280 
281 EXTERN(void) jsimd_rgb_gray_convert_dspr2
282   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
283    JDIMENSION output_row, int num_rows);
284 EXTERN(void) jsimd_extrgb_gray_convert_dspr2
285   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
286    JDIMENSION output_row, int num_rows);
287 EXTERN(void) jsimd_extrgbx_gray_convert_dspr2
288   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
289    JDIMENSION output_row, int num_rows);
290 EXTERN(void) jsimd_extbgr_gray_convert_dspr2
291   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
292    JDIMENSION output_row, int num_rows);
293 EXTERN(void) jsimd_extbgrx_gray_convert_dspr2
294   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
295    JDIMENSION output_row, int num_rows);
296 EXTERN(void) jsimd_extxbgr_gray_convert_dspr2
297   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
298    JDIMENSION output_row, int num_rows);
299 EXTERN(void) jsimd_extxrgb_gray_convert_dspr2
300   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
301    JDIMENSION output_row, int num_rows);
302 
303 EXTERN(void) jsimd_rgb_gray_convert_altivec
304   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
305    JDIMENSION output_row, int num_rows);
306 EXTERN(void) jsimd_extrgb_gray_convert_altivec
307   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
308    JDIMENSION output_row, int num_rows);
309 EXTERN(void) jsimd_extrgbx_gray_convert_altivec
310   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
311    JDIMENSION output_row, int num_rows);
312 EXTERN(void) jsimd_extbgr_gray_convert_altivec
313   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
314    JDIMENSION output_row, int num_rows);
315 EXTERN(void) jsimd_extbgrx_gray_convert_altivec
316   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
317    JDIMENSION output_row, int num_rows);
318 EXTERN(void) jsimd_extxbgr_gray_convert_altivec
319   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
320    JDIMENSION output_row, int num_rows);
321 EXTERN(void) jsimd_extxrgb_gray_convert_altivec
322   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
323    JDIMENSION output_row, int num_rows);
324 
325 /* YCC --> RGB & extended RGB Colorspace Conversion */
326 EXTERN(void) jsimd_ycc_rgb_convert_mmx
327   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
328    JSAMPARRAY output_buf, int num_rows);
329 EXTERN(void) jsimd_ycc_extrgb_convert_mmx
330   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
331    JSAMPARRAY output_buf, int num_rows);
332 EXTERN(void) jsimd_ycc_extrgbx_convert_mmx
333   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
334    JSAMPARRAY output_buf, int num_rows);
335 EXTERN(void) jsimd_ycc_extbgr_convert_mmx
336   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
337    JSAMPARRAY output_buf, int num_rows);
338 EXTERN(void) jsimd_ycc_extbgrx_convert_mmx
339   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
340    JSAMPARRAY output_buf, int num_rows);
341 EXTERN(void) jsimd_ycc_extxbgr_convert_mmx
342   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
343    JSAMPARRAY output_buf, int num_rows);
344 EXTERN(void) jsimd_ycc_extxrgb_convert_mmx
345   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
346    JSAMPARRAY output_buf, int num_rows);
347 
348 extern const int jconst_ycc_rgb_convert_sse2[];
349 EXTERN(void) jsimd_ycc_rgb_convert_sse2
350   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
351    JSAMPARRAY output_buf, int num_rows);
352 EXTERN(void) jsimd_ycc_extrgb_convert_sse2
353   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
354    JSAMPARRAY output_buf, int num_rows);
355 EXTERN(void) jsimd_ycc_extrgbx_convert_sse2
356   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
357    JSAMPARRAY output_buf, int num_rows);
358 EXTERN(void) jsimd_ycc_extbgr_convert_sse2
359   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
360    JSAMPARRAY output_buf, int num_rows);
361 EXTERN(void) jsimd_ycc_extbgrx_convert_sse2
362   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
363    JSAMPARRAY output_buf, int num_rows);
364 EXTERN(void) jsimd_ycc_extxbgr_convert_sse2
365   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
366    JSAMPARRAY output_buf, int num_rows);
367 EXTERN(void) jsimd_ycc_extxrgb_convert_sse2
368   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
369    JSAMPARRAY output_buf, int num_rows);
370 
371 extern const int jconst_ycc_rgb_convert_avx2[];
372 EXTERN(void) jsimd_ycc_rgb_convert_avx2
373   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
374    JSAMPARRAY output_buf, int num_rows);
375 EXTERN(void) jsimd_ycc_extrgb_convert_avx2
376   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
377    JSAMPARRAY output_buf, int num_rows);
378 EXTERN(void) jsimd_ycc_extrgbx_convert_avx2
379   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
380    JSAMPARRAY output_buf, int num_rows);
381 EXTERN(void) jsimd_ycc_extbgr_convert_avx2
382   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
383    JSAMPARRAY output_buf, int num_rows);
384 EXTERN(void) jsimd_ycc_extbgrx_convert_avx2
385   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
386    JSAMPARRAY output_buf, int num_rows);
387 EXTERN(void) jsimd_ycc_extxbgr_convert_avx2
388   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
389    JSAMPARRAY output_buf, int num_rows);
390 EXTERN(void) jsimd_ycc_extxrgb_convert_avx2
391   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
392    JSAMPARRAY output_buf, int num_rows);
393 
394 EXTERN(void) jsimd_ycc_rgb_convert_neon
395   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
396    JSAMPARRAY output_buf, int num_rows);
397 EXTERN(void) jsimd_ycc_extrgb_convert_neon
398   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
399    JSAMPARRAY output_buf, int num_rows);
400 EXTERN(void) jsimd_ycc_extrgbx_convert_neon
401   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
402    JSAMPARRAY output_buf, int num_rows);
403 EXTERN(void) jsimd_ycc_extbgr_convert_neon
404   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
405    JSAMPARRAY output_buf, int num_rows);
406 EXTERN(void) jsimd_ycc_extbgrx_convert_neon
407   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
408    JSAMPARRAY output_buf, int num_rows);
409 EXTERN(void) jsimd_ycc_extxbgr_convert_neon
410   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
411    JSAMPARRAY output_buf, int num_rows);
412 EXTERN(void) jsimd_ycc_extxrgb_convert_neon
413   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
414    JSAMPARRAY output_buf, int num_rows);
415 EXTERN(void) jsimd_ycc_rgb565_convert_neon
416   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
417    JSAMPARRAY output_buf, int num_rows);
418 
419 EXTERN(void) jsimd_ycc_rgb_convert_dspr2
420   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
421    JSAMPARRAY output_buf, int num_rows);
422 EXTERN(void) jsimd_ycc_extrgb_convert_dspr2
423   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
424    JSAMPARRAY output_buf, int num_rows);
425 EXTERN(void) jsimd_ycc_extrgbx_convert_dspr2
426   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
427    JSAMPARRAY output_buf, int num_rows);
428 EXTERN(void) jsimd_ycc_extbgr_convert_dspr2
429   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
430    JSAMPARRAY output_buf, int num_rows);
431 EXTERN(void) jsimd_ycc_extbgrx_convert_dspr2
432   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
433    JSAMPARRAY output_buf, int num_rows);
434 EXTERN(void) jsimd_ycc_extxbgr_convert_dspr2
435   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
436    JSAMPARRAY output_buf, int num_rows);
437 EXTERN(void) jsimd_ycc_extxrgb_convert_dspr2
438   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
439    JSAMPARRAY output_buf, int num_rows);
440 
441 EXTERN(void) jsimd_ycc_rgb_convert_mmi
442   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
443    JSAMPARRAY output_buf, int num_rows);
444 EXTERN(void) jsimd_ycc_extrgb_convert_mmi
445   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
446    JSAMPARRAY output_buf, int num_rows);
447 EXTERN(void) jsimd_ycc_extrgbx_convert_mmi
448   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
449    JSAMPARRAY output_buf, int num_rows);
450 EXTERN(void) jsimd_ycc_extbgr_convert_mmi
451   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
452    JSAMPARRAY output_buf, int num_rows);
453 EXTERN(void) jsimd_ycc_extbgrx_convert_mmi
454   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
455    JSAMPARRAY output_buf, int num_rows);
456 EXTERN(void) jsimd_ycc_extxbgr_convert_mmi
457   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
458    JSAMPARRAY output_buf, int num_rows);
459 EXTERN(void) jsimd_ycc_extxrgb_convert_mmi
460   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
461    JSAMPARRAY output_buf, int num_rows);
462 
463 EXTERN(void) jsimd_ycc_rgb_convert_altivec
464   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
465    JSAMPARRAY output_buf, int num_rows);
466 EXTERN(void) jsimd_ycc_extrgb_convert_altivec
467   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
468    JSAMPARRAY output_buf, int num_rows);
469 EXTERN(void) jsimd_ycc_extrgbx_convert_altivec
470   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
471    JSAMPARRAY output_buf, int num_rows);
472 EXTERN(void) jsimd_ycc_extbgr_convert_altivec
473   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
474    JSAMPARRAY output_buf, int num_rows);
475 EXTERN(void) jsimd_ycc_extbgrx_convert_altivec
476   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
477    JSAMPARRAY output_buf, int num_rows);
478 EXTERN(void) jsimd_ycc_extxbgr_convert_altivec
479   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
480    JSAMPARRAY output_buf, int num_rows);
481 EXTERN(void) jsimd_ycc_extxrgb_convert_altivec
482   (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
483    JSAMPARRAY output_buf, int num_rows);
484 
485 /* NULL Colorspace Conversion */
486 EXTERN(void) jsimd_c_null_convert_dspr2
487   (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
488    JDIMENSION output_row, int num_rows, int num_components);
489 
490 /* h2v1 Downsampling */
491 EXTERN(void) jsimd_h2v1_downsample_mmx
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_sse2
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_avx2
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_neon
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 EXTERN(void) jsimd_h2v1_downsample_dspr2
508   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
509    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
510 
511 EXTERN(void) jsimd_h2v1_downsample_altivec
512   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
513    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
514 
515 /* h2v2 Downsampling */
516 EXTERN(void) jsimd_h2v2_downsample_mmx
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_sse2
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_avx2
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_neon
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_dspr2
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 EXTERN(void) jsimd_h2v2_downsample_mmi
537   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
538    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
539 
540 EXTERN(void) jsimd_h2v2_downsample_altivec
541   (JDIMENSION image_width, int max_v_samp_factor, JDIMENSION v_samp_factor,
542    JDIMENSION width_in_blocks, JSAMPARRAY input_data, JSAMPARRAY output_data);
543 
544 /* h2v2 Smooth Downsampling */
545 EXTERN(void) jsimd_h2v2_smooth_downsample_dspr2
546   (JSAMPARRAY input_data, JSAMPARRAY output_data, JDIMENSION v_samp_factor,
547    int max_v_samp_factor, int smoothing_factor, JDIMENSION width_in_blocks,
548    JDIMENSION image_width);
549 
550 
551 /* Upsampling */
552 EXTERN(void) jsimd_h2v1_upsample_mmx
553   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
554    JSAMPARRAY *output_data_ptr);
555 EXTERN(void) jsimd_h2v2_upsample_mmx
556   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
557    JSAMPARRAY *output_data_ptr);
558 
559 EXTERN(void) jsimd_h2v1_upsample_sse2
560   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
561    JSAMPARRAY *output_data_ptr);
562 EXTERN(void) jsimd_h2v2_upsample_sse2
563   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
564    JSAMPARRAY *output_data_ptr);
565 
566 EXTERN(void) jsimd_h2v1_upsample_avx2
567   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
568    JSAMPARRAY *output_data_ptr);
569 EXTERN(void) jsimd_h2v2_upsample_avx2
570   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
571    JSAMPARRAY *output_data_ptr);
572 
573 EXTERN(void) jsimd_h2v1_upsample_neon
574   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
575    JSAMPARRAY *output_data_ptr);
576 EXTERN(void) jsimd_h2v2_upsample_neon
577   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
578    JSAMPARRAY *output_data_ptr);
579 
580 EXTERN(void) jsimd_h2v1_upsample_dspr2
581   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
582    JSAMPARRAY *output_data_ptr);
583 EXTERN(void) jsimd_h2v2_upsample_dspr2
584   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
585    JSAMPARRAY *output_data_ptr);
586 
587 EXTERN(void) jsimd_int_upsample_dspr2
588   (UINT8 h_expand, UINT8 v_expand, JSAMPARRAY input_data,
589    JSAMPARRAY *output_data_ptr, JDIMENSION output_width,
590    int max_v_samp_factor);
591 
592 EXTERN(void) jsimd_h2v1_upsample_altivec
593   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
594    JSAMPARRAY *output_data_ptr);
595 EXTERN(void) jsimd_h2v2_upsample_altivec
596   (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
597    JSAMPARRAY *output_data_ptr);
598 
599 /* Fancy Upsampling */
600 EXTERN(void) jsimd_h2v1_fancy_upsample_mmx
601   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
602    JSAMPARRAY *output_data_ptr);
603 EXTERN(void) jsimd_h2v2_fancy_upsample_mmx
604   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
605    JSAMPARRAY *output_data_ptr);
606 
607 extern const int jconst_fancy_upsample_sse2[];
608 EXTERN(void) jsimd_h2v1_fancy_upsample_sse2
609   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
610    JSAMPARRAY *output_data_ptr);
611 EXTERN(void) jsimd_h2v2_fancy_upsample_sse2
612   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
613    JSAMPARRAY *output_data_ptr);
614 
615 extern const int jconst_fancy_upsample_avx2[];
616 EXTERN(void) jsimd_h2v1_fancy_upsample_avx2
617   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
618    JSAMPARRAY *output_data_ptr);
619 EXTERN(void) jsimd_h2v2_fancy_upsample_avx2
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_neon
624   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
625    JSAMPARRAY *output_data_ptr);
626 EXTERN(void) jsimd_h2v2_fancy_upsample_neon
627   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
628    JSAMPARRAY *output_data_ptr);
629 EXTERN(void) jsimd_h1v2_fancy_upsample_neon
630   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
631    JSAMPARRAY *output_data_ptr);
632 
633 EXTERN(void) jsimd_h2v1_fancy_upsample_dspr2
634   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
635    JSAMPARRAY *output_data_ptr);
636 EXTERN(void) jsimd_h2v2_fancy_upsample_dspr2
637   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
638    JSAMPARRAY *output_data_ptr);
639 
640 EXTERN(void) jsimd_h2v2_fancy_upsample_mmi
641   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
642    JSAMPARRAY *output_data_ptr);
643 
644 EXTERN(void) jsimd_h2v1_fancy_upsample_altivec
645   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
646    JSAMPARRAY *output_data_ptr);
647 EXTERN(void) jsimd_h2v2_fancy_upsample_altivec
648   (int max_v_samp_factor, JDIMENSION downsampled_width, JSAMPARRAY input_data,
649    JSAMPARRAY *output_data_ptr);
650 
651 /* Merged Upsampling */
652 EXTERN(void) jsimd_h2v1_merged_upsample_mmx
653   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
654    JSAMPARRAY output_buf);
655 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_mmx
656   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
657    JSAMPARRAY output_buf);
658 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_mmx
659   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
660    JSAMPARRAY output_buf);
661 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_mmx
662   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
663    JSAMPARRAY output_buf);
664 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_mmx
665   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
666    JSAMPARRAY output_buf);
667 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_mmx
668   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
669    JSAMPARRAY output_buf);
670 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_mmx
671   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
672    JSAMPARRAY output_buf);
673 
674 EXTERN(void) jsimd_h2v2_merged_upsample_mmx
675   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
676    JSAMPARRAY output_buf);
677 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_mmx
678   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
679    JSAMPARRAY output_buf);
680 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_mmx
681   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
682    JSAMPARRAY output_buf);
683 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_mmx
684   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
685    JSAMPARRAY output_buf);
686 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_mmx
687   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
688    JSAMPARRAY output_buf);
689 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_mmx
690   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
691    JSAMPARRAY output_buf);
692 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_mmx
693   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
694    JSAMPARRAY output_buf);
695 
696 extern const int jconst_merged_upsample_sse2[];
697 EXTERN(void) jsimd_h2v1_merged_upsample_sse2
698   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
699    JSAMPARRAY output_buf);
700 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_sse2
701   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
702    JSAMPARRAY output_buf);
703 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_sse2
704   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
705    JSAMPARRAY output_buf);
706 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_sse2
707   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
708    JSAMPARRAY output_buf);
709 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_sse2
710   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
711    JSAMPARRAY output_buf);
712 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_sse2
713   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
714    JSAMPARRAY output_buf);
715 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_sse2
716   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
717    JSAMPARRAY output_buf);
718 
719 EXTERN(void) jsimd_h2v2_merged_upsample_sse2
720   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
721    JSAMPARRAY output_buf);
722 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_sse2
723   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
724    JSAMPARRAY output_buf);
725 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_sse2
726   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
727    JSAMPARRAY output_buf);
728 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_sse2
729   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
730    JSAMPARRAY output_buf);
731 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_sse2
732   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
733    JSAMPARRAY output_buf);
734 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_sse2
735   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
736    JSAMPARRAY output_buf);
737 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_sse2
738   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
739    JSAMPARRAY output_buf);
740 
741 extern const int jconst_merged_upsample_avx2[];
742 EXTERN(void) jsimd_h2v1_merged_upsample_avx2
743   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
744    JSAMPARRAY output_buf);
745 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_avx2
746   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
747    JSAMPARRAY output_buf);
748 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_avx2
749   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
750    JSAMPARRAY output_buf);
751 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_avx2
752   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
753    JSAMPARRAY output_buf);
754 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_avx2
755   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
756    JSAMPARRAY output_buf);
757 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_avx2
758   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
759    JSAMPARRAY output_buf);
760 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_avx2
761   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
762    JSAMPARRAY output_buf);
763 
764 EXTERN(void) jsimd_h2v2_merged_upsample_avx2
765   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
766    JSAMPARRAY output_buf);
767 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_avx2
768   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
769    JSAMPARRAY output_buf);
770 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_avx2
771   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
772    JSAMPARRAY output_buf);
773 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_avx2
774   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
775    JSAMPARRAY output_buf);
776 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_avx2
777   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
778    JSAMPARRAY output_buf);
779 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_avx2
780   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
781    JSAMPARRAY output_buf);
782 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_avx2
783   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
784    JSAMPARRAY output_buf);
785 
786 EXTERN(void) jsimd_h2v1_merged_upsample_neon
787   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
788    JSAMPARRAY output_buf);
789 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_neon
790   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
791    JSAMPARRAY output_buf);
792 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_neon
793   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
794    JSAMPARRAY output_buf);
795 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_neon
796   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
797    JSAMPARRAY output_buf);
798 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_neon
799   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
800    JSAMPARRAY output_buf);
801 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_neon
802   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
803    JSAMPARRAY output_buf);
804 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_neon
805   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
806    JSAMPARRAY output_buf);
807 
808 EXTERN(void) jsimd_h2v2_merged_upsample_neon
809   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
810    JSAMPARRAY output_buf);
811 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_neon
812   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
813    JSAMPARRAY output_buf);
814 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_neon
815   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
816    JSAMPARRAY output_buf);
817 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_neon
818   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
819    JSAMPARRAY output_buf);
820 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_neon
821   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
822    JSAMPARRAY output_buf);
823 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_neon
824   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
825    JSAMPARRAY output_buf);
826 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_neon
827   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
828    JSAMPARRAY output_buf);
829 
830 EXTERN(void) jsimd_h2v1_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_extrgb_merged_upsample_dspr2
834   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
835    JSAMPARRAY output_buf, JSAMPLE *range);
836 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_dspr2
837   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
838    JSAMPARRAY output_buf, JSAMPLE *range);
839 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_dspr2
840   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
841    JSAMPARRAY output_buf, JSAMPLE *range);
842 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_dspr2
843   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
844    JSAMPARRAY output_buf, JSAMPLE *range);
845 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_dspr2
846   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
847    JSAMPARRAY output_buf, JSAMPLE *range);
848 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_dspr2
849   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
850    JSAMPARRAY output_buf, JSAMPLE *range);
851 
852 EXTERN(void) jsimd_h2v2_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_extrgb_merged_upsample_dspr2
856   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
857    JSAMPARRAY output_buf, JSAMPLE *range);
858 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_dspr2
859   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
860    JSAMPARRAY output_buf, JSAMPLE *range);
861 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_dspr2
862   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
863    JSAMPARRAY output_buf, JSAMPLE *range);
864 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_dspr2
865   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
866    JSAMPARRAY output_buf, JSAMPLE *range);
867 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_dspr2
868   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
869    JSAMPARRAY output_buf, JSAMPLE *range);
870 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_dspr2
871   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
872    JSAMPARRAY output_buf, JSAMPLE *range);
873 
874 EXTERN(void) jsimd_h2v1_merged_upsample_altivec
875   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
876    JSAMPARRAY output_buf);
877 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_altivec
878   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
879    JSAMPARRAY output_buf);
880 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_altivec
881   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
882    JSAMPARRAY output_buf);
883 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_altivec
884   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
885    JSAMPARRAY output_buf);
886 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_altivec
887   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
888    JSAMPARRAY output_buf);
889 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_altivec
890   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
891    JSAMPARRAY output_buf);
892 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_altivec
893   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
894    JSAMPARRAY output_buf);
895 
896 EXTERN(void) jsimd_h2v2_merged_upsample_altivec
897   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
898    JSAMPARRAY output_buf);
899 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_altivec
900   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
901    JSAMPARRAY output_buf);
902 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_altivec
903   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
904    JSAMPARRAY output_buf);
905 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_altivec
906   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
907    JSAMPARRAY output_buf);
908 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_altivec
909   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
910    JSAMPARRAY output_buf);
911 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_altivec
912   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
913    JSAMPARRAY output_buf);
914 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_altivec
915   (JDIMENSION output_width, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
916    JSAMPARRAY output_buf);
917 
918 /* Sample Conversion */
919 EXTERN(void) jsimd_convsamp_mmx
920   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
921 
922 EXTERN(void) jsimd_convsamp_sse2
923   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
924 
925 EXTERN(void) jsimd_convsamp_avx2
926   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
927 
928 EXTERN(void) jsimd_convsamp_neon
929   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
930 
931 EXTERN(void) jsimd_convsamp_dspr2
932   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
933 
934 EXTERN(void) jsimd_convsamp_altivec
935   (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
936 
937 /* Floating Point Sample Conversion */
938 EXTERN(void) jsimd_convsamp_float_3dnow
939   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
940 
941 EXTERN(void) jsimd_convsamp_float_sse
942   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
943 
944 EXTERN(void) jsimd_convsamp_float_sse2
945   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
946 
947 EXTERN(void) jsimd_convsamp_float_dspr2
948   (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
949 
950 /* Slow Integer Forward DCT */
951 EXTERN(void) jsimd_fdct_islow_mmx(DCTELEM *data);
952 
953 extern const int jconst_fdct_islow_sse2[];
954 EXTERN(void) jsimd_fdct_islow_sse2(DCTELEM *data);
955 
956 extern const int jconst_fdct_islow_avx2[];
957 EXTERN(void) jsimd_fdct_islow_avx2(DCTELEM *data);
958 
959 EXTERN(void) jsimd_fdct_islow_neon(DCTELEM *data);
960 
961 EXTERN(void) jsimd_fdct_islow_dspr2(DCTELEM *data);
962 
963 EXTERN(void) jsimd_fdct_islow_mmi(DCTELEM *data);
964 
965 EXTERN(void) jsimd_fdct_islow_altivec(DCTELEM *data);
966 
967 /* Fast Integer Forward DCT */
968 EXTERN(void) jsimd_fdct_ifast_mmx(DCTELEM *data);
969 
970 extern const int jconst_fdct_ifast_sse2[];
971 EXTERN(void) jsimd_fdct_ifast_sse2(DCTELEM *data);
972 
973 EXTERN(void) jsimd_fdct_ifast_neon(DCTELEM *data);
974 
975 EXTERN(void) jsimd_fdct_ifast_dspr2(DCTELEM *data);
976 
977 EXTERN(void) jsimd_fdct_ifast_altivec(DCTELEM *data);
978 
979 /* Floating Point Forward DCT */
980 EXTERN(void) jsimd_fdct_float_3dnow(FAST_FLOAT *data);
981 
982 extern const int jconst_fdct_float_sse[];
983 EXTERN(void) jsimd_fdct_float_sse(FAST_FLOAT *data);
984 
985 /* Quantization */
986 EXTERN(void) jsimd_quantize_mmx
987   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
988 
989 EXTERN(void) jsimd_quantize_sse2
990   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
991 
992 EXTERN(void) jsimd_quantize_avx2
993   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
994 
995 EXTERN(void) jsimd_quantize_neon
996   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
997 
998 EXTERN(void) jsimd_quantize_dspr2
999   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
1000 
1001 EXTERN(void) jsimd_quantize_mmi
1002   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
1003 
1004 EXTERN(void) jsimd_quantize_altivec
1005   (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
1006 
1007 /* Floating Point Quantization */
1008 EXTERN(void) jsimd_quantize_float_3dnow
1009   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
1010 
1011 EXTERN(void) jsimd_quantize_float_sse
1012   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
1013 
1014 EXTERN(void) jsimd_quantize_float_sse2
1015   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
1016 
1017 EXTERN(void) jsimd_quantize_float_dspr2
1018   (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
1019 
1020 /* Scaled Inverse DCT */
1021 EXTERN(void) jsimd_idct_2x2_mmx
1022   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1023    JDIMENSION output_col);
1024 EXTERN(void) jsimd_idct_4x4_mmx
1025   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1026    JDIMENSION output_col);
1027 
1028 extern const int jconst_idct_red_sse2[];
1029 EXTERN(void) jsimd_idct_2x2_sse2
1030   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1031    JDIMENSION output_col);
1032 EXTERN(void) jsimd_idct_4x4_sse2
1033   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1034    JDIMENSION output_col);
1035 
1036 EXTERN(void) jsimd_idct_2x2_neon
1037   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1038    JDIMENSION output_col);
1039 EXTERN(void) jsimd_idct_4x4_neon
1040   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1041    JDIMENSION output_col);
1042 
1043 EXTERN(void) jsimd_idct_2x2_dspr2
1044   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1045    JDIMENSION output_col);
1046 EXTERN(void) jsimd_idct_4x4_dspr2
1047   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1048    JDIMENSION output_col, int *workspace);
1049 EXTERN(void) jsimd_idct_6x6_dspr2
1050   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1051    JDIMENSION output_col);
1052 EXTERN(void) jsimd_idct_12x12_pass1_dspr2
1053   (JCOEFPTR coef_block, void *dct_table, int *workspace);
1054 EXTERN(void) jsimd_idct_12x12_pass2_dspr2
1055   (int *workspace, int *output);
1056 
1057 /* Slow Integer Inverse DCT */
1058 EXTERN(void) jsimd_idct_islow_mmx
1059   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1060    JDIMENSION output_col);
1061 
1062 extern const int jconst_idct_islow_sse2[];
1063 EXTERN(void) jsimd_idct_islow_sse2
1064   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1065    JDIMENSION output_col);
1066 
1067 extern const int jconst_idct_islow_avx2[];
1068 EXTERN(void) jsimd_idct_islow_avx2
1069   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1070    JDIMENSION output_col);
1071 
1072 EXTERN(void) jsimd_idct_islow_neon
1073   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1074    JDIMENSION output_col);
1075 
1076 EXTERN(void) jsimd_idct_islow_dspr2
1077   (void *dct_table, JCOEFPTR coef_block, int *output_buf, JSAMPLE *output_col);
1078 
1079 EXTERN(void) jsimd_idct_islow_mmi
1080   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1081    JDIMENSION output_col);
1082 
1083 EXTERN(void) jsimd_idct_islow_altivec
1084   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1085    JDIMENSION output_col);
1086 
1087 /* Fast Integer Inverse DCT */
1088 EXTERN(void) jsimd_idct_ifast_mmx
1089   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1090    JDIMENSION output_col);
1091 
1092 extern const int jconst_idct_ifast_sse2[];
1093 EXTERN(void) jsimd_idct_ifast_sse2
1094   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1095    JDIMENSION output_col);
1096 
1097 EXTERN(void) jsimd_idct_ifast_neon
1098   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1099    JDIMENSION output_col);
1100 
1101 EXTERN(void) jsimd_idct_ifast_cols_dspr2
1102   (JCOEF *inptr, IFAST_MULT_TYPE *quantptr, DCTELEM *wsptr,
1103    const int *idct_coefs);
1104 EXTERN(void) jsimd_idct_ifast_rows_dspr2
1105   (DCTELEM *wsptr, JSAMPARRAY output_buf, JDIMENSION output_col,
1106    const int *idct_coefs);
1107 
1108 EXTERN(void) jsimd_idct_ifast_altivec
1109   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1110    JDIMENSION output_col);
1111 
1112 /* Floating Point Inverse DCT */
1113 EXTERN(void) jsimd_idct_float_3dnow
1114   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1115    JDIMENSION output_col);
1116 
1117 extern const int jconst_idct_float_sse[];
1118 EXTERN(void) jsimd_idct_float_sse
1119   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1120    JDIMENSION output_col);
1121 
1122 extern const int jconst_idct_float_sse2[];
1123 EXTERN(void) jsimd_idct_float_sse2
1124   (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
1125    JDIMENSION output_col);
1126 
1127 /* Huffman coding */
1128 extern const int jconst_huff_encode_one_block[];
1129 EXTERN(JOCTET *) jsimd_huff_encode_one_block_sse2
1130   (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
1131    c_derived_tbl *dctbl, c_derived_tbl *actbl);
1132 
1133 EXTERN(JOCTET *) jsimd_huff_encode_one_block_neon
1134   (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
1135    c_derived_tbl *dctbl, c_derived_tbl *actbl);
1136 
1137 EXTERN(JOCTET *) jsimd_huff_encode_one_block_neon_slowtbl
1138   (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
1139    c_derived_tbl *dctbl, c_derived_tbl *actbl);
1140 
1141 /* Progressive Huffman encoding */
1142 EXTERN(void) jsimd_encode_mcu_AC_first_prepare_sse2
1143   (const JCOEF *block, const int *jpeg_natural_order_start, int Sl, int Al,
1144    JCOEF *values, size_t *zerobits);
1145 
1146 EXTERN(int) jsimd_encode_mcu_AC_refine_prepare_sse2
1147   (const JCOEF *block, const int *jpeg_natural_order_start, int Sl, int Al,
1148    JCOEF *absvalues, size_t *bits);
1149