1 /*
2  * jsimd_loongson.c
3  *
4  * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
5  * Copyright (C) 2009-2011, 2014, 2016, 2018, D. R. Commander.
6  * Copyright (C) 2013-2014, MIPS Technologies, Inc., California.
7  * Copyright (C) 2015, 2018, Matthieu Darbois.
8  * Copyright (C) 2016-2017, Loongson Technology Corporation Limited, BeiJing.
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  * This file contains the interface between the "normal" portions
15  * of the library and the SIMD implementations when running on a
16  * Loongson architecture.
17  */
18 
19 #define JPEG_INTERNALS
20 #include "../../jinclude.h"
21 #include "../../jpeglib.h"
22 #include "../../jsimd.h"
23 #include "../../jdct.h"
24 #include "../../jsimddct.h"
25 #include "../jsimd.h"
26 
27 static unsigned int simd_support = ~0;
28 
29 /*
30  * Check what SIMD accelerations are supported.
31  *
32  * FIXME: This code is racy under a multi-threaded environment.
33  */
34 LOCAL(void)
init_simd(void)35 init_simd(void)
36 {
37 #ifndef NO_GETENV
38   char *env = NULL;
39 #endif
40 
41   if (simd_support != ~0U)
42     return;
43 
44   simd_support |= JSIMD_MMI;
45 
46 #ifndef NO_GETENV
47   /* Force different settings through environment variables */
48   env = getenv("JSIMD_FORCENONE");
49   if ((env != NULL) && (strcmp(env, "1") == 0))
50     simd_support = 0;
51 #endif
52 }
53 
54 GLOBAL(int)
jsimd_can_rgb_ycc(void)55 jsimd_can_rgb_ycc(void)
56 {
57   init_simd();
58 
59   /* The code is optimised for these values only */
60   if (BITS_IN_JSAMPLE != 8)
61     return 0;
62   if (sizeof(JDIMENSION) != 4)
63     return 0;
64   if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4))
65     return 0;
66 
67   if (simd_support & JSIMD_MMI)
68     return 1;
69 
70   return 0;
71 }
72 
73 GLOBAL(int)
jsimd_can_rgb_gray(void)74 jsimd_can_rgb_gray(void)
75 {
76   return 0;
77 }
78 
79 GLOBAL(int)
jsimd_can_ycc_rgb(void)80 jsimd_can_ycc_rgb(void)
81 {
82   init_simd();
83 
84   /* The code is optimised for these values only */
85   if (BITS_IN_JSAMPLE != 8)
86     return 0;
87   if (sizeof(JDIMENSION) != 4)
88     return 0;
89   if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4))
90     return 0;
91 
92   if (simd_support & JSIMD_MMI)
93     return 1;
94 
95   return 0;
96 }
97 
98 GLOBAL(int)
jsimd_can_ycc_rgb565(void)99 jsimd_can_ycc_rgb565(void)
100 {
101   return 0;
102 }
103 
104 GLOBAL(int)
jsimd_c_can_null_convert(void)105 jsimd_c_can_null_convert(void)
106 {
107   return 0;
108 }
109 
110 GLOBAL(void)
jsimd_rgb_ycc_convert(j_compress_ptr cinfo,JSAMPARRAY input_buf,JSAMPIMAGE output_buf,JDIMENSION output_row,int num_rows)111 jsimd_rgb_ycc_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf,
112                       JSAMPIMAGE output_buf, JDIMENSION output_row,
113                       int num_rows)
114 {
115   void (*mmifct) (JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int);
116 
117   switch (cinfo->in_color_space) {
118   case JCS_EXT_RGB:
119     mmifct = jsimd_extrgb_ycc_convert_mmi;
120     break;
121   case JCS_EXT_RGBX:
122   case JCS_EXT_RGBA:
123     mmifct = jsimd_extrgbx_ycc_convert_mmi;
124     break;
125   case JCS_EXT_BGR:
126     mmifct = jsimd_extbgr_ycc_convert_mmi;
127     break;
128   case JCS_EXT_BGRX:
129   case JCS_EXT_BGRA:
130     mmifct = jsimd_extbgrx_ycc_convert_mmi;
131     break;
132   case JCS_EXT_XBGR:
133   case JCS_EXT_ABGR:
134     mmifct = jsimd_extxbgr_ycc_convert_mmi;
135     break;
136   case JCS_EXT_XRGB:
137   case JCS_EXT_ARGB:
138     mmifct = jsimd_extxrgb_ycc_convert_mmi;
139     break;
140   default:
141     mmifct = jsimd_rgb_ycc_convert_mmi;
142     break;
143   }
144 
145   mmifct(cinfo->image_width, input_buf, output_buf, output_row, num_rows);
146 }
147 
148 GLOBAL(void)
jsimd_rgb_gray_convert(j_compress_ptr cinfo,JSAMPARRAY input_buf,JSAMPIMAGE output_buf,JDIMENSION output_row,int num_rows)149 jsimd_rgb_gray_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf,
150                        JSAMPIMAGE output_buf, JDIMENSION output_row,
151                        int num_rows)
152 {
153 }
154 
155 GLOBAL(void)
jsimd_ycc_rgb_convert(j_decompress_ptr cinfo,JSAMPIMAGE input_buf,JDIMENSION input_row,JSAMPARRAY output_buf,int num_rows)156 jsimd_ycc_rgb_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
157                       JDIMENSION input_row, JSAMPARRAY output_buf,
158                       int num_rows)
159 {
160   void (*mmifct) (JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, int);
161 
162   switch (cinfo->out_color_space) {
163   case JCS_EXT_RGB:
164     mmifct = jsimd_ycc_extrgb_convert_mmi;
165     break;
166   case JCS_EXT_RGBX:
167   case JCS_EXT_RGBA:
168     mmifct = jsimd_ycc_extrgbx_convert_mmi;
169     break;
170   case JCS_EXT_BGR:
171     mmifct = jsimd_ycc_extbgr_convert_mmi;
172     break;
173   case JCS_EXT_BGRX:
174   case JCS_EXT_BGRA:
175     mmifct = jsimd_ycc_extbgrx_convert_mmi;
176     break;
177   case JCS_EXT_XBGR:
178   case JCS_EXT_ABGR:
179     mmifct = jsimd_ycc_extxbgr_convert_mmi;
180     break;
181   case JCS_EXT_XRGB:
182   case JCS_EXT_ARGB:
183     mmifct = jsimd_ycc_extxrgb_convert_mmi;
184     break;
185   default:
186     mmifct = jsimd_ycc_rgb_convert_mmi;
187     break;
188   }
189 
190   mmifct(cinfo->output_width, input_buf, input_row, output_buf, num_rows);
191 }
192 
193 GLOBAL(void)
jsimd_ycc_rgb565_convert(j_decompress_ptr cinfo,JSAMPIMAGE input_buf,JDIMENSION input_row,JSAMPARRAY output_buf,int num_rows)194 jsimd_ycc_rgb565_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
195                          JDIMENSION input_row, JSAMPARRAY output_buf,
196                          int num_rows)
197 {
198 }
199 
200 GLOBAL(void)
jsimd_c_null_convert(j_compress_ptr cinfo,JSAMPARRAY input_buf,JSAMPIMAGE output_buf,JDIMENSION output_row,int num_rows)201 jsimd_c_null_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf,
202                      JSAMPIMAGE output_buf, JDIMENSION output_row,
203                      int num_rows)
204 {
205 }
206 
207 GLOBAL(int)
jsimd_can_h2v2_downsample(void)208 jsimd_can_h2v2_downsample(void)
209 {
210   init_simd();
211 
212   /* The code is optimised for these values only */
213   if (BITS_IN_JSAMPLE != 8)
214     return 0;
215   if (sizeof(JDIMENSION) != 4)
216     return 0;
217 
218   if (simd_support & JSIMD_MMI)
219     return 1;
220 
221   return 0;
222 }
223 
224 GLOBAL(int)
jsimd_can_h2v2_smooth_downsample(void)225 jsimd_can_h2v2_smooth_downsample(void)
226 {
227   return 0;
228 }
229 
230 GLOBAL(int)
jsimd_can_h2v1_downsample(void)231 jsimd_can_h2v1_downsample(void)
232 {
233   return 0;
234 }
235 
236 GLOBAL(void)
jsimd_h2v2_downsample(j_compress_ptr cinfo,jpeg_component_info * compptr,JSAMPARRAY input_data,JSAMPARRAY output_data)237 jsimd_h2v2_downsample(j_compress_ptr cinfo, jpeg_component_info *compptr,
238                       JSAMPARRAY input_data, JSAMPARRAY output_data)
239 {
240   jsimd_h2v2_downsample_mmi(cinfo->image_width, cinfo->max_v_samp_factor,
241                             compptr->v_samp_factor, compptr->width_in_blocks,
242                             input_data, output_data);
243 }
244 
245 GLOBAL(void)
jsimd_h2v2_smooth_downsample(j_compress_ptr cinfo,jpeg_component_info * compptr,JSAMPARRAY input_data,JSAMPARRAY output_data)246 jsimd_h2v2_smooth_downsample(j_compress_ptr cinfo,
247                              jpeg_component_info *compptr,
248                              JSAMPARRAY input_data, JSAMPARRAY output_data)
249 {
250 }
251 
252 GLOBAL(void)
jsimd_h2v1_downsample(j_compress_ptr cinfo,jpeg_component_info * compptr,JSAMPARRAY input_data,JSAMPARRAY output_data)253 jsimd_h2v1_downsample(j_compress_ptr cinfo, jpeg_component_info *compptr,
254                       JSAMPARRAY input_data, JSAMPARRAY output_data)
255 {
256 }
257 
258 GLOBAL(int)
jsimd_can_h2v2_upsample(void)259 jsimd_can_h2v2_upsample(void)
260 {
261   return 0;
262 }
263 
264 GLOBAL(int)
jsimd_can_h2v1_upsample(void)265 jsimd_can_h2v1_upsample(void)
266 {
267   return 0;
268 }
269 
270 GLOBAL(int)
jsimd_can_int_upsample(void)271 jsimd_can_int_upsample(void)
272 {
273   return 0;
274 }
275 
276 GLOBAL(void)
jsimd_h2v2_upsample(j_decompress_ptr cinfo,jpeg_component_info * compptr,JSAMPARRAY input_data,JSAMPARRAY * output_data_ptr)277 jsimd_h2v2_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
278                     JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr)
279 {
280 }
281 
282 GLOBAL(void)
jsimd_h2v1_upsample(j_decompress_ptr cinfo,jpeg_component_info * compptr,JSAMPARRAY input_data,JSAMPARRAY * output_data_ptr)283 jsimd_h2v1_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
284                     JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr)
285 {
286 }
287 
288 GLOBAL(void)
jsimd_int_upsample(j_decompress_ptr cinfo,jpeg_component_info * compptr,JSAMPARRAY input_data,JSAMPARRAY * output_data_ptr)289 jsimd_int_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
290                    JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr)
291 {
292 }
293 
294 GLOBAL(int)
jsimd_can_h2v2_fancy_upsample(void)295 jsimd_can_h2v2_fancy_upsample(void)
296 {
297   init_simd();
298 
299   /* The code is optimised for these values only */
300   if (BITS_IN_JSAMPLE != 8)
301     return 0;
302   if (sizeof(JDIMENSION) != 4)
303     return 0;
304 
305   if (simd_support & JSIMD_MMI)
306     return 1;
307 
308   return 0;
309 }
310 
311 GLOBAL(int)
jsimd_can_h2v1_fancy_upsample(void)312 jsimd_can_h2v1_fancy_upsample(void)
313 {
314   return 0;
315 }
316 
317 GLOBAL(void)
jsimd_h2v2_fancy_upsample(j_decompress_ptr cinfo,jpeg_component_info * compptr,JSAMPARRAY input_data,JSAMPARRAY * output_data_ptr)318 jsimd_h2v2_fancy_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
319                           JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr)
320 {
321   jsimd_h2v2_fancy_upsample_mmi(cinfo->max_v_samp_factor,
322                                 compptr->downsampled_width, input_data,
323                                 output_data_ptr);
324 }
325 
326 GLOBAL(void)
jsimd_h2v1_fancy_upsample(j_decompress_ptr cinfo,jpeg_component_info * compptr,JSAMPARRAY input_data,JSAMPARRAY * output_data_ptr)327 jsimd_h2v1_fancy_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
328                           JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr)
329 {
330 }
331 
332 GLOBAL(int)
jsimd_can_h2v2_merged_upsample(void)333 jsimd_can_h2v2_merged_upsample(void)
334 {
335   return 0;
336 }
337 
338 GLOBAL(int)
jsimd_can_h2v1_merged_upsample(void)339 jsimd_can_h2v1_merged_upsample(void)
340 {
341   return 0;
342 }
343 
344 GLOBAL(void)
jsimd_h2v2_merged_upsample(j_decompress_ptr cinfo,JSAMPIMAGE input_buf,JDIMENSION in_row_group_ctr,JSAMPARRAY output_buf)345 jsimd_h2v2_merged_upsample(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
346                            JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf)
347 {
348 }
349 
350 GLOBAL(void)
jsimd_h2v1_merged_upsample(j_decompress_ptr cinfo,JSAMPIMAGE input_buf,JDIMENSION in_row_group_ctr,JSAMPARRAY output_buf)351 jsimd_h2v1_merged_upsample(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
352                            JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf)
353 {
354 }
355 
356 GLOBAL(int)
jsimd_can_convsamp(void)357 jsimd_can_convsamp(void)
358 {
359   return 0;
360 }
361 
362 GLOBAL(int)
jsimd_can_convsamp_float(void)363 jsimd_can_convsamp_float(void)
364 {
365   return 0;
366 }
367 
368 GLOBAL(void)
jsimd_convsamp(JSAMPARRAY sample_data,JDIMENSION start_col,DCTELEM * workspace)369 jsimd_convsamp(JSAMPARRAY sample_data, JDIMENSION start_col,
370                DCTELEM *workspace)
371 {
372 }
373 
374 GLOBAL(void)
jsimd_convsamp_float(JSAMPARRAY sample_data,JDIMENSION start_col,FAST_FLOAT * workspace)375 jsimd_convsamp_float(JSAMPARRAY sample_data, JDIMENSION start_col,
376                      FAST_FLOAT *workspace)
377 {
378 }
379 
380 GLOBAL(int)
jsimd_can_fdct_islow(void)381 jsimd_can_fdct_islow(void)
382 {
383   init_simd();
384 
385   /* The code is optimised for these values only */
386   if (DCTSIZE != 8)
387     return 0;
388   if (sizeof(DCTELEM) != 2)
389     return 0;
390 
391   if (simd_support & JSIMD_MMI)
392     return 1;
393 
394   return 0;
395 }
396 
397 GLOBAL(int)
jsimd_can_fdct_ifast(void)398 jsimd_can_fdct_ifast(void)
399 {
400   return 0;
401 }
402 
403 GLOBAL(int)
jsimd_can_fdct_float(void)404 jsimd_can_fdct_float(void)
405 {
406   return 0;
407 }
408 
409 GLOBAL(void)
jsimd_fdct_islow(DCTELEM * data)410 jsimd_fdct_islow(DCTELEM *data)
411 {
412   jsimd_fdct_islow_mmi(data);
413 }
414 
415 GLOBAL(void)
jsimd_fdct_ifast(DCTELEM * data)416 jsimd_fdct_ifast(DCTELEM *data)
417 {
418 }
419 
420 GLOBAL(void)
jsimd_fdct_float(FAST_FLOAT * data)421 jsimd_fdct_float(FAST_FLOAT *data)
422 {
423 }
424 
425 GLOBAL(int)
jsimd_can_quantize(void)426 jsimd_can_quantize(void)
427 {
428   init_simd();
429 
430   /* The code is optimised for these values only */
431   if (DCTSIZE != 8)
432     return 0;
433   if (sizeof(JCOEF) != 2)
434     return 0;
435   if (sizeof(DCTELEM) != 2)
436     return 0;
437 
438   if (simd_support & JSIMD_MMI)
439     return 1;
440 
441   return 0;
442 }
443 
444 GLOBAL(int)
jsimd_can_quantize_float(void)445 jsimd_can_quantize_float(void)
446 {
447   return 0;
448 }
449 
450 GLOBAL(void)
jsimd_quantize(JCOEFPTR coef_block,DCTELEM * divisors,DCTELEM * workspace)451 jsimd_quantize(JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace)
452 {
453   jsimd_quantize_mmi(coef_block, divisors, workspace);
454 }
455 
456 GLOBAL(void)
jsimd_quantize_float(JCOEFPTR coef_block,FAST_FLOAT * divisors,FAST_FLOAT * workspace)457 jsimd_quantize_float(JCOEFPTR coef_block, FAST_FLOAT *divisors,
458                      FAST_FLOAT *workspace)
459 {
460 }
461 
462 GLOBAL(int)
jsimd_can_idct_2x2(void)463 jsimd_can_idct_2x2(void)
464 {
465   return 0;
466 }
467 
468 GLOBAL(int)
jsimd_can_idct_4x4(void)469 jsimd_can_idct_4x4(void)
470 {
471   return 0;
472 }
473 
474 GLOBAL(int)
jsimd_can_idct_6x6(void)475 jsimd_can_idct_6x6(void)
476 {
477   return 0;
478 }
479 
480 GLOBAL(int)
jsimd_can_idct_12x12(void)481 jsimd_can_idct_12x12(void)
482 {
483   return 0;
484 }
485 
486 GLOBAL(void)
jsimd_idct_2x2(j_decompress_ptr cinfo,jpeg_component_info * compptr,JCOEFPTR coef_block,JSAMPARRAY output_buf,JDIMENSION output_col)487 jsimd_idct_2x2(j_decompress_ptr cinfo, jpeg_component_info *compptr,
488                JCOEFPTR coef_block, JSAMPARRAY output_buf,
489                JDIMENSION output_col)
490 {
491 }
492 
493 GLOBAL(void)
jsimd_idct_4x4(j_decompress_ptr cinfo,jpeg_component_info * compptr,JCOEFPTR coef_block,JSAMPARRAY output_buf,JDIMENSION output_col)494 jsimd_idct_4x4(j_decompress_ptr cinfo, jpeg_component_info *compptr,
495                JCOEFPTR coef_block, JSAMPARRAY output_buf,
496                JDIMENSION output_col)
497 {
498 }
499 
500 GLOBAL(void)
jsimd_idct_6x6(j_decompress_ptr cinfo,jpeg_component_info * compptr,JCOEFPTR coef_block,JSAMPARRAY output_buf,JDIMENSION output_col)501 jsimd_idct_6x6(j_decompress_ptr cinfo, jpeg_component_info *compptr,
502                JCOEFPTR coef_block, JSAMPARRAY output_buf,
503                JDIMENSION output_col)
504 {
505 }
506 
507 GLOBAL(void)
jsimd_idct_12x12(j_decompress_ptr cinfo,jpeg_component_info * compptr,JCOEFPTR coef_block,JSAMPARRAY output_buf,JDIMENSION output_col)508 jsimd_idct_12x12(j_decompress_ptr cinfo, jpeg_component_info *compptr,
509                  JCOEFPTR coef_block, JSAMPARRAY output_buf,
510                  JDIMENSION output_col)
511 {
512 }
513 
514 GLOBAL(int)
jsimd_can_idct_islow(void)515 jsimd_can_idct_islow(void)
516 {
517   init_simd();
518 
519   /* The code is optimised for these values only */
520   if (DCTSIZE != 8)
521     return 0;
522   if (sizeof(JCOEF) != 2)
523     return 0;
524   if (BITS_IN_JSAMPLE != 8)
525     return 0;
526   if (sizeof(JDIMENSION) != 4)
527     return 0;
528   if (sizeof(ISLOW_MULT_TYPE) != 2)
529     return 0;
530 
531   if (simd_support & JSIMD_MMI)
532     return 1;
533 
534   return 0;
535 }
536 
537 GLOBAL(int)
jsimd_can_idct_ifast(void)538 jsimd_can_idct_ifast(void)
539 {
540   return 0;
541 }
542 
543 GLOBAL(int)
jsimd_can_idct_float(void)544 jsimd_can_idct_float(void)
545 {
546   return 0;
547 }
548 
549 GLOBAL(void)
jsimd_idct_islow(j_decompress_ptr cinfo,jpeg_component_info * compptr,JCOEFPTR coef_block,JSAMPARRAY output_buf,JDIMENSION output_col)550 jsimd_idct_islow(j_decompress_ptr cinfo, jpeg_component_info *compptr,
551                  JCOEFPTR coef_block, JSAMPARRAY output_buf,
552                  JDIMENSION output_col)
553 {
554   jsimd_idct_islow_mmi(compptr->dct_table, coef_block, output_buf, output_col);
555 }
556 
557 GLOBAL(void)
jsimd_idct_ifast(j_decompress_ptr cinfo,jpeg_component_info * compptr,JCOEFPTR coef_block,JSAMPARRAY output_buf,JDIMENSION output_col)558 jsimd_idct_ifast(j_decompress_ptr cinfo, jpeg_component_info *compptr,
559                  JCOEFPTR coef_block, JSAMPARRAY output_buf,
560                  JDIMENSION output_col)
561 {
562 }
563 
564 GLOBAL(void)
jsimd_idct_float(j_decompress_ptr cinfo,jpeg_component_info * compptr,JCOEFPTR coef_block,JSAMPARRAY output_buf,JDIMENSION output_col)565 jsimd_idct_float(j_decompress_ptr cinfo, jpeg_component_info *compptr,
566                  JCOEFPTR coef_block, JSAMPARRAY output_buf,
567                  JDIMENSION output_col)
568 {
569 }
570 
571 GLOBAL(int)
jsimd_can_huff_encode_one_block(void)572 jsimd_can_huff_encode_one_block(void)
573 {
574   return 0;
575 }
576 
577 GLOBAL(JOCTET *)
jsimd_huff_encode_one_block(void * state,JOCTET * buffer,JCOEFPTR block,int last_dc_val,c_derived_tbl * dctbl,c_derived_tbl * actbl)578 jsimd_huff_encode_one_block(void *state, JOCTET *buffer, JCOEFPTR block,
579                             int last_dc_val, c_derived_tbl *dctbl,
580                             c_derived_tbl *actbl)
581 {
582   return NULL;
583 }
584 
585 GLOBAL(int)
jsimd_can_encode_mcu_AC_first_prepare(void)586 jsimd_can_encode_mcu_AC_first_prepare(void)
587 {
588   return 0;
589 }
590 
591 GLOBAL(void)
jsimd_encode_mcu_AC_first_prepare(const JCOEF * block,const int * jpeg_natural_order_start,int Sl,int Al,JCOEF * values,size_t * zerobits)592 jsimd_encode_mcu_AC_first_prepare(const JCOEF *block,
593                                   const int *jpeg_natural_order_start, int Sl,
594                                   int Al, JCOEF *values, size_t *zerobits)
595 {
596 }
597 
598 GLOBAL(int)
jsimd_can_encode_mcu_AC_refine_prepare(void)599 jsimd_can_encode_mcu_AC_refine_prepare(void)
600 {
601   return 0;
602 }
603 
604 GLOBAL(int)
jsimd_encode_mcu_AC_refine_prepare(const JCOEF * block,const int * jpeg_natural_order_start,int Sl,int Al,JCOEF * absvalues,size_t * bits)605 jsimd_encode_mcu_AC_refine_prepare(const JCOEF *block,
606                                    const int *jpeg_natural_order_start, int Sl,
607                                    int Al, JCOEF *absvalues, size_t *bits)
608 {
609   return 0;
610 }
611