1 /*
2  * simd/jsimd.h
3  *
4  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
5  * Copyright (C) 2011, 2014-2016 D. R. Commander
6  * Copyright (C) 2013-2014, MIPS Technologies, Inc., California
7  * Copyright (C) 2014 Linaro Limited
8  * Copyright (C) 2015-2016 Matthieu Darbois
9  *
10  * Based on the x86 SIMD extension for IJG JPEG library,
11  * Copyright (C) 1999-2006, MIYASAKA Masaru.
12  * For conditions of distribution and use, see copyright notice in jsimdext.inc
13  *
14  */
15 
16 /* Bitmask for supported acceleration methods */
17 
18 #define JSIMD_NONE       0x00
19 #define JSIMD_MMX        0x01
20 #define JSIMD_3DNOW      0x02
21 #define JSIMD_SSE        0x04
22 #define JSIMD_SSE2       0x08
23 #define JSIMD_ARM_NEON   0x10
24 #define JSIMD_MIPS_DSPR2 0x20
25 #define JSIMD_ALTIVEC    0x40
26 
27 /* SIMD Ext: retrieve SIMD/CPU information */
28 EXTERN(unsigned int) jpeg_simd_cpu_support (void);
29 
30 /* RGB & extended RGB --> YCC Colorspace Conversion */
31 EXTERN(void) jsimd_rgb_ycc_convert_mmx
32         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
33          JDIMENSION output_row, int num_rows);
34 EXTERN(void) jsimd_extrgb_ycc_convert_mmx
35         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
36          JDIMENSION output_row, int num_rows);
37 EXTERN(void) jsimd_extrgbx_ycc_convert_mmx
38         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
39          JDIMENSION output_row, int num_rows);
40 EXTERN(void) jsimd_extbgr_ycc_convert_mmx
41         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
42          JDIMENSION output_row, int num_rows);
43 EXTERN(void) jsimd_extbgrx_ycc_convert_mmx
44         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
45          JDIMENSION output_row, int num_rows);
46 EXTERN(void) jsimd_extxbgr_ycc_convert_mmx
47         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
48          JDIMENSION output_row, int num_rows);
49 EXTERN(void) jsimd_extxrgb_ycc_convert_mmx
50         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
51          JDIMENSION output_row, int num_rows);
52 
53 extern const int jconst_rgb_ycc_convert_sse2[];
54 EXTERN(void) jsimd_rgb_ycc_convert_sse2
55         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
56          JDIMENSION output_row, int num_rows);
57 EXTERN(void) jsimd_extrgb_ycc_convert_sse2
58         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
59          JDIMENSION output_row, int num_rows);
60 EXTERN(void) jsimd_extrgbx_ycc_convert_sse2
61         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
62          JDIMENSION output_row, int num_rows);
63 EXTERN(void) jsimd_extbgr_ycc_convert_sse2
64         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
65          JDIMENSION output_row, int num_rows);
66 EXTERN(void) jsimd_extbgrx_ycc_convert_sse2
67         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
68          JDIMENSION output_row, int num_rows);
69 EXTERN(void) jsimd_extxbgr_ycc_convert_sse2
70         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
71          JDIMENSION output_row, int num_rows);
72 EXTERN(void) jsimd_extxrgb_ycc_convert_sse2
73         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
74          JDIMENSION output_row, int num_rows);
75 
76 EXTERN(void) jsimd_rgb_ycc_convert_neon
77         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
78          JDIMENSION output_row, int num_rows);
79 EXTERN(void) jsimd_extrgb_ycc_convert_neon
80         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
81          JDIMENSION output_row, int num_rows);
82 EXTERN(void) jsimd_extrgbx_ycc_convert_neon
83         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
84          JDIMENSION output_row, int num_rows);
85 EXTERN(void) jsimd_extbgr_ycc_convert_neon
86         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
87          JDIMENSION output_row, int num_rows);
88 EXTERN(void) jsimd_extbgrx_ycc_convert_neon
89         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
90          JDIMENSION output_row, int num_rows);
91 EXTERN(void) jsimd_extxbgr_ycc_convert_neon
92         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
93          JDIMENSION output_row, int num_rows);
94 EXTERN(void) jsimd_extxrgb_ycc_convert_neon
95         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
96          JDIMENSION output_row, int num_rows);
97 
98 EXTERN(void) jsimd_extrgb_ycc_convert_neon_slowld3
99         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
100          JDIMENSION output_row, int num_rows);
101 EXTERN(void) jsimd_extbgr_ycc_convert_neon_slowld3
102         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
103          JDIMENSION output_row, int num_rows);
104 
105 EXTERN(void) jsimd_rgb_ycc_convert_mips_dspr2
106         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
107          JDIMENSION output_row, int num_rows);
108 EXTERN(void) jsimd_extrgb_ycc_convert_mips_dspr2
109         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
110          JDIMENSION output_row, int num_rows);
111 EXTERN(void) jsimd_extrgbx_ycc_convert_mips_dspr2
112         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
113          JDIMENSION output_row, int num_rows);
114 EXTERN(void) jsimd_extbgr_ycc_convert_mips_dspr2
115         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
116          JDIMENSION output_row, int num_rows);
117 EXTERN(void) jsimd_extbgrx_ycc_convert_mips_dspr2
118         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
119          JDIMENSION output_row, int num_rows);
120 EXTERN(void) jsimd_extxbgr_ycc_convert_mips_dspr2
121         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
122          JDIMENSION output_row, int num_rows);
123 EXTERN(void) jsimd_extxrgb_ycc_convert_mips_dspr2
124         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
125          JDIMENSION output_row, int num_rows);
126 
127 EXTERN(void) jsimd_rgb_ycc_convert_altivec
128         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
129          JDIMENSION output_row, int num_rows);
130 EXTERN(void) jsimd_extrgb_ycc_convert_altivec
131         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
132          JDIMENSION output_row, int num_rows);
133 EXTERN(void) jsimd_extrgbx_ycc_convert_altivec
134         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
135          JDIMENSION output_row, int num_rows);
136 EXTERN(void) jsimd_extbgr_ycc_convert_altivec
137         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
138          JDIMENSION output_row, int num_rows);
139 EXTERN(void) jsimd_extbgrx_ycc_convert_altivec
140         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
141          JDIMENSION output_row, int num_rows);
142 EXTERN(void) jsimd_extxbgr_ycc_convert_altivec
143         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
144          JDIMENSION output_row, int num_rows);
145 EXTERN(void) jsimd_extxrgb_ycc_convert_altivec
146         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
147          JDIMENSION output_row, int num_rows);
148 
149 /* RGB & extended RGB --> Grayscale Colorspace Conversion */
150 EXTERN(void) jsimd_rgb_gray_convert_mmx
151         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
152          JDIMENSION output_row, int num_rows);
153 EXTERN(void) jsimd_extrgb_gray_convert_mmx
154         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
155          JDIMENSION output_row, int num_rows);
156 EXTERN(void) jsimd_extrgbx_gray_convert_mmx
157         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
158          JDIMENSION output_row, int num_rows);
159 EXTERN(void) jsimd_extbgr_gray_convert_mmx
160         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
161          JDIMENSION output_row, int num_rows);
162 EXTERN(void) jsimd_extbgrx_gray_convert_mmx
163         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
164          JDIMENSION output_row, int num_rows);
165 EXTERN(void) jsimd_extxbgr_gray_convert_mmx
166         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
167          JDIMENSION output_row, int num_rows);
168 EXTERN(void) jsimd_extxrgb_gray_convert_mmx
169         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
170          JDIMENSION output_row, int num_rows);
171 
172 extern const int jconst_rgb_gray_convert_sse2[];
173 EXTERN(void) jsimd_rgb_gray_convert_sse2
174         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
175          JDIMENSION output_row, int num_rows);
176 EXTERN(void) jsimd_extrgb_gray_convert_sse2
177         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
178          JDIMENSION output_row, int num_rows);
179 EXTERN(void) jsimd_extrgbx_gray_convert_sse2
180         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
181          JDIMENSION output_row, int num_rows);
182 EXTERN(void) jsimd_extbgr_gray_convert_sse2
183         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
184          JDIMENSION output_row, int num_rows);
185 EXTERN(void) jsimd_extbgrx_gray_convert_sse2
186         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
187          JDIMENSION output_row, int num_rows);
188 EXTERN(void) jsimd_extxbgr_gray_convert_sse2
189         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
190          JDIMENSION output_row, int num_rows);
191 EXTERN(void) jsimd_extxrgb_gray_convert_sse2
192         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
193          JDIMENSION output_row, int num_rows);
194 
195 EXTERN(void) jsimd_rgb_gray_convert_mips_dspr2
196         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
197          JDIMENSION output_row, int num_rows);
198 EXTERN(void) jsimd_extrgb_gray_convert_mips_dspr2
199         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
200          JDIMENSION output_row, int num_rows);
201 EXTERN(void) jsimd_extrgbx_gray_convert_mips_dspr2
202         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
203          JDIMENSION output_row, int num_rows);
204 EXTERN(void) jsimd_extbgr_gray_convert_mips_dspr2
205         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
206          JDIMENSION output_row, int num_rows);
207 EXTERN(void) jsimd_extbgrx_gray_convert_mips_dspr2
208         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
209          JDIMENSION output_row, int num_rows);
210 EXTERN(void) jsimd_extxbgr_gray_convert_mips_dspr2
211         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
212          JDIMENSION output_row, int num_rows);
213 EXTERN(void) jsimd_extxrgb_gray_convert_mips_dspr2
214         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
215          JDIMENSION output_row, int num_rows);
216 
217 EXTERN(void) jsimd_rgb_gray_convert_altivec
218         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
219          JDIMENSION output_row, int num_rows);
220 EXTERN(void) jsimd_extrgb_gray_convert_altivec
221         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
222          JDIMENSION output_row, int num_rows);
223 EXTERN(void) jsimd_extrgbx_gray_convert_altivec
224         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
225          JDIMENSION output_row, int num_rows);
226 EXTERN(void) jsimd_extbgr_gray_convert_altivec
227         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
228          JDIMENSION output_row, int num_rows);
229 EXTERN(void) jsimd_extbgrx_gray_convert_altivec
230         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
231          JDIMENSION output_row, int num_rows);
232 EXTERN(void) jsimd_extxbgr_gray_convert_altivec
233         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
234          JDIMENSION output_row, int num_rows);
235 EXTERN(void) jsimd_extxrgb_gray_convert_altivec
236         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
237          JDIMENSION output_row, int num_rows);
238 
239 /* YCC --> RGB & extended RGB Colorspace Conversion */
240 EXTERN(void) jsimd_ycc_rgb_convert_mmx
241         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
242          JSAMPARRAY output_buf, int num_rows);
243 EXTERN(void) jsimd_ycc_extrgb_convert_mmx
244         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
245          JSAMPARRAY output_buf, int num_rows);
246 EXTERN(void) jsimd_ycc_extrgbx_convert_mmx
247         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
248          JSAMPARRAY output_buf, int num_rows);
249 EXTERN(void) jsimd_ycc_extbgr_convert_mmx
250         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
251          JSAMPARRAY output_buf, int num_rows);
252 EXTERN(void) jsimd_ycc_extbgrx_convert_mmx
253         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
254          JSAMPARRAY output_buf, int num_rows);
255 EXTERN(void) jsimd_ycc_extxbgr_convert_mmx
256         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
257          JSAMPARRAY output_buf, int num_rows);
258 EXTERN(void) jsimd_ycc_extxrgb_convert_mmx
259         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
260          JSAMPARRAY output_buf, int num_rows);
261 
262 extern const int jconst_ycc_rgb_convert_sse2[];
263 EXTERN(void) jsimd_ycc_rgb_convert_sse2
264         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
265          JSAMPARRAY output_buf, int num_rows);
266 EXTERN(void) jsimd_ycc_extrgb_convert_sse2
267         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
268          JSAMPARRAY output_buf, int num_rows);
269 EXTERN(void) jsimd_ycc_extrgbx_convert_sse2
270         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
271          JSAMPARRAY output_buf, int num_rows);
272 EXTERN(void) jsimd_ycc_extbgr_convert_sse2
273         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
274          JSAMPARRAY output_buf, int num_rows);
275 EXTERN(void) jsimd_ycc_extbgrx_convert_sse2
276         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
277          JSAMPARRAY output_buf, int num_rows);
278 EXTERN(void) jsimd_ycc_extxbgr_convert_sse2
279         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
280          JSAMPARRAY output_buf, int num_rows);
281 EXTERN(void) jsimd_ycc_extxrgb_convert_sse2
282         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
283          JSAMPARRAY output_buf, int num_rows);
284 
285 EXTERN(void) jsimd_ycc_rgb_convert_neon
286         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
287          JSAMPARRAY output_buf, int num_rows);
288 EXTERN(void) jsimd_ycc_extrgb_convert_neon
289         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
290          JSAMPARRAY output_buf, int num_rows);
291 EXTERN(void) jsimd_ycc_extrgbx_convert_neon
292         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
293          JSAMPARRAY output_buf, int num_rows);
294 EXTERN(void) jsimd_ycc_extbgr_convert_neon
295         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
296          JSAMPARRAY output_buf, int num_rows);
297 EXTERN(void) jsimd_ycc_extbgrx_convert_neon
298         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
299          JSAMPARRAY output_buf, int num_rows);
300 EXTERN(void) jsimd_ycc_extxbgr_convert_neon
301         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
302          JSAMPARRAY output_buf, int num_rows);
303 EXTERN(void) jsimd_ycc_extxrgb_convert_neon
304         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
305          JSAMPARRAY output_buf, int num_rows);
306 EXTERN(void) jsimd_ycc_rgb565_convert_neon
307         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
308          JSAMPARRAY output_buf, int num_rows);
309 
310 EXTERN(void) jsimd_ycc_extrgb_convert_neon_slowst3
311         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
312          JSAMPARRAY output_buf, int num_rows);
313 EXTERN(void) jsimd_ycc_extbgr_convert_neon_slowst3
314         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
315          JSAMPARRAY output_buf, int num_rows);
316 
317 EXTERN(void) jsimd_ycc_rgb_convert_mips_dspr2
318         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
319          JSAMPARRAY output_buf, int num_rows);
320 EXTERN(void) jsimd_ycc_extrgb_convert_mips_dspr2
321         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
322          JSAMPARRAY output_buf, int num_rows);
323 EXTERN(void) jsimd_ycc_extrgbx_convert_mips_dspr2
324         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
325          JSAMPARRAY output_buf, int num_rows);
326 EXTERN(void) jsimd_ycc_extbgr_convert_mips_dspr2
327         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
328          JSAMPARRAY output_buf, int num_rows);
329 EXTERN(void) jsimd_ycc_extbgrx_convert_mips_dspr2
330         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
331          JSAMPARRAY output_buf, int num_rows);
332 EXTERN(void) jsimd_ycc_extxbgr_convert_mips_dspr2
333         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
334          JSAMPARRAY output_buf, int num_rows);
335 EXTERN(void) jsimd_ycc_extxrgb_convert_mips_dspr2
336         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
337          JSAMPARRAY output_buf, int num_rows);
338 
339 EXTERN(void) jsimd_ycc_rgb_convert_altivec
340         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
341          JSAMPARRAY output_buf, int num_rows);
342 EXTERN(void) jsimd_ycc_extrgb_convert_altivec
343         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
344          JSAMPARRAY output_buf, int num_rows);
345 EXTERN(void) jsimd_ycc_extrgbx_convert_altivec
346         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
347          JSAMPARRAY output_buf, int num_rows);
348 EXTERN(void) jsimd_ycc_extbgr_convert_altivec
349         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
350          JSAMPARRAY output_buf, int num_rows);
351 EXTERN(void) jsimd_ycc_extbgrx_convert_altivec
352         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
353          JSAMPARRAY output_buf, int num_rows);
354 EXTERN(void) jsimd_ycc_extxbgr_convert_altivec
355         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
356          JSAMPARRAY output_buf, int num_rows);
357 EXTERN(void) jsimd_ycc_extxrgb_convert_altivec
358         (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
359          JSAMPARRAY output_buf, int num_rows);
360 
361 /* NULL Colorspace Conversion */
362 EXTERN(void) jsimd_c_null_convert_mips_dspr2
363         (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
364          JDIMENSION output_row, int num_rows, int num_components);
365 
366 /* h2v1 Downsampling */
367 EXTERN(void) jsimd_h2v1_downsample_mmx
368         (JDIMENSION image_width, int max_v_samp_factor,
369          JDIMENSION v_samp_factor, JDIMENSION width_blocks,
370          JSAMPARRAY input_data, JSAMPARRAY output_data);
371 
372 EXTERN(void) jsimd_h2v1_downsample_sse2
373         (JDIMENSION image_width, int max_v_samp_factor,
374          JDIMENSION v_samp_factor, JDIMENSION width_blocks,
375          JSAMPARRAY input_data, JSAMPARRAY output_data);
376 
377 EXTERN(void) jsimd_h2v1_downsample_neon
378         (JDIMENSION image_width, int max_v_samp_factor,
379          JDIMENSION v_samp_factor, JDIMENSION width_blocks,
380          JSAMPARRAY input_data, JSAMPARRAY output_data);
381 
382 EXTERN(void) jsimd_h2v1_downsample_mips_dspr2
383         (JDIMENSION image_width, int max_v_samp_factor,
384          JDIMENSION v_samp_factor, JDIMENSION width_blocks,
385          JSAMPARRAY input_data, JSAMPARRAY output_data);
386 
387 EXTERN(void) jsimd_h2v1_downsample_altivec
388         (JDIMENSION image_width, int max_v_samp_factor,
389          JDIMENSION v_samp_factor, JDIMENSION width_blocks,
390          JSAMPARRAY input_data, JSAMPARRAY output_data);
391 
392 /* h2v2 Downsampling */
393 EXTERN(void) jsimd_h2v2_downsample_mmx
394         (JDIMENSION image_width, int max_v_samp_factor,
395          JDIMENSION v_samp_factor, JDIMENSION width_blocks,
396          JSAMPARRAY input_data, JSAMPARRAY output_data);
397 
398 EXTERN(void) jsimd_h2v2_downsample_sse2
399         (JDIMENSION image_width, int max_v_samp_factor,
400          JDIMENSION v_samp_factor, JDIMENSION width_blocks,
401          JSAMPARRAY input_data, JSAMPARRAY output_data);
402 
403 EXTERN(void) jsimd_h2v2_downsample_neon
404         (JDIMENSION image_width, int max_v_samp_factor,
405          JDIMENSION v_samp_factor, JDIMENSION width_blocks,
406          JSAMPARRAY input_data, JSAMPARRAY output_data);
407 
408 EXTERN(void) jsimd_h2v2_downsample_mips_dspr2
409         (JDIMENSION image_width, int max_v_samp_factor,
410          JDIMENSION v_samp_factor, JDIMENSION width_blocks,
411          JSAMPARRAY input_data, JSAMPARRAY output_data);
412 
413 EXTERN(void) jsimd_h2v2_downsample_altivec
414         (JDIMENSION image_width, int max_v_samp_factor,
415          JDIMENSION v_samp_factor, JDIMENSION width_blocks,
416          JSAMPARRAY input_data, JSAMPARRAY output_data);
417 
418 /* h2v2 Smooth Downsampling */
419 EXTERN(void) jsimd_h2v2_smooth_downsample_mips_dspr2
420         (JSAMPARRAY input_data, JSAMPARRAY output_data,
421          JDIMENSION v_samp_factor, int max_v_samp_factor,
422          int smoothing_factor, JDIMENSION width_blocks,
423          JDIMENSION image_width);
424 
425 
426 /* Upsampling */
427 EXTERN(void) jsimd_h2v1_upsample_mmx
428         (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
429          JSAMPARRAY *output_data_ptr);
430 EXTERN(void) jsimd_h2v2_upsample_mmx
431         (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
432          JSAMPARRAY *output_data_ptr);
433 
434 EXTERN(void) jsimd_h2v1_upsample_sse2
435         (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
436          JSAMPARRAY *output_data_ptr);
437 EXTERN(void) jsimd_h2v2_upsample_sse2
438         (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
439          JSAMPARRAY *output_data_ptr);
440 
441 EXTERN(void) jsimd_h2v1_upsample_mips_dspr2
442         (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
443          JSAMPARRAY *output_data_ptr);
444 EXTERN(void) jsimd_h2v2_upsample_mips_dspr2
445         (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
446          JSAMPARRAY *output_data_ptr);
447 
448 EXTERN(void) jsimd_int_upsample_mips_dspr2
449         (UINT8 h_expand, UINT8 v_expand, JSAMPARRAY input_data,
450          JSAMPARRAY *output_data_ptr, JDIMENSION output_width,
451          int max_v_samp_factor);
452 
453 EXTERN(void) jsimd_h2v1_upsample_altivec
454         (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
455          JSAMPARRAY *output_data_ptr);
456 EXTERN(void) jsimd_h2v2_upsample_altivec
457         (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
458          JSAMPARRAY *output_data_ptr);
459 
460 /* Fancy Upsampling */
461 EXTERN(void) jsimd_h2v1_fancy_upsample_mmx
462         (int max_v_samp_factor, JDIMENSION downsampled_width,
463          JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
464 EXTERN(void) jsimd_h2v2_fancy_upsample_mmx
465         (int max_v_samp_factor, JDIMENSION downsampled_width,
466          JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
467 
468 extern const int jconst_fancy_upsample_sse2[];
469 EXTERN(void) jsimd_h2v1_fancy_upsample_sse2
470         (int max_v_samp_factor, JDIMENSION downsampled_width,
471          JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
472 EXTERN(void) jsimd_h2v2_fancy_upsample_sse2
473         (int max_v_samp_factor, JDIMENSION downsampled_width,
474          JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
475 
476 EXTERN(void) jsimd_h2v1_fancy_upsample_neon
477         (int max_v_samp_factor, JDIMENSION downsampled_width,
478          JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
479 
480 EXTERN(void) jsimd_h2v1_fancy_upsample_mips_dspr2
481         (int max_v_samp_factor, JDIMENSION downsampled_width,
482          JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
483 EXTERN(void) jsimd_h2v2_fancy_upsample_mips_dspr2
484         (int max_v_samp_factor, JDIMENSION downsampled_width,
485          JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
486 
487 EXTERN(void) jsimd_h2v1_fancy_upsample_altivec
488         (int max_v_samp_factor, JDIMENSION downsampled_width,
489          JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
490 EXTERN(void) jsimd_h2v2_fancy_upsample_altivec
491         (int max_v_samp_factor, JDIMENSION downsampled_width,
492          JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
493 
494 /* Merged Upsampling */
495 EXTERN(void) jsimd_h2v1_merged_upsample_mmx
496         (JDIMENSION output_width, JSAMPIMAGE input_buf,
497          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
498 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_mmx
499         (JDIMENSION output_width, JSAMPIMAGE input_buf,
500          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
501 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_mmx
502         (JDIMENSION output_width, JSAMPIMAGE input_buf,
503          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
504 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_mmx
505         (JDIMENSION output_width, JSAMPIMAGE input_buf,
506          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
507 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_mmx
508         (JDIMENSION output_width, JSAMPIMAGE input_buf,
509          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
510 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_mmx
511         (JDIMENSION output_width, JSAMPIMAGE input_buf,
512          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
513 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_mmx
514         (JDIMENSION output_width, JSAMPIMAGE input_buf,
515          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
516 
517 EXTERN(void) jsimd_h2v2_merged_upsample_mmx
518         (JDIMENSION output_width, JSAMPIMAGE input_buf,
519          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
520 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_mmx
521         (JDIMENSION output_width, JSAMPIMAGE input_buf,
522          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
523 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_mmx
524         (JDIMENSION output_width, JSAMPIMAGE input_buf,
525          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
526 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_mmx
527         (JDIMENSION output_width, JSAMPIMAGE input_buf,
528          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
529 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_mmx
530         (JDIMENSION output_width, JSAMPIMAGE input_buf,
531          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
532 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_mmx
533         (JDIMENSION output_width, JSAMPIMAGE input_buf,
534          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
535 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_mmx
536         (JDIMENSION output_width, JSAMPIMAGE input_buf,
537          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
538 
539 extern const int jconst_merged_upsample_sse2[];
540 EXTERN(void) jsimd_h2v1_merged_upsample_sse2
541         (JDIMENSION output_width, JSAMPIMAGE input_buf,
542          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
543 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_sse2
544         (JDIMENSION output_width, JSAMPIMAGE input_buf,
545          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
546 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_sse2
547         (JDIMENSION output_width, JSAMPIMAGE input_buf,
548          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
549 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_sse2
550         (JDIMENSION output_width, JSAMPIMAGE input_buf,
551          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
552 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_sse2
553         (JDIMENSION output_width, JSAMPIMAGE input_buf,
554          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
555 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_sse2
556         (JDIMENSION output_width, JSAMPIMAGE input_buf,
557          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
558 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_sse2
559         (JDIMENSION output_width, JSAMPIMAGE input_buf,
560          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
561 
562 EXTERN(void) jsimd_h2v2_merged_upsample_sse2
563         (JDIMENSION output_width, JSAMPIMAGE input_buf,
564          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
565 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_sse2
566         (JDIMENSION output_width, JSAMPIMAGE input_buf,
567          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
568 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_sse2
569         (JDIMENSION output_width, JSAMPIMAGE input_buf,
570          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
571 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_sse2
572         (JDIMENSION output_width, JSAMPIMAGE input_buf,
573          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
574 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_sse2
575         (JDIMENSION output_width, JSAMPIMAGE input_buf,
576          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
577 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_sse2
578         (JDIMENSION output_width, JSAMPIMAGE input_buf,
579          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
580 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_sse2
581         (JDIMENSION output_width, JSAMPIMAGE input_buf,
582          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
583 
584 EXTERN(void) jsimd_h2v1_merged_upsample_mips_dspr2
585         (JDIMENSION output_width, JSAMPIMAGE input_buf,
586          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
587 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_mips_dspr2
588         (JDIMENSION output_width, JSAMPIMAGE input_buf,
589          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
590 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_mips_dspr2
591         (JDIMENSION output_width, JSAMPIMAGE input_buf,
592          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
593 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_mips_dspr2
594         (JDIMENSION output_width, JSAMPIMAGE input_buf,
595          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
596 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_mips_dspr2
597         (JDIMENSION output_width, JSAMPIMAGE input_buf,
598          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
599 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_mips_dspr2
600         (JDIMENSION output_width, JSAMPIMAGE input_buf,
601          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
602 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_mips_dspr2
603         (JDIMENSION output_width, JSAMPIMAGE input_buf,
604          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
605 
606 EXTERN(void) jsimd_h2v2_merged_upsample_mips_dspr2
607         (JDIMENSION output_width, JSAMPIMAGE input_buf,
608          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
609 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_mips_dspr2
610         (JDIMENSION output_width, JSAMPIMAGE input_buf,
611          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
612 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_mips_dspr2
613         (JDIMENSION output_width, JSAMPIMAGE input_buf,
614          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
615 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_mips_dspr2
616         (JDIMENSION output_width, JSAMPIMAGE input_buf,
617          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
618 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_mips_dspr2
619         (JDIMENSION output_width, JSAMPIMAGE input_buf,
620          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
621 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_mips_dspr2
622         (JDIMENSION output_width, JSAMPIMAGE input_buf,
623          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
624 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_mips_dspr2
625         (JDIMENSION output_width, JSAMPIMAGE input_buf,
626          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
627 
628 EXTERN(void) jsimd_h2v1_merged_upsample_altivec
629         (JDIMENSION output_width, JSAMPIMAGE input_buf,
630          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
631 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_altivec
632         (JDIMENSION output_width, JSAMPIMAGE input_buf,
633          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
634 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_altivec
635         (JDIMENSION output_width, JSAMPIMAGE input_buf,
636          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
637 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_altivec
638         (JDIMENSION output_width, JSAMPIMAGE input_buf,
639          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
640 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_altivec
641         (JDIMENSION output_width, JSAMPIMAGE input_buf,
642          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
643 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_altivec
644         (JDIMENSION output_width, JSAMPIMAGE input_buf,
645          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
646 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_altivec
647         (JDIMENSION output_width, JSAMPIMAGE input_buf,
648          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
649 
650 EXTERN(void) jsimd_h2v2_merged_upsample_altivec
651         (JDIMENSION output_width, JSAMPIMAGE input_buf,
652          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
653 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_altivec
654         (JDIMENSION output_width, JSAMPIMAGE input_buf,
655          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
656 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_altivec
657         (JDIMENSION output_width, JSAMPIMAGE input_buf,
658          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
659 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_altivec
660         (JDIMENSION output_width, JSAMPIMAGE input_buf,
661          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
662 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_altivec
663         (JDIMENSION output_width, JSAMPIMAGE input_buf,
664          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
665 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_altivec
666         (JDIMENSION output_width, JSAMPIMAGE input_buf,
667          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
668 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_altivec
669         (JDIMENSION output_width, JSAMPIMAGE input_buf,
670          JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
671 
672 /* Sample Conversion */
673 EXTERN(void) jsimd_convsamp_mmx
674         (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
675 
676 EXTERN(void) jsimd_convsamp_sse2
677         (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
678 
679 EXTERN(void) jsimd_convsamp_neon
680         (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
681 
682 EXTERN(void) jsimd_convsamp_mips_dspr2
683         (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
684 
685 EXTERN(void) jsimd_convsamp_altivec
686         (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
687 
688 /* Floating Point Sample Conversion */
689 EXTERN(void) jsimd_convsamp_float_3dnow
690         (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
691 
692 EXTERN(void) jsimd_convsamp_float_sse
693         (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
694 
695 EXTERN(void) jsimd_convsamp_float_sse2
696         (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
697 
698 EXTERN(void) jsimd_convsamp_float_mips_dspr2
699         (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
700 
701 /* Slow Integer Forward DCT */
702 EXTERN(void) jsimd_fdct_islow_mmx (DCTELEM *data);
703 
704 extern const int jconst_fdct_islow_sse2[];
705 EXTERN(void) jsimd_fdct_islow_sse2 (DCTELEM *data);
706 
707 EXTERN(void) jsimd_fdct_islow_neon (DCTELEM *data);
708 
709 EXTERN(void) jsimd_fdct_islow_mips_dspr2 (DCTELEM *data);
710 
711 EXTERN(void) jsimd_fdct_islow_altivec (DCTELEM *data);
712 
713 /* Fast Integer Forward DCT */
714 EXTERN(void) jsimd_fdct_ifast_mmx (DCTELEM *data);
715 
716 extern const int jconst_fdct_ifast_sse2[];
717 EXTERN(void) jsimd_fdct_ifast_sse2 (DCTELEM *data);
718 
719 EXTERN(void) jsimd_fdct_ifast_neon (DCTELEM *data);
720 
721 EXTERN(void) jsimd_fdct_ifast_mips_dspr2 (DCTELEM *data);
722 
723 EXTERN(void) jsimd_fdct_ifast_altivec (DCTELEM *data);
724 
725 /* Floating Point Forward DCT */
726 EXTERN(void) jsimd_fdct_float_3dnow (FAST_FLOAT *data);
727 
728 extern const int jconst_fdct_float_sse[];
729 EXTERN(void) jsimd_fdct_float_sse (FAST_FLOAT *data);
730 
731 /* Quantization */
732 EXTERN(void) jsimd_quantize_mmx
733         (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
734 
735 EXTERN(void) jsimd_quantize_sse2
736         (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
737 
738 EXTERN(void) jsimd_quantize_neon
739         (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
740 
741 EXTERN(void) jsimd_quantize_mips_dspr2
742         (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
743 
744 EXTERN(void) jsimd_quantize_altivec
745         (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
746 
747 /* Floating Point Quantization */
748 EXTERN(void) jsimd_quantize_float_3dnow
749         (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
750 
751 EXTERN(void) jsimd_quantize_float_sse
752         (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
753 
754 EXTERN(void) jsimd_quantize_float_sse2
755         (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
756 
757 EXTERN(void) jsimd_quantize_float_mips_dspr2
758         (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
759 
760 /* Scaled Inverse DCT */
761 EXTERN(void) jsimd_idct_2x2_mmx
762         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
763          JDIMENSION output_col);
764 EXTERN(void) jsimd_idct_4x4_mmx
765         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
766          JDIMENSION output_col);
767 
768 extern const int jconst_idct_red_sse2[];
769 EXTERN(void) jsimd_idct_2x2_sse2
770         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
771          JDIMENSION output_col);
772 EXTERN(void) jsimd_idct_4x4_sse2
773         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
774          JDIMENSION output_col);
775 
776 EXTERN(void) jsimd_idct_2x2_neon
777         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
778          JDIMENSION output_col);
779 EXTERN(void) jsimd_idct_4x4_neon
780         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
781          JDIMENSION output_col);
782 
783 EXTERN(void) jsimd_idct_2x2_mips_dspr2
784         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
785          JDIMENSION output_col);
786 EXTERN(void) jsimd_idct_4x4_mips_dspr2
787         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
788          JDIMENSION output_col, int *workspace);
789 EXTERN(void) jsimd_idct_6x6_mips_dspr2
790         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
791          JDIMENSION output_col);
792 EXTERN(void) jsimd_idct_12x12_pass1_mips_dspr2
793         (JCOEFPTR coef_block, void *dct_table, int *workspace);
794 EXTERN(void) jsimd_idct_12x12_pass2_mips_dspr2
795         (int *workspace, int *output);
796 
797 /* Slow Integer Inverse DCT */
798 EXTERN(void) jsimd_idct_islow_mmx
799         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
800          JDIMENSION output_col);
801 
802 extern const int jconst_idct_islow_sse2[];
803 EXTERN(void) jsimd_idct_islow_sse2
804         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
805          JDIMENSION output_col);
806 
807 EXTERN(void) jsimd_idct_islow_neon
808         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
809          JDIMENSION output_col);
810 
811 EXTERN(void) jsimd_idct_islow_mips_dspr2
812         (void *dct_table, JCOEFPTR coef_block, int *output_buf,
813          JSAMPLE *output_col);
814 
815 EXTERN(void) jsimd_idct_islow_altivec
816         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
817          JDIMENSION output_col);
818 
819 /* Fast Integer Inverse DCT */
820 EXTERN(void) jsimd_idct_ifast_mmx
821         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
822          JDIMENSION output_col);
823 
824 extern const int jconst_idct_ifast_sse2[];
825 EXTERN(void) jsimd_idct_ifast_sse2
826         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
827          JDIMENSION output_col);
828 
829 EXTERN(void) jsimd_idct_ifast_neon
830         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
831          JDIMENSION output_col);
832 
833 EXTERN(void) jsimd_idct_ifast_cols_mips_dspr2
834         (JCOEF *inptr, IFAST_MULT_TYPE *quantptr, DCTELEM *wsptr,
835          const int *idct_coefs);
836 EXTERN(void) jsimd_idct_ifast_rows_mips_dspr2
837         (DCTELEM *wsptr, JSAMPARRAY output_buf, JDIMENSION output_col,
838          const int *idct_coefs);
839 
840 EXTERN(void) jsimd_idct_ifast_altivec
841         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
842          JDIMENSION output_col);
843 
844 /* Floating Point Inverse DCT */
845 EXTERN(void) jsimd_idct_float_3dnow
846         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
847          JDIMENSION output_col);
848 
849 extern const int jconst_idct_float_sse[];
850 EXTERN(void) jsimd_idct_float_sse
851         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
852          JDIMENSION output_col);
853 
854 extern const int jconst_idct_float_sse2[];
855 EXTERN(void) jsimd_idct_float_sse2
856         (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
857          JDIMENSION output_col);
858 
859 /* Huffman coding */
860 extern const int jconst_huff_encode_one_block[];
861 EXTERN(JOCTET*) jsimd_huff_encode_one_block_sse2
862         (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
863          c_derived_tbl *dctbl, c_derived_tbl *actbl);
864 
865 EXTERN(JOCTET*) jsimd_huff_encode_one_block_neon
866         (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
867          c_derived_tbl *dctbl, c_derived_tbl *actbl);
868 
869 EXTERN(JOCTET*) jsimd_huff_encode_one_block_neon_slowtbl
870         (void *state, JOCTET *buffer, JCOEFPTR block, int last_dc_val,
871          c_derived_tbl *dctbl, c_derived_tbl *actbl);
872