SIMD: Formatting tweaks + remove unnecessary code

+ "JSIMD_ARM_NEON" = "JSIMD_NEON"
+ "JSIMD_MIPS_DSPR2" = "JSIMD_DSPR2"
+ "*_mips_dspr2" = "*_dspr2"

It's obvious that "NEON" refers to Arm and "DSPr2" refers to MIPS, and
this naming convention is consistent with the other SIMD extensions.
This commit is contained in:
DRC
2018-02-28 16:24:03 -06:00
parent 3c54642c81
commit 35ed3c97b2
19 changed files with 521 additions and 594 deletions

View File

@@ -82,7 +82,7 @@ parse_proc_cpuinfo (int bufsize)
return 0; return 0;
} }
if (check_feature(buffer, "neon")) if (check_feature(buffer, "neon"))
simd_support |= JSIMD_ARM_NEON; simd_support |= JSIMD_NEON;
} }
fclose(fd); fclose(fd);
} }
@@ -111,7 +111,7 @@ init_simd (void)
simd_support = 0; simd_support = 0;
#if defined(__ARM_NEON__) #if defined(__ARM_NEON__)
simd_support |= JSIMD_ARM_NEON; simd_support |= JSIMD_NEON;
#elif defined(__linux__) || defined(ANDROID) || defined(__ANDROID__) #elif defined(__linux__) || defined(ANDROID) || defined(__ANDROID__)
/* We still have a chance to use NEON regardless of globally used /* We still have a chance to use NEON regardless of globally used
* -mcpu/-mfpu options passed to gcc by performing runtime detection via * -mcpu/-mfpu options passed to gcc by performing runtime detection via
@@ -126,7 +126,7 @@ init_simd (void)
/* Force different settings through environment variables */ /* Force different settings through environment variables */
env = getenv("JSIMD_FORCENEON"); env = getenv("JSIMD_FORCENEON");
if ((env != NULL) && (strcmp(env, "1") == 0)) if ((env != NULL) && (strcmp(env, "1") == 0))
simd_support = JSIMD_ARM_NEON; simd_support = JSIMD_NEON;
env = getenv("JSIMD_FORCENONE"); env = getenv("JSIMD_FORCENONE");
if ((env != NULL) && (strcmp(env, "1") == 0)) if ((env != NULL) && (strcmp(env, "1") == 0))
simd_support = 0; simd_support = 0;
@@ -148,7 +148,7 @@ jsimd_can_rgb_ycc (void)
if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4))
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -157,8 +157,6 @@ jsimd_can_rgb_ycc (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_rgb_gray (void) jsimd_can_rgb_gray (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -175,7 +173,7 @@ jsimd_can_ycc_rgb (void)
if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4))
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -192,7 +190,7 @@ jsimd_can_ycc_rgb565 (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -293,16 +291,12 @@ jsimd_ycc_rgb565_convert (j_decompress_ptr cinfo,
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v2_downsample (void) jsimd_can_h2v2_downsample (void)
{ {
init_simd();
return 0; return 0;
} }
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v1_downsample (void) jsimd_can_h2v1_downsample (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -321,16 +315,12 @@ jsimd_h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr,
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v2_upsample (void) jsimd_can_h2v2_upsample (void)
{ {
init_simd();
return 0; return 0;
} }
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v1_upsample (void) jsimd_can_h2v1_upsample (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -353,8 +343,6 @@ jsimd_h2v1_upsample (j_decompress_ptr cinfo,
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v2_fancy_upsample (void) jsimd_can_h2v2_fancy_upsample (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -369,7 +357,7 @@ jsimd_can_h2v1_fancy_upsample (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -397,16 +385,12 @@ jsimd_h2v1_fancy_upsample (j_decompress_ptr cinfo,
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v2_merged_upsample (void) jsimd_can_h2v2_merged_upsample (void)
{ {
init_simd();
return 0; return 0;
} }
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v1_merged_upsample (void) jsimd_can_h2v1_merged_upsample (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -441,7 +425,7 @@ jsimd_can_convsamp (void)
if (sizeof(DCTELEM) != 2) if (sizeof(DCTELEM) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -450,8 +434,6 @@ jsimd_can_convsamp (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_convsamp_float (void) jsimd_can_convsamp_float (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -471,8 +453,6 @@ jsimd_convsamp_float (JSAMPARRAY sample_data, JDIMENSION start_col,
GLOBAL(int) GLOBAL(int)
jsimd_can_fdct_islow (void) jsimd_can_fdct_islow (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -487,7 +467,7 @@ jsimd_can_fdct_ifast (void)
if (sizeof(DCTELEM) != 2) if (sizeof(DCTELEM) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -496,8 +476,6 @@ jsimd_can_fdct_ifast (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_fdct_float (void) jsimd_can_fdct_float (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -530,7 +508,7 @@ jsimd_can_quantize (void)
if (sizeof(DCTELEM) != 2) if (sizeof(DCTELEM) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -539,8 +517,6 @@ jsimd_can_quantize (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_quantize_float (void) jsimd_can_quantize_float (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -574,7 +550,7 @@ jsimd_can_idct_2x2 (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -597,7 +573,7 @@ jsimd_can_idct_4x4 (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -638,7 +614,7 @@ jsimd_can_idct_islow (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -663,7 +639,7 @@ jsimd_can_idct_ifast (void)
if (IFAST_SCALE_BITS != 2) if (IFAST_SCALE_BITS != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -672,8 +648,6 @@ jsimd_can_idct_ifast (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_idct_float (void) jsimd_can_idct_float (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -712,7 +686,7 @@ jsimd_can_huff_encode_one_block (void)
if (sizeof(JCOEF) != 2) if (sizeof(JCOEF) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON && simd_huffman) if (simd_support & JSIMD_NEON && simd_huffman)
return 1; return 1;
return 0; return 0;

View File

@@ -131,7 +131,7 @@ init_simd (void)
simd_support = 0; simd_support = 0;
simd_support |= JSIMD_ARM_NEON; simd_support |= JSIMD_NEON;
#if defined(__linux__) || defined(ANDROID) || defined(__ANDROID__) #if defined(__linux__) || defined(ANDROID) || defined(__ANDROID__)
while (!parse_proc_cpuinfo(bufsize)) { while (!parse_proc_cpuinfo(bufsize)) {
bufsize *= 2; bufsize *= 2;
@@ -143,7 +143,7 @@ init_simd (void)
/* Force different settings through environment variables */ /* Force different settings through environment variables */
env = getenv("JSIMD_FORCENEON"); env = getenv("JSIMD_FORCENEON");
if ((env != NULL) && (strcmp(env, "1") == 0)) if ((env != NULL) && (strcmp(env, "1") == 0))
simd_support = JSIMD_ARM_NEON; simd_support = JSIMD_NEON;
env = getenv("JSIMD_FORCENONE"); env = getenv("JSIMD_FORCENONE");
if ((env != NULL) && (strcmp(env, "1") == 0)) if ((env != NULL) && (strcmp(env, "1") == 0))
simd_support = 0; simd_support = 0;
@@ -175,7 +175,7 @@ jsimd_can_rgb_ycc (void)
if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4))
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -184,8 +184,6 @@ jsimd_can_rgb_ycc (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_rgb_gray (void) jsimd_can_rgb_gray (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -202,7 +200,7 @@ jsimd_can_ycc_rgb (void)
if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4))
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -219,7 +217,7 @@ jsimd_can_ycc_rgb565 (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -348,7 +346,7 @@ jsimd_can_h2v2_downsample (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -367,7 +365,7 @@ jsimd_can_h2v1_downsample (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -394,16 +392,12 @@ jsimd_h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr,
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v2_upsample (void) jsimd_can_h2v2_upsample (void)
{ {
init_simd();
return 0; return 0;
} }
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v1_upsample (void) jsimd_can_h2v1_upsample (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -426,16 +420,12 @@ jsimd_h2v1_upsample (j_decompress_ptr cinfo,
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v2_fancy_upsample (void) jsimd_can_h2v2_fancy_upsample (void)
{ {
init_simd();
return 0; return 0;
} }
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v1_fancy_upsample (void) jsimd_can_h2v1_fancy_upsample (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -458,16 +448,12 @@ jsimd_h2v1_fancy_upsample (j_decompress_ptr cinfo,
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v2_merged_upsample (void) jsimd_can_h2v2_merged_upsample (void)
{ {
init_simd();
return 0; return 0;
} }
GLOBAL(int) GLOBAL(int)
jsimd_can_h2v1_merged_upsample (void) jsimd_can_h2v1_merged_upsample (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -502,7 +488,7 @@ jsimd_can_convsamp (void)
if (sizeof(DCTELEM) != 2) if (sizeof(DCTELEM) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -511,8 +497,6 @@ jsimd_can_convsamp (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_convsamp_float (void) jsimd_can_convsamp_float (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -540,7 +524,7 @@ jsimd_can_fdct_islow (void)
if (sizeof(DCTELEM) != 2) if (sizeof(DCTELEM) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -557,7 +541,7 @@ jsimd_can_fdct_ifast (void)
if (sizeof(DCTELEM) != 2) if (sizeof(DCTELEM) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -566,8 +550,6 @@ jsimd_can_fdct_ifast (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_fdct_float (void) jsimd_can_fdct_float (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -601,7 +583,7 @@ jsimd_can_quantize (void)
if (sizeof(DCTELEM) != 2) if (sizeof(DCTELEM) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -610,8 +592,6 @@ jsimd_can_quantize (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_quantize_float (void) jsimd_can_quantize_float (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -645,7 +625,7 @@ jsimd_can_idct_2x2 (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -668,7 +648,7 @@ jsimd_can_idct_4x4 (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -709,7 +689,7 @@ jsimd_can_idct_islow (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -734,7 +714,7 @@ jsimd_can_idct_ifast (void)
if (IFAST_SCALE_BITS != 2) if (IFAST_SCALE_BITS != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON) if (simd_support & JSIMD_NEON)
return 1; return 1;
return 0; return 0;
@@ -743,8 +723,6 @@ jsimd_can_idct_ifast (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_idct_float (void) jsimd_can_idct_float (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -783,7 +761,7 @@ jsimd_can_huff_encode_one_block (void)
if (sizeof(JCOEF) != 2) if (sizeof(JCOEF) != 2)
return 0; return 0;
if (simd_support & JSIMD_ARM_NEON && simd_huffman) if (simd_support & JSIMD_NEON && simd_huffman)
return 1; return 1;
return 0; return 0;

View File

@@ -2771,8 +2771,8 @@ asm_function jsimd_quantize_neon
* GLOBAL(void) * GLOBAL(void)
* jsimd_h2v1_downsample_neon (JDIMENSION image_width, int max_v_samp_factor, * jsimd_h2v1_downsample_neon (JDIMENSION image_width, int max_v_samp_factor,
* JDIMENSION v_samp_factor, * JDIMENSION v_samp_factor,
* JDIMENSION width_blocks, JSAMPARRAY input_data, * JDIMENSION width_in_blocks,
* JSAMPARRAY output_data); * JSAMPARRAY input_data, JSAMPARRAY output_data);
*/ */
.balign 16 .balign 16
@@ -2881,7 +2881,8 @@ asm_function jsimd_h2v1_downsample_neon
* *
* GLOBAL(void) * GLOBAL(void)
* jsimd_h2v2_downsample_neon (JDIMENSION image_width, int max_v_samp_factor, * jsimd_h2v2_downsample_neon (JDIMENSION image_width, int max_v_samp_factor,
* JDIMENSION v_samp_factor, JDIMENSION width_blocks, * JDIMENSION v_samp_factor,
* JDIMENSION width_in_blocks,
* JSAMPARRAY input_data, JSAMPARRAY output_data); * JSAMPARRAY input_data, JSAMPARRAY output_data);
*/ */

View File

@@ -29,14 +29,15 @@
; ;
; GLOBAL(void) ; GLOBAL(void)
; jsimd_h2v1_downsample_avx2 (JDIMENSION image_width, int max_v_samp_factor, ; jsimd_h2v1_downsample_avx2 (JDIMENSION image_width, int max_v_samp_factor,
; JDIMENSION v_samp_factor, JDIMENSION width_blocks, ; JDIMENSION v_samp_factor,
; JDIMENSION width_in_blocks,
; JSAMPARRAY input_data, JSAMPARRAY output_data); ; JSAMPARRAY input_data, JSAMPARRAY output_data);
; ;
%define img_width(b) (b)+8 ; JDIMENSION image_width %define img_width(b) (b)+8 ; JDIMENSION image_width
%define max_v_samp(b) (b)+12 ; int max_v_samp_factor %define max_v_samp(b) (b)+12 ; int max_v_samp_factor
%define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor %define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor
%define width_blks(b) (b)+20 ; JDIMENSION width_blocks %define width_blks(b) (b)+20 ; JDIMENSION width_in_blocks
%define input_data(b) (b)+24 ; JSAMPARRAY input_data %define input_data(b) (b)+24 ; JSAMPARRAY input_data
%define output_data(b) (b)+28 ; JSAMPARRAY output_data %define output_data(b) (b)+28 ; JSAMPARRAY output_data
@@ -201,14 +202,15 @@ EXTN(jsimd_h2v1_downsample_avx2):
; ;
; GLOBAL(void) ; GLOBAL(void)
; jsimd_h2v2_downsample_avx2 (JDIMENSION image_width, int max_v_samp_factor, ; jsimd_h2v2_downsample_avx2 (JDIMENSION image_width, int max_v_samp_factor,
; JDIMENSION v_samp_factor, JDIMENSION width_blocks, ; JDIMENSION v_samp_factor,
; JDIMENSION width_in_blocks,
; JSAMPARRAY input_data, JSAMPARRAY output_data); ; JSAMPARRAY input_data, JSAMPARRAY output_data);
; ;
%define img_width(b) (b)+8 ; JDIMENSION image_width %define img_width(b) (b)+8 ; JDIMENSION image_width
%define max_v_samp(b) (b)+12 ; int max_v_samp_factor %define max_v_samp(b) (b)+12 ; int max_v_samp_factor
%define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor %define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor
%define width_blks(b) (b)+20 ; JDIMENSION width_blocks %define width_blks(b) (b)+20 ; JDIMENSION width_in_blocks
%define input_data(b) (b)+24 ; JSAMPARRAY input_data %define input_data(b) (b)+24 ; JSAMPARRAY input_data
%define output_data(b) (b)+28 ; JSAMPARRAY output_data %define output_data(b) (b)+28 ; JSAMPARRAY output_data

View File

@@ -28,14 +28,15 @@
; ;
; GLOBAL(void) ; GLOBAL(void)
; jsimd_h2v1_downsample_mmx (JDIMENSION image_width, int max_v_samp_factor, ; jsimd_h2v1_downsample_mmx (JDIMENSION image_width, int max_v_samp_factor,
; JDIMENSION v_samp_factor, JDIMENSION width_blocks, ; JDIMENSION v_samp_factor,
; JSAMPARRAY input_data, JSAMPARRAY output_data); ; JDIMENSION width_in_blocks, JSAMPARRAY input_data,
; JSAMPARRAY output_data);
; ;
%define img_width(b) (b)+8 ; JDIMENSION image_width %define img_width(b) (b)+8 ; JDIMENSION image_width
%define max_v_samp(b) (b)+12 ; int max_v_samp_factor %define max_v_samp(b) (b)+12 ; int max_v_samp_factor
%define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor %define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor
%define width_blks(b) (b)+20 ; JDIMENSION width_blocks %define width_blks(b) (b)+20 ; JDIMENSION width_in_blocks
%define input_data(b) (b)+24 ; JSAMPARRAY input_data %define input_data(b) (b)+24 ; JSAMPARRAY input_data
%define output_data(b) (b)+28 ; JSAMPARRAY output_data %define output_data(b) (b)+28 ; JSAMPARRAY output_data
@@ -170,14 +171,15 @@ EXTN(jsimd_h2v1_downsample_mmx):
; ;
; GLOBAL(void) ; GLOBAL(void)
; jsimd_h2v2_downsample_mmx (JDIMENSION image_width, int max_v_samp_factor, ; jsimd_h2v2_downsample_mmx (JDIMENSION image_width, int max_v_samp_factor,
; JDIMENSION v_samp_factor, JDIMENSION width_blocks, ; JDIMENSION v_samp_factor,
; JSAMPARRAY input_data, JSAMPARRAY output_data); ; JDIMENSION width_in_blocks, JSAMPARRAY input_data,
; JSAMPARRAY output_data);
; ;
%define img_width(b) (b)+8 ; JDIMENSION image_width %define img_width(b) (b)+8 ; JDIMENSION image_width
%define max_v_samp(b) (b)+12 ; int max_v_samp_factor %define max_v_samp(b) (b)+12 ; int max_v_samp_factor
%define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor %define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor
%define width_blks(b) (b)+20 ; JDIMENSION width_blocks %define width_blks(b) (b)+20 ; JDIMENSION width_in_blocks
%define input_data(b) (b)+24 ; JSAMPARRAY input_data %define input_data(b) (b)+24 ; JSAMPARRAY input_data
%define output_data(b) (b)+28 ; JSAMPARRAY output_data %define output_data(b) (b)+28 ; JSAMPARRAY output_data

View File

@@ -28,14 +28,15 @@
; ;
; GLOBAL(void) ; GLOBAL(void)
; jsimd_h2v1_downsample_sse2 (JDIMENSION image_width, int max_v_samp_factor, ; jsimd_h2v1_downsample_sse2 (JDIMENSION image_width, int max_v_samp_factor,
; JDIMENSION v_samp_factor, JDIMENSION width_blocks, ; JDIMENSION v_samp_factor,
; JDIMENSION width_in_blocks,
; JSAMPARRAY input_data, JSAMPARRAY output_data); ; JSAMPARRAY input_data, JSAMPARRAY output_data);
; ;
%define img_width(b) (b)+8 ; JDIMENSION image_width %define img_width(b) (b)+8 ; JDIMENSION image_width
%define max_v_samp(b) (b)+12 ; int max_v_samp_factor %define max_v_samp(b) (b)+12 ; int max_v_samp_factor
%define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor %define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor
%define width_blks(b) (b)+20 ; JDIMENSION width_blocks %define width_blks(b) (b)+20 ; JDIMENSION width_in_blocks
%define input_data(b) (b)+24 ; JSAMPARRAY input_data %define input_data(b) (b)+24 ; JSAMPARRAY input_data
%define output_data(b) (b)+28 ; JSAMPARRAY output_data %define output_data(b) (b)+28 ; JSAMPARRAY output_data
@@ -183,14 +184,15 @@ EXTN(jsimd_h2v1_downsample_sse2):
; ;
; GLOBAL(void) ; GLOBAL(void)
; jsimd_h2v2_downsample_sse2 (JDIMENSION image_width, int max_v_samp_factor, ; jsimd_h2v2_downsample_sse2 (JDIMENSION image_width, int max_v_samp_factor,
; JDIMENSION v_samp_factor, JDIMENSION width_blocks, ; JDIMENSION v_samp_factor,
; JDIMENSION width_in_blocks,
; JSAMPARRAY input_data, JSAMPARRAY output_data); ; JSAMPARRAY input_data, JSAMPARRAY output_data);
; ;
%define img_width(b) (b)+8 ; JDIMENSION image_width %define img_width(b) (b)+8 ; JDIMENSION image_width
%define max_v_samp(b) (b)+12 ; int max_v_samp_factor %define max_v_samp(b) (b)+12 ; int max_v_samp_factor
%define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor %define v_samp(b) (b)+16 ; JDIMENSION v_samp_factor
%define width_blks(b) (b)+20 ; JDIMENSION width_blocks %define width_blks(b) (b)+20 ; JDIMENSION width_in_blocks
%define input_data(b) (b)+24 ; JSAMPARRAY input_data %define input_data(b) (b)+24 ; JSAMPARRAY input_data
%define output_data(b) (b)+28 ; JSAMPARRAY output_data %define output_data(b) (b)+28 ; JSAMPARRAY output_data

View File

@@ -209,7 +209,7 @@ jsimd_rgb_ycc_convert (j_compress_ptr cinfo,
avx2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows); avx2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows);
else if (simd_support & JSIMD_SSE2) else if (simd_support & JSIMD_SSE2)
sse2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows); sse2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows);
else if (simd_support & JSIMD_MMX) else
mmxfct(cinfo->image_width, input_buf, output_buf, output_row, num_rows); mmxfct(cinfo->image_width, input_buf, output_buf, output_row, num_rows);
} }
@@ -268,7 +268,7 @@ jsimd_rgb_gray_convert (j_compress_ptr cinfo,
avx2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows); avx2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows);
else if (simd_support & JSIMD_SSE2) else if (simd_support & JSIMD_SSE2)
sse2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows); sse2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows);
else if (simd_support & JSIMD_MMX) else
mmxfct(cinfo->image_width, input_buf, output_buf, output_row, num_rows); mmxfct(cinfo->image_width, input_buf, output_buf, output_row, num_rows);
} }
@@ -327,7 +327,7 @@ jsimd_ycc_rgb_convert (j_decompress_ptr cinfo,
avx2fct(cinfo->output_width, input_buf, input_row, output_buf, num_rows); avx2fct(cinfo->output_width, input_buf, input_row, output_buf, num_rows);
else if (simd_support & JSIMD_SSE2) else if (simd_support & JSIMD_SSE2)
sse2fct(cinfo->output_width, input_buf, input_row, output_buf, num_rows); sse2fct(cinfo->output_width, input_buf, input_row, output_buf, num_rows);
else if (simd_support & JSIMD_MMX) else
mmxfct(cinfo->output_width, input_buf, input_row, output_buf, num_rows); mmxfct(cinfo->output_width, input_buf, input_row, output_buf, num_rows);
} }
@@ -394,7 +394,7 @@ jsimd_h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr,
compptr->v_samp_factor, compptr->v_samp_factor,
compptr->width_in_blocks, input_data, compptr->width_in_blocks, input_data,
output_data); output_data);
else if (simd_support & JSIMD_MMX) else
jsimd_h2v2_downsample_mmx(cinfo->image_width, cinfo->max_v_samp_factor, jsimd_h2v2_downsample_mmx(cinfo->image_width, cinfo->max_v_samp_factor,
compptr->v_samp_factor, compptr->width_in_blocks, compptr->v_samp_factor, compptr->width_in_blocks,
input_data, output_data); input_data, output_data);
@@ -414,7 +414,7 @@ jsimd_h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr,
compptr->v_samp_factor, compptr->v_samp_factor,
compptr->width_in_blocks, input_data, compptr->width_in_blocks, input_data,
output_data); output_data);
else if (simd_support & JSIMD_MMX) else
jsimd_h2v1_downsample_mmx(cinfo->image_width, cinfo->max_v_samp_factor, jsimd_h2v1_downsample_mmx(cinfo->image_width, cinfo->max_v_samp_factor,
compptr->v_samp_factor, compptr->width_in_blocks, compptr->v_samp_factor, compptr->width_in_blocks,
input_data, output_data); input_data, output_data);
@@ -474,7 +474,7 @@ jsimd_h2v2_upsample (j_decompress_ptr cinfo,
else if (simd_support & JSIMD_SSE2) else if (simd_support & JSIMD_SSE2)
jsimd_h2v2_upsample_sse2(cinfo->max_v_samp_factor, cinfo->output_width, jsimd_h2v2_upsample_sse2(cinfo->max_v_samp_factor, cinfo->output_width,
input_data, output_data_ptr); input_data, output_data_ptr);
else if (simd_support & JSIMD_MMX) else
jsimd_h2v2_upsample_mmx(cinfo->max_v_samp_factor, cinfo->output_width, jsimd_h2v2_upsample_mmx(cinfo->max_v_samp_factor, cinfo->output_width,
input_data, output_data_ptr); input_data, output_data_ptr);
} }
@@ -491,7 +491,7 @@ jsimd_h2v1_upsample (j_decompress_ptr cinfo,
else if (simd_support & JSIMD_SSE2) else if (simd_support & JSIMD_SSE2)
jsimd_h2v1_upsample_sse2(cinfo->max_v_samp_factor, cinfo->output_width, jsimd_h2v1_upsample_sse2(cinfo->max_v_samp_factor, cinfo->output_width,
input_data, output_data_ptr); input_data, output_data_ptr);
else if (simd_support & JSIMD_MMX) else
jsimd_h2v1_upsample_mmx(cinfo->max_v_samp_factor, cinfo->output_width, jsimd_h2v1_upsample_mmx(cinfo->max_v_samp_factor, cinfo->output_width,
input_data, output_data_ptr); input_data, output_data_ptr);
} }
@@ -556,7 +556,7 @@ jsimd_h2v2_fancy_upsample (j_decompress_ptr cinfo,
jsimd_h2v2_fancy_upsample_sse2(cinfo->max_v_samp_factor, jsimd_h2v2_fancy_upsample_sse2(cinfo->max_v_samp_factor,
compptr->downsampled_width, input_data, compptr->downsampled_width, input_data,
output_data_ptr); output_data_ptr);
else if (simd_support & JSIMD_MMX) else
jsimd_h2v2_fancy_upsample_mmx(cinfo->max_v_samp_factor, jsimd_h2v2_fancy_upsample_mmx(cinfo->max_v_samp_factor,
compptr->downsampled_width, input_data, compptr->downsampled_width, input_data,
output_data_ptr); output_data_ptr);
@@ -576,7 +576,7 @@ jsimd_h2v1_fancy_upsample (j_decompress_ptr cinfo,
jsimd_h2v1_fancy_upsample_sse2(cinfo->max_v_samp_factor, jsimd_h2v1_fancy_upsample_sse2(cinfo->max_v_samp_factor,
compptr->downsampled_width, input_data, compptr->downsampled_width, input_data,
output_data_ptr); output_data_ptr);
else if (simd_support & JSIMD_MMX) else
jsimd_h2v1_fancy_upsample_mmx(cinfo->max_v_samp_factor, jsimd_h2v1_fancy_upsample_mmx(cinfo->max_v_samp_factor,
compptr->downsampled_width, input_data, compptr->downsampled_width, input_data,
output_data_ptr); output_data_ptr);
@@ -684,7 +684,7 @@ jsimd_h2v2_merged_upsample (j_decompress_ptr cinfo,
avx2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf); avx2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf);
else if (simd_support & JSIMD_SSE2) else if (simd_support & JSIMD_SSE2)
sse2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf); sse2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf);
else if (simd_support & JSIMD_MMX) else
mmxfct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf); mmxfct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf);
} }
@@ -744,7 +744,7 @@ jsimd_h2v1_merged_upsample (j_decompress_ptr cinfo,
avx2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf); avx2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf);
else if (simd_support & JSIMD_SSE2) else if (simd_support & JSIMD_SSE2)
sse2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf); sse2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf);
else if (simd_support & JSIMD_MMX) else
mmxfct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf); mmxfct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf);
} }
@@ -806,7 +806,7 @@ jsimd_convsamp (JSAMPARRAY sample_data, JDIMENSION start_col,
jsimd_convsamp_avx2(sample_data, start_col, workspace); jsimd_convsamp_avx2(sample_data, start_col, workspace);
else if (simd_support & JSIMD_SSE2) else if (simd_support & JSIMD_SSE2)
jsimd_convsamp_sse2(sample_data, start_col, workspace); jsimd_convsamp_sse2(sample_data, start_col, workspace);
else if (simd_support & JSIMD_MMX) else
jsimd_convsamp_mmx(sample_data, start_col, workspace); jsimd_convsamp_mmx(sample_data, start_col, workspace);
} }
@@ -818,7 +818,7 @@ jsimd_convsamp_float (JSAMPARRAY sample_data, JDIMENSION start_col,
jsimd_convsamp_float_sse2(sample_data, start_col, workspace); jsimd_convsamp_float_sse2(sample_data, start_col, workspace);
else if (simd_support & JSIMD_SSE) else if (simd_support & JSIMD_SSE)
jsimd_convsamp_float_sse(sample_data, start_col, workspace); jsimd_convsamp_float_sse(sample_data, start_col, workspace);
else if (simd_support & JSIMD_3DNOW) else
jsimd_convsamp_float_3dnow(sample_data, start_col, workspace); jsimd_convsamp_float_3dnow(sample_data, start_col, workspace);
} }
@@ -888,7 +888,7 @@ jsimd_fdct_islow (DCTELEM *data)
jsimd_fdct_islow_avx2(data); jsimd_fdct_islow_avx2(data);
else if (simd_support & JSIMD_SSE2) else if (simd_support & JSIMD_SSE2)
jsimd_fdct_islow_sse2(data); jsimd_fdct_islow_sse2(data);
else if (simd_support & JSIMD_MMX) else
jsimd_fdct_islow_mmx(data); jsimd_fdct_islow_mmx(data);
} }
@@ -897,7 +897,7 @@ jsimd_fdct_ifast (DCTELEM *data)
{ {
if ((simd_support & JSIMD_SSE2) && IS_ALIGNED_SSE(jconst_fdct_islow_sse2)) if ((simd_support & JSIMD_SSE2) && IS_ALIGNED_SSE(jconst_fdct_islow_sse2))
jsimd_fdct_ifast_sse2(data); jsimd_fdct_ifast_sse2(data);
else if (simd_support & JSIMD_MMX) else
jsimd_fdct_ifast_mmx(data); jsimd_fdct_ifast_mmx(data);
} }
@@ -964,7 +964,7 @@ jsimd_quantize (JCOEFPTR coef_block, DCTELEM *divisors,
jsimd_quantize_avx2(coef_block, divisors, workspace); jsimd_quantize_avx2(coef_block, divisors, workspace);
else if (simd_support & JSIMD_SSE2) else if (simd_support & JSIMD_SSE2)
jsimd_quantize_sse2(coef_block, divisors, workspace); jsimd_quantize_sse2(coef_block, divisors, workspace);
else if (simd_support & JSIMD_MMX) else
jsimd_quantize_mmx(coef_block, divisors, workspace); jsimd_quantize_mmx(coef_block, divisors, workspace);
} }
@@ -976,7 +976,7 @@ jsimd_quantize_float (JCOEFPTR coef_block, FAST_FLOAT *divisors,
jsimd_quantize_float_sse2(coef_block, divisors, workspace); jsimd_quantize_float_sse2(coef_block, divisors, workspace);
else if (simd_support & JSIMD_SSE) else if (simd_support & JSIMD_SSE)
jsimd_quantize_float_sse(coef_block, divisors, workspace); jsimd_quantize_float_sse(coef_block, divisors, workspace);
else if (simd_support & JSIMD_3DNOW) else
jsimd_quantize_float_3dnow(coef_block, divisors, workspace); jsimd_quantize_float_3dnow(coef_block, divisors, workspace);
} }
@@ -1038,7 +1038,7 @@ jsimd_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info *compptr,
if ((simd_support & JSIMD_SSE2) && IS_ALIGNED_SSE(jconst_idct_red_sse2)) if ((simd_support & JSIMD_SSE2) && IS_ALIGNED_SSE(jconst_idct_red_sse2))
jsimd_idct_2x2_sse2(compptr->dct_table, coef_block, output_buf, jsimd_idct_2x2_sse2(compptr->dct_table, coef_block, output_buf,
output_col); output_col);
else if (simd_support & JSIMD_MMX) else
jsimd_idct_2x2_mmx(compptr->dct_table, coef_block, output_buf, output_col); jsimd_idct_2x2_mmx(compptr->dct_table, coef_block, output_buf, output_col);
} }
@@ -1050,7 +1050,7 @@ jsimd_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info *compptr,
if ((simd_support & JSIMD_SSE2) && IS_ALIGNED_SSE(jconst_idct_red_sse2)) if ((simd_support & JSIMD_SSE2) && IS_ALIGNED_SSE(jconst_idct_red_sse2))
jsimd_idct_4x4_sse2(compptr->dct_table, coef_block, output_buf, jsimd_idct_4x4_sse2(compptr->dct_table, coef_block, output_buf,
output_col); output_col);
else if (simd_support & JSIMD_MMX) else
jsimd_idct_4x4_mmx(compptr->dct_table, coef_block, output_buf, output_col); jsimd_idct_4x4_mmx(compptr->dct_table, coef_block, output_buf, output_col);
} }
@@ -1147,7 +1147,7 @@ jsimd_idct_islow (j_decompress_ptr cinfo, jpeg_component_info *compptr,
else if (simd_support & JSIMD_SSE2) else if (simd_support & JSIMD_SSE2)
jsimd_idct_islow_sse2(compptr->dct_table, coef_block, output_buf, jsimd_idct_islow_sse2(compptr->dct_table, coef_block, output_buf,
output_col); output_col);
else if (simd_support & JSIMD_MMX) else
jsimd_idct_islow_mmx(compptr->dct_table, coef_block, output_buf, jsimd_idct_islow_mmx(compptr->dct_table, coef_block, output_buf,
output_col); output_col);
} }
@@ -1160,7 +1160,7 @@ jsimd_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info *compptr,
if ((simd_support & JSIMD_SSE2) && IS_ALIGNED_SSE(jconst_idct_ifast_sse2)) if ((simd_support & JSIMD_SSE2) && IS_ALIGNED_SSE(jconst_idct_ifast_sse2))
jsimd_idct_ifast_sse2(compptr->dct_table, coef_block, output_buf, jsimd_idct_ifast_sse2(compptr->dct_table, coef_block, output_buf,
output_col); output_col);
else if (simd_support & JSIMD_MMX) else
jsimd_idct_ifast_mmx(compptr->dct_table, coef_block, output_buf, jsimd_idct_ifast_mmx(compptr->dct_table, coef_block, output_buf,
output_col); output_col);
} }
@@ -1176,7 +1176,7 @@ jsimd_idct_float (j_decompress_ptr cinfo, jpeg_component_info *compptr,
else if ((simd_support & JSIMD_SSE) && IS_ALIGNED_SSE(jconst_idct_float_sse)) else if ((simd_support & JSIMD_SSE) && IS_ALIGNED_SSE(jconst_idct_float_sse))
jsimd_idct_float_sse(compptr->dct_table, coef_block, output_buf, jsimd_idct_float_sse(compptr->dct_table, coef_block, output_buf,
output_col); output_col);
else if (simd_support & JSIMD_3DNOW) else
jsimd_idct_float_3dnow(compptr->dct_table, coef_block, output_buf, jsimd_idct_float_3dnow(compptr->dct_table, coef_block, output_buf,
output_col); output_col);
} }

View File

@@ -20,8 +20,8 @@
#define JSIMD_3DNOW 0x02 #define JSIMD_3DNOW 0x02
#define JSIMD_SSE 0x04 #define JSIMD_SSE 0x04
#define JSIMD_SSE2 0x08 #define JSIMD_SSE2 0x08
#define JSIMD_ARM_NEON 0x10 #define JSIMD_NEON 0x10
#define JSIMD_MIPS_DSPR2 0x20 #define JSIMD_DSPR2 0x20
#define JSIMD_ALTIVEC 0x40 #define JSIMD_ALTIVEC 0x40
#define JSIMD_AVX2 0x80 #define JSIMD_AVX2 0x80
@@ -126,25 +126,25 @@ EXTERN(void) jsimd_extbgr_ycc_convert_neon_slowld3
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_rgb_ycc_convert_mips_dspr2 EXTERN(void) jsimd_rgb_ycc_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extrgb_ycc_convert_mips_dspr2 EXTERN(void) jsimd_extrgb_ycc_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extrgbx_ycc_convert_mips_dspr2 EXTERN(void) jsimd_extrgbx_ycc_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extbgr_ycc_convert_mips_dspr2 EXTERN(void) jsimd_extbgr_ycc_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extbgrx_ycc_convert_mips_dspr2 EXTERN(void) jsimd_extbgrx_ycc_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extxbgr_ycc_convert_mips_dspr2 EXTERN(void) jsimd_extxbgr_ycc_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extxrgb_ycc_convert_mips_dspr2 EXTERN(void) jsimd_extxrgb_ycc_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
@@ -239,25 +239,25 @@ EXTERN(void) jsimd_extxrgb_gray_convert_avx2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_rgb_gray_convert_mips_dspr2 EXTERN(void) jsimd_rgb_gray_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extrgb_gray_convert_mips_dspr2 EXTERN(void) jsimd_extrgb_gray_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extrgbx_gray_convert_mips_dspr2 EXTERN(void) jsimd_extrgbx_gray_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extbgr_gray_convert_mips_dspr2 EXTERN(void) jsimd_extbgr_gray_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extbgrx_gray_convert_mips_dspr2 EXTERN(void) jsimd_extbgrx_gray_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extxbgr_gray_convert_mips_dspr2 EXTERN(void) jsimd_extxbgr_gray_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
EXTERN(void) jsimd_extxrgb_gray_convert_mips_dspr2 EXTERN(void) jsimd_extxrgb_gray_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows); JDIMENSION output_row, int num_rows);
@@ -384,25 +384,25 @@ EXTERN(void) jsimd_ycc_extbgr_convert_neon_slowst3
(JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row, (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
JSAMPARRAY output_buf, int num_rows); JSAMPARRAY output_buf, int num_rows);
EXTERN(void) jsimd_ycc_rgb_convert_mips_dspr2 EXTERN(void) jsimd_ycc_rgb_convert_dspr2
(JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row, (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
JSAMPARRAY output_buf, int num_rows); JSAMPARRAY output_buf, int num_rows);
EXTERN(void) jsimd_ycc_extrgb_convert_mips_dspr2 EXTERN(void) jsimd_ycc_extrgb_convert_dspr2
(JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row, (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
JSAMPARRAY output_buf, int num_rows); JSAMPARRAY output_buf, int num_rows);
EXTERN(void) jsimd_ycc_extrgbx_convert_mips_dspr2 EXTERN(void) jsimd_ycc_extrgbx_convert_dspr2
(JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row, (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
JSAMPARRAY output_buf, int num_rows); JSAMPARRAY output_buf, int num_rows);
EXTERN(void) jsimd_ycc_extbgr_convert_mips_dspr2 EXTERN(void) jsimd_ycc_extbgr_convert_dspr2
(JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row, (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
JSAMPARRAY output_buf, int num_rows); JSAMPARRAY output_buf, int num_rows);
EXTERN(void) jsimd_ycc_extbgrx_convert_mips_dspr2 EXTERN(void) jsimd_ycc_extbgrx_convert_dspr2
(JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row, (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
JSAMPARRAY output_buf, int num_rows); JSAMPARRAY output_buf, int num_rows);
EXTERN(void) jsimd_ycc_extxbgr_convert_mips_dspr2 EXTERN(void) jsimd_ycc_extxbgr_convert_dspr2
(JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row, (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
JSAMPARRAY output_buf, int num_rows); JSAMPARRAY output_buf, int num_rows);
EXTERN(void) jsimd_ycc_extxrgb_convert_mips_dspr2 EXTERN(void) jsimd_ycc_extxrgb_convert_dspr2
(JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row, (JDIMENSION out_width, JSAMPIMAGE input_buf, JDIMENSION input_row,
JSAMPARRAY output_buf, int num_rows); JSAMPARRAY output_buf, int num_rows);
@@ -429,77 +429,77 @@ EXTERN(void) jsimd_ycc_extxrgb_convert_altivec
JSAMPARRAY output_buf, int num_rows); JSAMPARRAY output_buf, int num_rows);
/* NULL Colorspace Conversion */ /* NULL Colorspace Conversion */
EXTERN(void) jsimd_c_null_convert_mips_dspr2 EXTERN(void) jsimd_c_null_convert_dspr2
(JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, (JDIMENSION img_width, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows, int num_components); JDIMENSION output_row, int num_rows, int num_components);
/* h2v1 Downsampling */ /* h2v1 Downsampling */
EXTERN(void) jsimd_h2v1_downsample_mmx EXTERN(void) jsimd_h2v1_downsample_mmx
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
EXTERN(void) jsimd_h2v1_downsample_sse2 EXTERN(void) jsimd_h2v1_downsample_sse2
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
EXTERN(void) jsimd_h2v1_downsample_avx2 EXTERN(void) jsimd_h2v1_downsample_avx2
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
EXTERN(void) jsimd_h2v1_downsample_neon EXTERN(void) jsimd_h2v1_downsample_neon
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
EXTERN(void) jsimd_h2v1_downsample_mips_dspr2 EXTERN(void) jsimd_h2v1_downsample_dspr2
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
EXTERN(void) jsimd_h2v1_downsample_altivec EXTERN(void) jsimd_h2v1_downsample_altivec
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
/* h2v2 Downsampling */ /* h2v2 Downsampling */
EXTERN(void) jsimd_h2v2_downsample_mmx EXTERN(void) jsimd_h2v2_downsample_mmx
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
EXTERN(void) jsimd_h2v2_downsample_sse2 EXTERN(void) jsimd_h2v2_downsample_sse2
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
EXTERN(void) jsimd_h2v2_downsample_avx2 EXTERN(void) jsimd_h2v2_downsample_avx2
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
EXTERN(void) jsimd_h2v2_downsample_neon EXTERN(void) jsimd_h2v2_downsample_neon
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
EXTERN(void) jsimd_h2v2_downsample_mips_dspr2 EXTERN(void) jsimd_h2v2_downsample_dspr2
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
EXTERN(void) jsimd_h2v2_downsample_altivec EXTERN(void) jsimd_h2v2_downsample_altivec
(JDIMENSION image_width, int max_v_samp_factor, (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION width_blocks, JDIMENSION v_samp_factor, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data); JSAMPARRAY input_data, JSAMPARRAY output_data);
/* h2v2 Smooth Downsampling */ /* h2v2 Smooth Downsampling */
EXTERN(void) jsimd_h2v2_smooth_downsample_mips_dspr2 EXTERN(void) jsimd_h2v2_smooth_downsample_dspr2
(JSAMPARRAY input_data, JSAMPARRAY output_data, (JSAMPARRAY input_data, JSAMPARRAY output_data,
JDIMENSION v_samp_factor, int max_v_samp_factor, JDIMENSION v_samp_factor, int max_v_samp_factor,
int smoothing_factor, JDIMENSION width_blocks, int smoothing_factor, JDIMENSION width_in_blocks,
JDIMENSION image_width); JDIMENSION image_width);
@@ -525,14 +525,14 @@ EXTERN(void) jsimd_h2v2_upsample_avx2
(int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data, (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
JSAMPARRAY *output_data_ptr); JSAMPARRAY *output_data_ptr);
EXTERN(void) jsimd_h2v1_upsample_mips_dspr2 EXTERN(void) jsimd_h2v1_upsample_dspr2
(int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data, (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
JSAMPARRAY *output_data_ptr); JSAMPARRAY *output_data_ptr);
EXTERN(void) jsimd_h2v2_upsample_mips_dspr2 EXTERN(void) jsimd_h2v2_upsample_dspr2
(int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data, (int max_v_samp_factor, JDIMENSION output_width, JSAMPARRAY input_data,
JSAMPARRAY *output_data_ptr); JSAMPARRAY *output_data_ptr);
EXTERN(void) jsimd_int_upsample_mips_dspr2 EXTERN(void) jsimd_int_upsample_dspr2
(UINT8 h_expand, UINT8 v_expand, JSAMPARRAY input_data, (UINT8 h_expand, UINT8 v_expand, JSAMPARRAY input_data,
JSAMPARRAY *output_data_ptr, JDIMENSION output_width, JSAMPARRAY *output_data_ptr, JDIMENSION output_width,
int max_v_samp_factor); int max_v_samp_factor);
@@ -572,10 +572,10 @@ EXTERN(void) jsimd_h2v1_fancy_upsample_neon
(int max_v_samp_factor, JDIMENSION downsampled_width, (int max_v_samp_factor, JDIMENSION downsampled_width,
JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr); JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
EXTERN(void) jsimd_h2v1_fancy_upsample_mips_dspr2 EXTERN(void) jsimd_h2v1_fancy_upsample_dspr2
(int max_v_samp_factor, JDIMENSION downsampled_width, (int max_v_samp_factor, JDIMENSION downsampled_width,
JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr); JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
EXTERN(void) jsimd_h2v2_fancy_upsample_mips_dspr2 EXTERN(void) jsimd_h2v2_fancy_upsample_dspr2
(int max_v_samp_factor, JDIMENSION downsampled_width, (int max_v_samp_factor, JDIMENSION downsampled_width,
JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr); JSAMPARRAY input_data, JSAMPARRAY *output_data_ptr);
@@ -721,47 +721,47 @@ EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_avx2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf);
EXTERN(void) jsimd_h2v1_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v1_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v1_extrgb_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v1_extrgbx_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v1_extbgr_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v1_extbgrx_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v1_extxbgr_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v1_extxrgb_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v2_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v2_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v2_extrgb_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v2_extrgbx_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v2_extbgr_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v2_extbgrx_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v2_extxbgr_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_mips_dspr2 EXTERN(void) jsimd_h2v2_extxrgb_merged_upsample_dspr2
(JDIMENSION output_width, JSAMPIMAGE input_buf, (JDIMENSION output_width, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range); JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf, JSAMPLE* range);
@@ -822,7 +822,7 @@ EXTERN(void) jsimd_convsamp_avx2
EXTERN(void) jsimd_convsamp_neon EXTERN(void) jsimd_convsamp_neon
(JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace); (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
EXTERN(void) jsimd_convsamp_mips_dspr2 EXTERN(void) jsimd_convsamp_dspr2
(JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace); (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace);
EXTERN(void) jsimd_convsamp_altivec EXTERN(void) jsimd_convsamp_altivec
@@ -838,7 +838,7 @@ EXTERN(void) jsimd_convsamp_float_sse
EXTERN(void) jsimd_convsamp_float_sse2 EXTERN(void) jsimd_convsamp_float_sse2
(JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace); (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
EXTERN(void) jsimd_convsamp_float_mips_dspr2 EXTERN(void) jsimd_convsamp_float_dspr2
(JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace); (JSAMPARRAY sample_data, JDIMENSION start_col, FAST_FLOAT *workspace);
/* Slow Integer Forward DCT */ /* Slow Integer Forward DCT */
@@ -852,7 +852,7 @@ EXTERN(void) jsimd_fdct_islow_avx2 (DCTELEM *data);
EXTERN(void) jsimd_fdct_islow_neon (DCTELEM *data); EXTERN(void) jsimd_fdct_islow_neon (DCTELEM *data);
EXTERN(void) jsimd_fdct_islow_mips_dspr2 (DCTELEM *data); EXTERN(void) jsimd_fdct_islow_dspr2 (DCTELEM *data);
EXTERN(void) jsimd_fdct_islow_altivec (DCTELEM *data); EXTERN(void) jsimd_fdct_islow_altivec (DCTELEM *data);
@@ -864,7 +864,7 @@ EXTERN(void) jsimd_fdct_ifast_sse2 (DCTELEM *data);
EXTERN(void) jsimd_fdct_ifast_neon (DCTELEM *data); EXTERN(void) jsimd_fdct_ifast_neon (DCTELEM *data);
EXTERN(void) jsimd_fdct_ifast_mips_dspr2 (DCTELEM *data); EXTERN(void) jsimd_fdct_ifast_dspr2 (DCTELEM *data);
EXTERN(void) jsimd_fdct_ifast_altivec (DCTELEM *data); EXTERN(void) jsimd_fdct_ifast_altivec (DCTELEM *data);
@@ -887,7 +887,7 @@ EXTERN(void) jsimd_quantize_avx2
EXTERN(void) jsimd_quantize_neon EXTERN(void) jsimd_quantize_neon
(JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace); (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
EXTERN(void) jsimd_quantize_mips_dspr2 EXTERN(void) jsimd_quantize_dspr2
(JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace); (JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace);
EXTERN(void) jsimd_quantize_altivec EXTERN(void) jsimd_quantize_altivec
@@ -903,7 +903,7 @@ EXTERN(void) jsimd_quantize_float_sse
EXTERN(void) jsimd_quantize_float_sse2 EXTERN(void) jsimd_quantize_float_sse2
(JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace); (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
EXTERN(void) jsimd_quantize_float_mips_dspr2 EXTERN(void) jsimd_quantize_float_dspr2
(JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace); (JCOEFPTR coef_block, FAST_FLOAT *divisors, FAST_FLOAT *workspace);
/* Scaled Inverse DCT */ /* Scaled Inverse DCT */
@@ -929,18 +929,18 @@ EXTERN(void) jsimd_idct_4x4_neon
(void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf, (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JDIMENSION output_col); JDIMENSION output_col);
EXTERN(void) jsimd_idct_2x2_mips_dspr2 EXTERN(void) jsimd_idct_2x2_dspr2
(void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf, (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JDIMENSION output_col); JDIMENSION output_col);
EXTERN(void) jsimd_idct_4x4_mips_dspr2 EXTERN(void) jsimd_idct_4x4_dspr2
(void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf, (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JDIMENSION output_col, int *workspace); JDIMENSION output_col, int *workspace);
EXTERN(void) jsimd_idct_6x6_mips_dspr2 EXTERN(void) jsimd_idct_6x6_dspr2
(void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf, (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JDIMENSION output_col); JDIMENSION output_col);
EXTERN(void) jsimd_idct_12x12_pass1_mips_dspr2 EXTERN(void) jsimd_idct_12x12_pass1_dspr2
(JCOEFPTR coef_block, void *dct_table, int *workspace); (JCOEFPTR coef_block, void *dct_table, int *workspace);
EXTERN(void) jsimd_idct_12x12_pass2_mips_dspr2 EXTERN(void) jsimd_idct_12x12_pass2_dspr2
(int *workspace, int *output); (int *workspace, int *output);
/* Slow Integer Inverse DCT */ /* Slow Integer Inverse DCT */
@@ -962,7 +962,7 @@ EXTERN(void) jsimd_idct_islow_neon
(void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf, (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JDIMENSION output_col); JDIMENSION output_col);
EXTERN(void) jsimd_idct_islow_mips_dspr2 EXTERN(void) jsimd_idct_islow_dspr2
(void *dct_table, JCOEFPTR coef_block, int *output_buf, (void *dct_table, JCOEFPTR coef_block, int *output_buf,
JSAMPLE *output_col); JSAMPLE *output_col);
@@ -984,10 +984,10 @@ EXTERN(void) jsimd_idct_ifast_neon
(void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf, (void *dct_table, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JDIMENSION output_col); JDIMENSION output_col);
EXTERN(void) jsimd_idct_ifast_cols_mips_dspr2 EXTERN(void) jsimd_idct_ifast_cols_dspr2
(JCOEF *inptr, IFAST_MULT_TYPE *quantptr, DCTELEM *wsptr, (JCOEF *inptr, IFAST_MULT_TYPE *quantptr, DCTELEM *wsptr,
const int *idct_coefs); const int *idct_coefs);
EXTERN(void) jsimd_idct_ifast_rows_mips_dspr2 EXTERN(void) jsimd_idct_ifast_rows_dspr2
(DCTELEM *wsptr, JSAMPARRAY output_buf, JDIMENSION output_col, (DCTELEM *wsptr, JSAMPARRAY output_buf, JDIMENSION output_col,
const int *idct_coefs); const int *idct_coefs);

View File

@@ -43,7 +43,7 @@ parse_proc_cpuinfo(const char* search_string)
while (fgets(cpuinfo_line, sizeof(cpuinfo_line), f) != NULL) { while (fgets(cpuinfo_line, sizeof(cpuinfo_line), f) != NULL) {
if (strstr(cpuinfo_line, search_string) != NULL) { if (strstr(cpuinfo_line, search_string) != NULL) {
fclose(f); fclose(f);
simd_support |= JSIMD_MIPS_DSPR2; simd_support |= JSIMD_DSPR2;
return 1; return 1;
} }
} }
@@ -71,7 +71,7 @@ init_simd (void)
simd_support = 0; simd_support = 0;
#if defined(__MIPSEL__) && defined(__mips_dsp) && (__mips_dsp_rev >= 2) #if defined(__MIPSEL__) && defined(__mips_dsp) && (__mips_dsp_rev >= 2)
simd_support |= JSIMD_MIPS_DSPR2; simd_support |= JSIMD_DSPR2;
#elif defined(__linux__) #elif defined(__linux__)
/* We still have a chance to use MIPS DSPR2 regardless of globally used /* We still have a chance to use MIPS DSPR2 regardless of globally used
* -mdspr2 options passed to gcc by performing runtime detection via * -mdspr2 options passed to gcc by performing runtime detection via
@@ -83,7 +83,7 @@ init_simd (void)
/* Force different settings through environment variables */ /* Force different settings through environment variables */
env = getenv("JSIMD_FORCEDSPR2"); env = getenv("JSIMD_FORCEDSPR2");
if ((env != NULL) && (strcmp(env, "1") == 0)) if ((env != NULL) && (strcmp(env, "1") == 0))
simd_support = JSIMD_MIPS_DSPR2; simd_support = JSIMD_DSPR2;
env = getenv("JSIMD_FORCENONE"); env = getenv("JSIMD_FORCENONE");
if ((env != NULL) && (strcmp(env, "1") == 0)) if ((env != NULL) && (strcmp(env, "1") == 0))
simd_support = 0; simd_support = 0;
@@ -128,7 +128,7 @@ jsimd_can_rgb_ycc (void)
if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4))
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -147,7 +147,7 @@ jsimd_can_rgb_gray (void)
if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4))
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -166,7 +166,7 @@ jsimd_can_ycc_rgb (void)
if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4))
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -189,7 +189,7 @@ jsimd_c_can_null_convert (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -200,40 +200,37 @@ jsimd_rgb_ycc_convert (j_compress_ptr cinfo,
JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows) JDIMENSION output_row, int num_rows)
{ {
void (*mipsdspr2fct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); void (*dspr2fct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int);
switch(cinfo->in_color_space) { switch(cinfo->in_color_space) {
case JCS_EXT_RGB: case JCS_EXT_RGB:
mipsdspr2fct=jsimd_extrgb_ycc_convert_mips_dspr2; dspr2fct=jsimd_extrgb_ycc_convert_dspr2;
break; break;
case JCS_EXT_RGBX: case JCS_EXT_RGBX:
case JCS_EXT_RGBA: case JCS_EXT_RGBA:
mipsdspr2fct=jsimd_extrgbx_ycc_convert_mips_dspr2; dspr2fct=jsimd_extrgbx_ycc_convert_dspr2;
break; break;
case JCS_EXT_BGR: case JCS_EXT_BGR:
mipsdspr2fct=jsimd_extbgr_ycc_convert_mips_dspr2; dspr2fct=jsimd_extbgr_ycc_convert_dspr2;
break; break;
case JCS_EXT_BGRX: case JCS_EXT_BGRX:
case JCS_EXT_BGRA: case JCS_EXT_BGRA:
mipsdspr2fct=jsimd_extbgrx_ycc_convert_mips_dspr2; dspr2fct=jsimd_extbgrx_ycc_convert_dspr2;
break; break;
case JCS_EXT_XBGR: case JCS_EXT_XBGR:
case JCS_EXT_ABGR: case JCS_EXT_ABGR:
mipsdspr2fct=jsimd_extxbgr_ycc_convert_mips_dspr2; dspr2fct=jsimd_extxbgr_ycc_convert_dspr2;
break; break;
case JCS_EXT_XRGB: case JCS_EXT_XRGB:
case JCS_EXT_ARGB: case JCS_EXT_ARGB:
mipsdspr2fct=jsimd_extxrgb_ycc_convert_mips_dspr2; dspr2fct=jsimd_extxrgb_ycc_convert_dspr2;
break; break;
default: default:
mipsdspr2fct=jsimd_extrgb_ycc_convert_mips_dspr2; dspr2fct=jsimd_extrgb_ycc_convert_dspr2;
break; break;
} }
if (simd_support & JSIMD_MIPS_DSPR2) dspr2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows);
mipsdspr2fct(cinfo->image_width, input_buf, output_buf, output_row,
num_rows);
} }
GLOBAL(void) GLOBAL(void)
@@ -241,39 +238,37 @@ jsimd_rgb_gray_convert (j_compress_ptr cinfo,
JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows) JDIMENSION output_row, int num_rows)
{ {
void (*mipsdspr2fct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); void (*dspr2fct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int);
switch(cinfo->in_color_space) { switch(cinfo->in_color_space) {
case JCS_EXT_RGB: case JCS_EXT_RGB:
mipsdspr2fct=jsimd_extrgb_gray_convert_mips_dspr2; dspr2fct=jsimd_extrgb_gray_convert_dspr2;
break; break;
case JCS_EXT_RGBX: case JCS_EXT_RGBX:
case JCS_EXT_RGBA: case JCS_EXT_RGBA:
mipsdspr2fct=jsimd_extrgbx_gray_convert_mips_dspr2; dspr2fct=jsimd_extrgbx_gray_convert_dspr2;
break; break;
case JCS_EXT_BGR: case JCS_EXT_BGR:
mipsdspr2fct=jsimd_extbgr_gray_convert_mips_dspr2; dspr2fct=jsimd_extbgr_gray_convert_dspr2;
break; break;
case JCS_EXT_BGRX: case JCS_EXT_BGRX:
case JCS_EXT_BGRA: case JCS_EXT_BGRA:
mipsdspr2fct=jsimd_extbgrx_gray_convert_mips_dspr2; dspr2fct=jsimd_extbgrx_gray_convert_dspr2;
break; break;
case JCS_EXT_XBGR: case JCS_EXT_XBGR:
case JCS_EXT_ABGR: case JCS_EXT_ABGR:
mipsdspr2fct=jsimd_extxbgr_gray_convert_mips_dspr2; dspr2fct=jsimd_extxbgr_gray_convert_dspr2;
break; break;
case JCS_EXT_XRGB: case JCS_EXT_XRGB:
case JCS_EXT_ARGB: case JCS_EXT_ARGB:
mipsdspr2fct=jsimd_extxrgb_gray_convert_mips_dspr2; dspr2fct=jsimd_extxrgb_gray_convert_dspr2;
break; break;
default: default:
mipsdspr2fct=jsimd_extrgb_gray_convert_mips_dspr2; dspr2fct=jsimd_extrgb_gray_convert_dspr2;
break; break;
} }
if (simd_support & JSIMD_MIPS_DSPR2) dspr2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows);
mipsdspr2fct(cinfo->image_width, input_buf, output_buf, output_row,
num_rows);
} }
GLOBAL(void) GLOBAL(void)
@@ -281,39 +276,37 @@ jsimd_ycc_rgb_convert (j_decompress_ptr cinfo,
JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPIMAGE input_buf, JDIMENSION input_row,
JSAMPARRAY output_buf, int num_rows) JSAMPARRAY output_buf, int num_rows)
{ {
void (*mipsdspr2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, int); void (*dspr2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, int);
switch(cinfo->out_color_space) { switch(cinfo->out_color_space) {
case JCS_EXT_RGB: case JCS_EXT_RGB:
mipsdspr2fct=jsimd_ycc_extrgb_convert_mips_dspr2; dspr2fct=jsimd_ycc_extrgb_convert_dspr2;
break; break;
case JCS_EXT_RGBX: case JCS_EXT_RGBX:
case JCS_EXT_RGBA: case JCS_EXT_RGBA:
mipsdspr2fct=jsimd_ycc_extrgbx_convert_mips_dspr2; dspr2fct=jsimd_ycc_extrgbx_convert_dspr2;
break; break;
case JCS_EXT_BGR: case JCS_EXT_BGR:
mipsdspr2fct=jsimd_ycc_extbgr_convert_mips_dspr2; dspr2fct=jsimd_ycc_extbgr_convert_dspr2;
break; break;
case JCS_EXT_BGRX: case JCS_EXT_BGRX:
case JCS_EXT_BGRA: case JCS_EXT_BGRA:
mipsdspr2fct=jsimd_ycc_extbgrx_convert_mips_dspr2; dspr2fct=jsimd_ycc_extbgrx_convert_dspr2;
break; break;
case JCS_EXT_XBGR: case JCS_EXT_XBGR:
case JCS_EXT_ABGR: case JCS_EXT_ABGR:
mipsdspr2fct=jsimd_ycc_extxbgr_convert_mips_dspr2; dspr2fct=jsimd_ycc_extxbgr_convert_dspr2;
break; break;
case JCS_EXT_XRGB: case JCS_EXT_XRGB:
case JCS_EXT_ARGB: case JCS_EXT_ARGB:
mipsdspr2fct=jsimd_ycc_extxrgb_convert_mips_dspr2; dspr2fct=jsimd_ycc_extxrgb_convert_dspr2;
break; break;
default: default:
mipsdspr2fct=jsimd_ycc_extrgb_convert_mips_dspr2; dspr2fct=jsimd_ycc_extrgb_convert_dspr2;
break; break;
} }
if (simd_support & JSIMD_MIPS_DSPR2) dspr2fct(cinfo->output_width, input_buf, input_row, output_buf, num_rows);
mipsdspr2fct(cinfo->output_width, input_buf, input_row, output_buf,
num_rows);
} }
GLOBAL(void) GLOBAL(void)
@@ -328,10 +321,8 @@ jsimd_c_null_convert (j_compress_ptr cinfo,
JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
JDIMENSION output_row, int num_rows) JDIMENSION output_row, int num_rows)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_c_null_convert_dspr2(cinfo->image_width, input_buf, output_buf,
jsimd_c_null_convert_mips_dspr2(cinfo->image_width, input_buf, output_row, num_rows, cinfo->num_components);
output_buf, output_row, num_rows,
cinfo->num_components);
} }
GLOBAL(int) GLOBAL(int)
@@ -345,7 +336,7 @@ jsimd_can_h2v2_downsample (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -364,7 +355,7 @@ jsimd_can_h2v2_smooth_downsample (void)
if(DCTSIZE != 8) if(DCTSIZE != 8)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -381,7 +372,7 @@ jsimd_can_h2v1_downsample (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -391,12 +382,9 @@ GLOBAL(void)
jsimd_h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr, jsimd_h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr,
JSAMPARRAY input_data, JSAMPARRAY output_data) JSAMPARRAY input_data, JSAMPARRAY output_data)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_h2v2_downsample_dspr2(cinfo->image_width, cinfo->max_v_samp_factor,
jsimd_h2v2_downsample_mips_dspr2(cinfo->image_width, compptr->v_samp_factor, compptr->width_in_blocks,
cinfo->max_v_samp_factor, input_data, output_data);
compptr->v_samp_factor,
compptr->width_in_blocks, input_data,
output_data);
} }
GLOBAL(void) GLOBAL(void)
@@ -404,7 +392,7 @@ jsimd_h2v2_smooth_downsample (j_compress_ptr cinfo,
jpeg_component_info *compptr, jpeg_component_info *compptr,
JSAMPARRAY input_data, JSAMPARRAY output_data) JSAMPARRAY input_data, JSAMPARRAY output_data)
{ {
jsimd_h2v2_smooth_downsample_mips_dspr2(input_data, output_data, jsimd_h2v2_smooth_downsample_dspr2(input_data, output_data,
compptr->v_samp_factor, compptr->v_samp_factor,
cinfo->max_v_samp_factor, cinfo->max_v_samp_factor,
cinfo->smoothing_factor, cinfo->smoothing_factor,
@@ -416,11 +404,8 @@ GLOBAL(void)
jsimd_h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr, jsimd_h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr,
JSAMPARRAY input_data, JSAMPARRAY output_data) JSAMPARRAY input_data, JSAMPARRAY output_data)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_h2v1_downsample_dspr2(cinfo->image_width, cinfo->max_v_samp_factor,
jsimd_h2v1_downsample_mips_dspr2(cinfo->image_width, compptr->v_samp_factor, compptr->width_in_blocks,
cinfo->max_v_samp_factor,
compptr->v_samp_factor,
compptr->width_in_blocks,
input_data, output_data); input_data, output_data);
} }
@@ -435,7 +420,7 @@ jsimd_can_h2v2_upsample (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -452,7 +437,7 @@ jsimd_can_h2v1_upsample (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -469,7 +454,7 @@ jsimd_can_int_upsample (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -481,10 +466,8 @@ jsimd_h2v2_upsample (j_decompress_ptr cinfo,
JSAMPARRAY input_data, JSAMPARRAY input_data,
JSAMPARRAY *output_data_ptr) JSAMPARRAY *output_data_ptr)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_h2v2_upsample_dspr2(cinfo->max_v_samp_factor, cinfo->output_width,
jsimd_h2v2_upsample_mips_dspr2(cinfo->max_v_samp_factor, input_data, output_data_ptr);
cinfo->output_width, input_data,
output_data_ptr);
} }
GLOBAL(void) GLOBAL(void)
@@ -493,10 +476,8 @@ jsimd_h2v1_upsample (j_decompress_ptr cinfo,
JSAMPARRAY input_data, JSAMPARRAY input_data,
JSAMPARRAY *output_data_ptr) JSAMPARRAY *output_data_ptr)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_h2v1_upsample_dspr2(cinfo->max_v_samp_factor, cinfo->output_width,
jsimd_h2v1_upsample_mips_dspr2(cinfo->max_v_samp_factor, input_data, output_data_ptr);
cinfo->output_width, input_data,
output_data_ptr);
} }
GLOBAL(void) GLOBAL(void)
@@ -505,10 +486,9 @@ jsimd_int_upsample (j_decompress_ptr cinfo, jpeg_component_info *compptr,
{ {
my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
jsimd_int_upsample_mips_dspr2(upsample->h_expand[compptr->component_index], jsimd_int_upsample_dspr2(upsample->h_expand[compptr->component_index],
upsample->v_expand[compptr->component_index], upsample->v_expand[compptr->component_index],
input_data, output_data_ptr, input_data, output_data_ptr, cinfo->output_width,
cinfo->output_width,
cinfo->max_v_samp_factor); cinfo->max_v_samp_factor);
} }
@@ -523,7 +503,7 @@ jsimd_can_h2v2_fancy_upsample (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -540,7 +520,7 @@ jsimd_can_h2v1_fancy_upsample (void)
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -552,10 +532,9 @@ jsimd_h2v2_fancy_upsample (j_decompress_ptr cinfo,
JSAMPARRAY input_data, JSAMPARRAY input_data,
JSAMPARRAY *output_data_ptr) JSAMPARRAY *output_data_ptr)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_h2v2_fancy_upsample_dspr2(cinfo->max_v_samp_factor,
jsimd_h2v2_fancy_upsample_mips_dspr2(cinfo->max_v_samp_factor, compptr->downsampled_width, input_data,
compptr->downsampled_width, output_data_ptr);
input_data, output_data_ptr);
} }
GLOBAL(void) GLOBAL(void)
@@ -564,10 +543,9 @@ jsimd_h2v1_fancy_upsample (j_decompress_ptr cinfo,
JSAMPARRAY input_data, JSAMPARRAY input_data,
JSAMPARRAY *output_data_ptr) JSAMPARRAY *output_data_ptr)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_h2v1_fancy_upsample_dspr2(cinfo->max_v_samp_factor,
jsimd_h2v1_fancy_upsample_mips_dspr2(cinfo->max_v_samp_factor, compptr->downsampled_width, input_data,
compptr->downsampled_width, output_data_ptr);
input_data, output_data_ptr);
} }
GLOBAL(int) GLOBAL(int)
@@ -575,12 +553,13 @@ jsimd_can_h2v2_merged_upsample (void)
{ {
init_simd(); init_simd();
/* The code is optimised for these values only */
if (BITS_IN_JSAMPLE != 8) if (BITS_IN_JSAMPLE != 8)
return 0; return 0;
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -591,12 +570,13 @@ jsimd_can_h2v1_merged_upsample (void)
{ {
init_simd(); init_simd();
/* The code is optimised for these values only */
if (BITS_IN_JSAMPLE != 8) if (BITS_IN_JSAMPLE != 8)
return 0; return 0;
if (sizeof(JDIMENSION) != 4) if (sizeof(JDIMENSION) != 4)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -608,38 +588,37 @@ jsimd_h2v2_merged_upsample (j_decompress_ptr cinfo,
JDIMENSION in_row_group_ctr, JDIMENSION in_row_group_ctr,
JSAMPARRAY output_buf) JSAMPARRAY output_buf)
{ {
void (*mipsdspr2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, void (*dspr2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, JSAMPLE *);
JSAMPLE *);
switch(cinfo->out_color_space) { switch(cinfo->out_color_space) {
case JCS_EXT_RGB: case JCS_EXT_RGB:
mipsdspr2fct=jsimd_h2v2_extrgb_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v2_extrgb_merged_upsample_dspr2;
break; break;
case JCS_EXT_RGBX: case JCS_EXT_RGBX:
case JCS_EXT_RGBA: case JCS_EXT_RGBA:
mipsdspr2fct=jsimd_h2v2_extrgbx_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v2_extrgbx_merged_upsample_dspr2;
break; break;
case JCS_EXT_BGR: case JCS_EXT_BGR:
mipsdspr2fct=jsimd_h2v2_extbgr_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v2_extbgr_merged_upsample_dspr2;
break; break;
case JCS_EXT_BGRX: case JCS_EXT_BGRX:
case JCS_EXT_BGRA: case JCS_EXT_BGRA:
mipsdspr2fct=jsimd_h2v2_extbgrx_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v2_extbgrx_merged_upsample_dspr2;
break; break;
case JCS_EXT_XBGR: case JCS_EXT_XBGR:
case JCS_EXT_ABGR: case JCS_EXT_ABGR:
mipsdspr2fct=jsimd_h2v2_extxbgr_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v2_extxbgr_merged_upsample_dspr2;
break; break;
case JCS_EXT_XRGB: case JCS_EXT_XRGB:
case JCS_EXT_ARGB: case JCS_EXT_ARGB:
mipsdspr2fct=jsimd_h2v2_extxrgb_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v2_extxrgb_merged_upsample_dspr2;
break; break;
default: default:
mipsdspr2fct=jsimd_h2v2_extrgb_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v2_extrgb_merged_upsample_dspr2;
break; break;
} }
mipsdspr2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf, dspr2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf,
cinfo->sample_range_limit); cinfo->sample_range_limit);
} }
@@ -649,38 +628,37 @@ jsimd_h2v1_merged_upsample (j_decompress_ptr cinfo,
JDIMENSION in_row_group_ctr, JDIMENSION in_row_group_ctr,
JSAMPARRAY output_buf) JSAMPARRAY output_buf)
{ {
void (*mipsdspr2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, void (*dspr2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, JSAMPLE *);
JSAMPLE *);
switch(cinfo->out_color_space) { switch(cinfo->out_color_space) {
case JCS_EXT_RGB: case JCS_EXT_RGB:
mipsdspr2fct=jsimd_h2v1_extrgb_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v1_extrgb_merged_upsample_dspr2;
break; break;
case JCS_EXT_RGBX: case JCS_EXT_RGBX:
case JCS_EXT_RGBA: case JCS_EXT_RGBA:
mipsdspr2fct=jsimd_h2v1_extrgbx_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v1_extrgbx_merged_upsample_dspr2;
break; break;
case JCS_EXT_BGR: case JCS_EXT_BGR:
mipsdspr2fct=jsimd_h2v1_extbgr_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v1_extbgr_merged_upsample_dspr2;
break; break;
case JCS_EXT_BGRX: case JCS_EXT_BGRX:
case JCS_EXT_BGRA: case JCS_EXT_BGRA:
mipsdspr2fct=jsimd_h2v1_extbgrx_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v1_extbgrx_merged_upsample_dspr2;
break; break;
case JCS_EXT_XBGR: case JCS_EXT_XBGR:
case JCS_EXT_ABGR: case JCS_EXT_ABGR:
mipsdspr2fct=jsimd_h2v1_extxbgr_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v1_extxbgr_merged_upsample_dspr2;
break; break;
case JCS_EXT_XRGB: case JCS_EXT_XRGB:
case JCS_EXT_ARGB: case JCS_EXT_ARGB:
mipsdspr2fct=jsimd_h2v1_extxrgb_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v1_extxrgb_merged_upsample_dspr2;
break; break;
default: default:
mipsdspr2fct=jsimd_h2v1_extrgb_merged_upsample_mips_dspr2; dspr2fct=jsimd_h2v1_extrgb_merged_upsample_dspr2;
break; break;
} }
mipsdspr2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf, dspr2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf,
cinfo->sample_range_limit); cinfo->sample_range_limit);
} }
@@ -699,7 +677,7 @@ jsimd_can_convsamp (void)
if (sizeof(DCTELEM) != 2) if (sizeof(DCTELEM) != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -722,7 +700,7 @@ jsimd_can_convsamp_float (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -732,16 +710,14 @@ GLOBAL(void)
jsimd_convsamp (JSAMPARRAY sample_data, JDIMENSION start_col, jsimd_convsamp (JSAMPARRAY sample_data, JDIMENSION start_col,
DCTELEM *workspace) DCTELEM *workspace)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_convsamp_dspr2(sample_data, start_col, workspace);
jsimd_convsamp_mips_dspr2(sample_data, start_col, workspace);
} }
GLOBAL(void) GLOBAL(void)
jsimd_convsamp_float (JSAMPARRAY sample_data, JDIMENSION start_col, jsimd_convsamp_float (JSAMPARRAY sample_data, JDIMENSION start_col,
FAST_FLOAT *workspace) FAST_FLOAT *workspace)
{ {
if ((simd_support & JSIMD_MIPS_DSPR2)) jsimd_convsamp_float_dspr2(sample_data, start_col, workspace);
jsimd_convsamp_float_mips_dspr2(sample_data, start_col, workspace);
} }
GLOBAL(int) GLOBAL(int)
@@ -755,7 +731,7 @@ jsimd_can_fdct_islow (void)
if (sizeof(DCTELEM) != 2) if (sizeof(DCTELEM) != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -772,7 +748,7 @@ jsimd_can_fdct_ifast (void)
if (sizeof(DCTELEM) != 2) if (sizeof(DCTELEM) != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -781,23 +757,19 @@ jsimd_can_fdct_ifast (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_fdct_float (void) jsimd_can_fdct_float (void)
{ {
init_simd();
return 0; return 0;
} }
GLOBAL(void) GLOBAL(void)
jsimd_fdct_islow (DCTELEM *data) jsimd_fdct_islow (DCTELEM *data)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_fdct_islow_dspr2(data);
jsimd_fdct_islow_mips_dspr2(data);
} }
GLOBAL(void) GLOBAL(void)
jsimd_fdct_ifast (DCTELEM *data) jsimd_fdct_ifast (DCTELEM *data)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_fdct_ifast_dspr2(data);
jsimd_fdct_ifast_mips_dspr2(data);
} }
GLOBAL(void) GLOBAL(void)
@@ -818,7 +790,7 @@ jsimd_can_quantize (void)
if (sizeof(DCTELEM) != 2) if (sizeof(DCTELEM) != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -841,7 +813,7 @@ jsimd_can_quantize_float (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -851,16 +823,14 @@ GLOBAL(void)
jsimd_quantize (JCOEFPTR coef_block, DCTELEM *divisors, jsimd_quantize (JCOEFPTR coef_block, DCTELEM *divisors,
DCTELEM *workspace) DCTELEM *workspace)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_quantize_dspr2(coef_block, divisors, workspace);
jsimd_quantize_mips_dspr2(coef_block, divisors, workspace);
} }
GLOBAL(void) GLOBAL(void)
jsimd_quantize_float (JCOEFPTR coef_block, FAST_FLOAT *divisors, jsimd_quantize_float (JCOEFPTR coef_block, FAST_FLOAT *divisors,
FAST_FLOAT *workspace) FAST_FLOAT *workspace)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_quantize_float_dspr2(coef_block, divisors, workspace);
jsimd_quantize_float_mips_dspr2(coef_block, divisors, workspace);
} }
GLOBAL(int) GLOBAL(int)
@@ -880,7 +850,7 @@ jsimd_can_idct_2x2 (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -903,7 +873,7 @@ jsimd_can_idct_4x4 (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -926,7 +896,7 @@ jsimd_can_idct_6x6 (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -948,7 +918,7 @@ jsimd_can_idct_12x12 (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -959,9 +929,7 @@ jsimd_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info *compptr,
JCOEFPTR coef_block, JSAMPARRAY output_buf, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JDIMENSION output_col) JDIMENSION output_col)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_idct_2x2_dspr2(compptr->dct_table, coef_block, output_buf, output_col);
jsimd_idct_2x2_mips_dspr2(compptr->dct_table, coef_block, output_buf,
output_col);
} }
GLOBAL(void) GLOBAL(void)
@@ -969,11 +937,10 @@ jsimd_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info *compptr,
JCOEFPTR coef_block, JSAMPARRAY output_buf, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JDIMENSION output_col) JDIMENSION output_col)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) {
int workspace[DCTSIZE*4]; /* buffers data between passes */ int workspace[DCTSIZE*4]; /* buffers data between passes */
jsimd_idct_4x4_mips_dspr2(compptr->dct_table, coef_block, output_buf,
output_col, workspace); jsimd_idct_4x4_dspr2(compptr->dct_table, coef_block, output_buf, output_col,
} workspace);
} }
GLOBAL(void) GLOBAL(void)
@@ -981,17 +948,14 @@ jsimd_idct_6x6 (j_decompress_ptr cinfo, jpeg_component_info *compptr,
JCOEFPTR coef_block, JSAMPARRAY output_buf, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JDIMENSION output_col) JDIMENSION output_col)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) jsimd_idct_6x6_dspr2(compptr->dct_table, coef_block, output_buf, output_col);
jsimd_idct_6x6_mips_dspr2(compptr->dct_table, coef_block, output_buf,
output_col);
} }
GLOBAL(void) GLOBAL(void)
jsimd_idct_12x12 (j_decompress_ptr cinfo, jpeg_component_info *compptr, jsimd_idct_12x12 (j_decompress_ptr cinfo, jpeg_component_info *compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JSAMPARRAY output_buf, JDIMENSION output_col) JDIMENSION output_col)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) {
int workspace[96]; int workspace[96];
int output[12] = { int output[12] = {
(int)(output_buf[0] + output_col), (int)(output_buf[0] + output_col),
@@ -1005,12 +969,11 @@ jsimd_idct_12x12 (j_decompress_ptr cinfo, jpeg_component_info *compptr,
(int)(output_buf[8] + output_col), (int)(output_buf[8] + output_col),
(int)(output_buf[9] + output_col), (int)(output_buf[9] + output_col),
(int)(output_buf[10] + output_col), (int)(output_buf[10] + output_col),
(int)(output_buf[11] + output_col), (int)(output_buf[11] + output_col)
}; };
jsimd_idct_12x12_pass1_mips_dspr2(coef_block, compptr->dct_table,
workspace); jsimd_idct_12x12_pass1_dspr2(coef_block, compptr->dct_table, workspace);
jsimd_idct_12x12_pass2_mips_dspr2(workspace, output); jsimd_idct_12x12_pass2_dspr2(workspace, output);
}
} }
GLOBAL(int) GLOBAL(int)
@@ -1030,7 +993,7 @@ jsimd_can_idct_islow (void)
if (sizeof(ISLOW_MULT_TYPE) != 2) if (sizeof(ISLOW_MULT_TYPE) != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -1055,7 +1018,7 @@ jsimd_can_idct_ifast (void)
if (IFAST_SCALE_BITS != 2) if (IFAST_SCALE_BITS != 2)
return 0; return 0;
if (simd_support & JSIMD_MIPS_DSPR2) if (simd_support & JSIMD_DSPR2)
return 1; return 1;
return 0; return 0;
@@ -1064,8 +1027,6 @@ jsimd_can_idct_ifast (void)
GLOBAL(int) GLOBAL(int)
jsimd_can_idct_float (void) jsimd_can_idct_float (void)
{ {
init_simd();
return 0; return 0;
} }
@@ -1074,7 +1035,6 @@ jsimd_idct_islow (j_decompress_ptr cinfo, jpeg_component_info *compptr,
JCOEFPTR coef_block, JSAMPARRAY output_buf, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JDIMENSION output_col) JDIMENSION output_col)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) {
int output[8] = { int output[8] = {
(int)(output_buf[0] + output_col), (int)(output_buf[0] + output_col),
(int)(output_buf[1] + output_col), (int)(output_buf[1] + output_col),
@@ -1083,12 +1043,11 @@ jsimd_idct_islow (j_decompress_ptr cinfo, jpeg_component_info *compptr,
(int)(output_buf[4] + output_col), (int)(output_buf[4] + output_col),
(int)(output_buf[5] + output_col), (int)(output_buf[5] + output_col),
(int)(output_buf[6] + output_col), (int)(output_buf[6] + output_col),
(int)(output_buf[7] + output_col), (int)(output_buf[7] + output_col)
}; };
jsimd_idct_islow_mips_dspr2(coef_block, compptr->dct_table, jsimd_idct_islow_dspr2(coef_block, compptr->dct_table, output,
output, IDCT_range_limit(cinfo)); IDCT_range_limit(cinfo));
}
} }
GLOBAL(void) GLOBAL(void)
@@ -1096,7 +1055,6 @@ jsimd_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info *compptr,
JCOEFPTR coef_block, JSAMPARRAY output_buf, JCOEFPTR coef_block, JSAMPARRAY output_buf,
JDIMENSION output_col) JDIMENSION output_col)
{ {
if (simd_support & JSIMD_MIPS_DSPR2) {
JCOEFPTR inptr; JCOEFPTR inptr;
IFAST_MULT_TYPE *quantptr; IFAST_MULT_TYPE *quantptr;
DCTELEM workspace[DCTSIZE2]; /* buffers data between passes */ DCTELEM workspace[DCTSIZE2]; /* buffers data between passes */
@@ -1106,16 +1064,15 @@ jsimd_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info *compptr,
inptr = coef_block; inptr = coef_block;
quantptr = (IFAST_MULT_TYPE *) compptr->dct_table; quantptr = (IFAST_MULT_TYPE *) compptr->dct_table;
jsimd_idct_ifast_cols_mips_dspr2(inptr, quantptr, jsimd_idct_ifast_cols_dspr2(inptr, quantptr, workspace,
workspace, mips_idct_ifast_coefs); mips_idct_ifast_coefs);
/* Pass 2: process rows from work array, store into output array. */ /* Pass 2: process rows from work array, store into output array. */
/* Note that we must descale the results by a factor of 8 == 2**3, */ /* Note that we must descale the results by a factor of 8 == 2**3, */
/* and also undo the PASS1_BITS scaling. */ /* and also undo the PASS1_BITS scaling. */
jsimd_idct_ifast_rows_mips_dspr2(workspace, output_buf, jsimd_idct_ifast_rows_dspr2(workspace, output_buf, output_col,
output_col, mips_idct_ifast_coefs); mips_idct_ifast_coefs);
}
} }
GLOBAL(void) GLOBAL(void)

View File

@@ -3,9 +3,10 @@
* *
* Copyright (C) 2013-2014, MIPS Technologies, Inc., California. * Copyright (C) 2013-2014, MIPS Technologies, Inc., California.
* All Rights Reserved. * All Rights Reserved.
* Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) * Authors: Teodora Novkovic <teodora.novkovic@imgtec.com>
* Darko Laus (darko.laus@imgtec.com) * Darko Laus <darko.laus@imgtec.com>
* Copyright (C) 2015, D. R. Commander. All Rights Reserved. * Copyright (C) 2015, D. R. Commander. All Rights Reserved.
*
* This software is provided 'as-is', without any express or implied * This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages * warranty. In no event will the authors be held liable for any damages
* arising from the use of this software. * arising from the use of this software.
@@ -26,7 +27,7 @@
#include "jsimd_dspr2_asm.h" #include "jsimd_dspr2_asm.h"
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_c_null_convert_mips_dspr2) LEAF_DSPR2(jsimd_c_null_convert_dspr2)
/* /*
* a0 - cinfo->image_width * a0 - cinfo->image_width
* a1 - input_buf * a1 - input_buf
@@ -127,21 +128,21 @@ LEAF_MIPS_DSPR2(jsimd_c_null_convert_mips_dspr2)
j ra j ra
nop nop
END(jsimd_c_null_convert_mips_dspr2) END(jsimd_c_null_convert_dspr2)
/*****************************************************************************/ /*****************************************************************************/
/* /*
* jsimd_extrgb_ycc_convert_mips_dspr2 * jsimd_extrgb_ycc_convert_dspr2
* jsimd_extbgr_ycc_convert_mips_dspr2 * jsimd_extbgr_ycc_convert_dspr2
* jsimd_extrgbx_ycc_convert_mips_dspr2 * jsimd_extrgbx_ycc_convert_dspr2
* jsimd_extbgrx_ycc_convert_mips_dspr2 * jsimd_extbgrx_ycc_convert_dspr2
* jsimd_extxbgr_ycc_convert_mips_dspr2 * jsimd_extxbgr_ycc_convert_dspr2
* jsimd_extxrgb_ycc_convert_mips_dspr2 * jsimd_extxrgb_ycc_convert_dspr2
* *
* Colorspace conversion RGB -> YCbCr * Colorspace conversion RGB -> YCbCr
*/ */
.macro GENERATE_JSIMD_RGB_YCC_CONVERT_MIPS_DSPR2 colorid, pixel_size, r_offs, g_offs, b_offs .macro GENERATE_JSIMD_RGB_YCC_CONVERT_DSPR2 colorid, pixel_size, r_offs, g_offs, b_offs
.macro DO_RGB_TO_YCC r, \ .macro DO_RGB_TO_YCC r, \
g, \ g, \
@@ -153,7 +154,7 @@ END(jsimd_c_null_convert_mips_dspr2)
addiu \inptr, \pixel_size addiu \inptr, \pixel_size
.endm .endm
LEAF_MIPS_DSPR2(jsimd_\colorid\()_ycc_convert_mips_dspr2) LEAF_DSPR2(jsimd_\colorid\()_ycc_convert_dspr2)
/* /*
* a0 - cinfo->image_width * a0 - cinfo->image_width
* a1 - input_buf * a1 - input_buf
@@ -221,33 +222,33 @@ LEAF_MIPS_DSPR2(jsimd_\colorid\()_ycc_convert_mips_dspr2)
j ra j ra
nop nop
END(jsimd_\colorid\()_ycc_convert_mips_dspr2) END(jsimd_\colorid\()_ycc_convert_dspr2)
.purgem DO_RGB_TO_YCC .purgem DO_RGB_TO_YCC
.endm .endm
/*------------------------------------------id -- pix R G B */ /*-------------------------------------id -- pix R G B */
GENERATE_JSIMD_RGB_YCC_CONVERT_MIPS_DSPR2 extrgb, 3, 0, 1, 2 GENERATE_JSIMD_RGB_YCC_CONVERT_DSPR2 extrgb, 3, 0, 1, 2
GENERATE_JSIMD_RGB_YCC_CONVERT_MIPS_DSPR2 extbgr, 3, 2, 1, 0 GENERATE_JSIMD_RGB_YCC_CONVERT_DSPR2 extbgr, 3, 2, 1, 0
GENERATE_JSIMD_RGB_YCC_CONVERT_MIPS_DSPR2 extrgbx, 4, 0, 1, 2 GENERATE_JSIMD_RGB_YCC_CONVERT_DSPR2 extrgbx, 4, 0, 1, 2
GENERATE_JSIMD_RGB_YCC_CONVERT_MIPS_DSPR2 extbgrx, 4, 2, 1, 0 GENERATE_JSIMD_RGB_YCC_CONVERT_DSPR2 extbgrx, 4, 2, 1, 0
GENERATE_JSIMD_RGB_YCC_CONVERT_MIPS_DSPR2 extxbgr, 4, 3, 2, 1 GENERATE_JSIMD_RGB_YCC_CONVERT_DSPR2 extxbgr, 4, 3, 2, 1
GENERATE_JSIMD_RGB_YCC_CONVERT_MIPS_DSPR2 extxrgb, 4, 1, 2, 3 GENERATE_JSIMD_RGB_YCC_CONVERT_DSPR2 extxrgb, 4, 1, 2, 3
/*****************************************************************************/ /*****************************************************************************/
/* /*
* jsimd_ycc_extrgb_convert_mips_dspr2 * jsimd_ycc_extrgb_convert_dspr2
* jsimd_ycc_extbgr_convert_mips_dspr2 * jsimd_ycc_extbgr_convert_dspr2
* jsimd_ycc_extrgbx_convert_mips_dspr2 * jsimd_ycc_extrgbx_convert_dspr2
* jsimd_ycc_extbgrx_convert_mips_dspr2 * jsimd_ycc_extbgrx_convert_dspr2
* jsimd_ycc_extxbgr_convert_mips_dspr2 * jsimd_ycc_extxbgr_convert_dspr2
* jsimd_ycc_extxrgb_convert_mips_dspr2 * jsimd_ycc_extxrgb_convert_dspr2
* *
* Colorspace conversion YCbCr -> RGB * Colorspace conversion YCbCr -> RGB
*/ */
.macro GENERATE_JSIMD_YCC_RGB_CONVERT_MIPS_DSPR2 colorid, pixel_size, r_offs, g_offs, b_offs, a_offs .macro GENERATE_JSIMD_YCC_RGB_CONVERT_DSPR2 colorid, pixel_size, r_offs, g_offs, b_offs, a_offs
.macro STORE_YCC_TO_RGB scratch0 \ .macro STORE_YCC_TO_RGB scratch0 \
scratch1 \ scratch1 \
@@ -263,7 +264,7 @@ GENERATE_JSIMD_RGB_YCC_CONVERT_MIPS_DSPR2 extxrgb, 4, 1, 2, 3
addiu \outptr, \pixel_size addiu \outptr, \pixel_size
.endm .endm
LEAF_MIPS_DSPR2(jsimd_ycc_\colorid\()_convert_mips_dspr2) LEAF_DSPR2(jsimd_ycc_\colorid\()_convert_dspr2)
/* /*
* a0 - cinfo->image_width * a0 - cinfo->image_width
* a1 - input_buf * a1 - input_buf
@@ -338,33 +339,33 @@ LEAF_MIPS_DSPR2(jsimd_ycc_\colorid\()_convert_mips_dspr2)
j ra j ra
nop nop
END(jsimd_ycc_\colorid\()_convert_mips_dspr2) END(jsimd_ycc_\colorid\()_convert_dspr2)
.purgem STORE_YCC_TO_RGB .purgem STORE_YCC_TO_RGB
.endm .endm
/*------------------------------------------id -- pix R G B A */ /*-------------------------------------id -- pix R G B A */
GENERATE_JSIMD_YCC_RGB_CONVERT_MIPS_DSPR2 extrgb, 3, 0, 1, 2, 3 GENERATE_JSIMD_YCC_RGB_CONVERT_DSPR2 extrgb, 3, 0, 1, 2, 3
GENERATE_JSIMD_YCC_RGB_CONVERT_MIPS_DSPR2 extbgr, 3, 2, 1, 0, 3 GENERATE_JSIMD_YCC_RGB_CONVERT_DSPR2 extbgr, 3, 2, 1, 0, 3
GENERATE_JSIMD_YCC_RGB_CONVERT_MIPS_DSPR2 extrgbx, 4, 0, 1, 2, 3 GENERATE_JSIMD_YCC_RGB_CONVERT_DSPR2 extrgbx, 4, 0, 1, 2, 3
GENERATE_JSIMD_YCC_RGB_CONVERT_MIPS_DSPR2 extbgrx, 4, 2, 1, 0, 3 GENERATE_JSIMD_YCC_RGB_CONVERT_DSPR2 extbgrx, 4, 2, 1, 0, 3
GENERATE_JSIMD_YCC_RGB_CONVERT_MIPS_DSPR2 extxbgr, 4, 3, 2, 1, 0 GENERATE_JSIMD_YCC_RGB_CONVERT_DSPR2 extxbgr, 4, 3, 2, 1, 0
GENERATE_JSIMD_YCC_RGB_CONVERT_MIPS_DSPR2 extxrgb, 4, 1, 2, 3, 0 GENERATE_JSIMD_YCC_RGB_CONVERT_DSPR2 extxrgb, 4, 1, 2, 3, 0
/*****************************************************************************/ /*****************************************************************************/
/* /*
* jsimd_extrgb_gray_convert_mips_dspr2 * jsimd_extrgb_gray_convert_dspr2
* jsimd_extbgr_gray_convert_mips_dspr2 * jsimd_extbgr_gray_convert_dspr2
* jsimd_extrgbx_gray_convert_mips_dspr2 * jsimd_extrgbx_gray_convert_dspr2
* jsimd_extbgrx_gray_convert_mips_dspr2 * jsimd_extbgrx_gray_convert_dspr2
* jsimd_extxbgr_gray_convert_mips_dspr2 * jsimd_extxbgr_gray_convert_dspr2
* jsimd_extxrgb_gray_convert_mips_dspr2 * jsimd_extxrgb_gray_convert_dspr2
* *
* Colorspace conversion RGB -> GRAY * Colorspace conversion RGB -> GRAY
*/ */
.macro GENERATE_JSIMD_RGB_GRAY_CONVERT_MIPS_DSPR2 colorid, pixel_size, r_offs, g_offs, b_offs .macro GENERATE_JSIMD_RGB_GRAY_CONVERT_DSPR2 colorid, pixel_size, r_offs, g_offs, b_offs
.macro DO_RGB_TO_GRAY r, \ .macro DO_RGB_TO_GRAY r, \
g, \ g, \
@@ -376,7 +377,7 @@ GENERATE_JSIMD_YCC_RGB_CONVERT_MIPS_DSPR2 extxrgb, 4, 1, 2, 3, 0
addiu \inptr, \pixel_size addiu \inptr, \pixel_size
.endm .endm
LEAF_MIPS_DSPR2(jsimd_\colorid\()_gray_convert_mips_dspr2) LEAF_DSPR2(jsimd_\colorid\()_gray_convert_dspr2)
/* /*
* a0 - cinfo->image_width * a0 - cinfo->image_width
* a1 - input_buf * a1 - input_buf
@@ -467,32 +468,32 @@ LEAF_MIPS_DSPR2(jsimd_\colorid\()_gray_convert_mips_dspr2)
j ra j ra
nop nop
END(jsimd_\colorid\()_gray_convert_mips_dspr2) END(jsimd_\colorid\()_gray_convert_dspr2)
.purgem DO_RGB_TO_GRAY .purgem DO_RGB_TO_GRAY
.endm .endm
/*------------------------------------------id -- pix R G B */ /*-------------------------------------id -- pix R G B */
GENERATE_JSIMD_RGB_GRAY_CONVERT_MIPS_DSPR2 extrgb, 3, 0, 1, 2 GENERATE_JSIMD_RGB_GRAY_CONVERT_DSPR2 extrgb, 3, 0, 1, 2
GENERATE_JSIMD_RGB_GRAY_CONVERT_MIPS_DSPR2 extbgr, 3, 2, 1, 0 GENERATE_JSIMD_RGB_GRAY_CONVERT_DSPR2 extbgr, 3, 2, 1, 0
GENERATE_JSIMD_RGB_GRAY_CONVERT_MIPS_DSPR2 extrgbx, 4, 0, 1, 2 GENERATE_JSIMD_RGB_GRAY_CONVERT_DSPR2 extrgbx, 4, 0, 1, 2
GENERATE_JSIMD_RGB_GRAY_CONVERT_MIPS_DSPR2 extbgrx, 4, 2, 1, 0 GENERATE_JSIMD_RGB_GRAY_CONVERT_DSPR2 extbgrx, 4, 2, 1, 0
GENERATE_JSIMD_RGB_GRAY_CONVERT_MIPS_DSPR2 extxbgr, 4, 3, 2, 1 GENERATE_JSIMD_RGB_GRAY_CONVERT_DSPR2 extxbgr, 4, 3, 2, 1
GENERATE_JSIMD_RGB_GRAY_CONVERT_MIPS_DSPR2 extxrgb, 4, 1, 2, 3 GENERATE_JSIMD_RGB_GRAY_CONVERT_DSPR2 extxrgb, 4, 1, 2, 3
/*****************************************************************************/ /*****************************************************************************/
/* /*
* jsimd_h2v2_merged_upsample_mips_dspr2 * jsimd_h2v2_merged_upsample_dspr2
* jsimd_h2v2_extrgb_merged_upsample_mips_dspr2 * jsimd_h2v2_extrgb_merged_upsample_dspr2
* jsimd_h2v2_extrgbx_merged_upsample_mips_dspr2 * jsimd_h2v2_extrgbx_merged_upsample_dspr2
* jsimd_h2v2_extbgr_merged_upsample_mips_dspr2 * jsimd_h2v2_extbgr_merged_upsample_dspr2
* jsimd_h2v2_extbgrx_merged_upsample_mips_dspr2 * jsimd_h2v2_extbgrx_merged_upsample_dspr2
* jsimd_h2v2_extxbgr_merged_upsample_mips_dspr2 * jsimd_h2v2_extxbgr_merged_upsample_dspr2
* jsimd_h2v2_extxrgb_merged_upsample_mips_dspr2 * jsimd_h2v2_extxrgb_merged_upsample_dspr2
* *
* Merged h2v2 upsample routines * Merged h2v2 upsample routines
*/ */
.macro GENERATE_H2V2_MERGED_UPSAMPLE_MIPS_DSPR2 colorid, \ .macro GENERATE_H2V2_MERGED_UPSAMPLE_DSPR2 colorid, \
pixel_size, \ pixel_size, \
r1_offs, \ r1_offs, \
g1_offs, \ g1_offs, \
@@ -538,7 +539,7 @@ GENERATE_JSIMD_RGB_GRAY_CONVERT_MIPS_DSPR2 extxrgb, 4, 1, 2, 3
.endif .endif
.endm .endm
LEAF_MIPS_DSPR2(jsimd_h2v2_\colorid\()_merged_upsample_mips_dspr2) LEAF_DSPR2(jsimd_h2v2_\colorid\()_merged_upsample_dspr2)
/* /*
* a0 - cinfo->output_width * a0 - cinfo->output_width
* a1 - input_buf * a1 - input_buf
@@ -679,33 +680,33 @@ LEAF_MIPS_DSPR2(jsimd_h2v2_\colorid\()_merged_upsample_mips_dspr2)
j ra j ra
nop nop
END(jsimd_h2v2_\colorid\()_merged_upsample_mips_dspr2) END(jsimd_h2v2_\colorid\()_merged_upsample_dspr2)
.purgem STORE_H2V2_1_PIXEL .purgem STORE_H2V2_1_PIXEL
.purgem STORE_H2V2_2_PIXELS .purgem STORE_H2V2_2_PIXELS
.endm .endm
/*-----------------------------------------id -- pix R1 G1 B1 A1 R2 G2 B2 A2 */ /*------------------------------------id -- pix R1 G1 B1 A1 R2 G2 B2 A2 */
GENERATE_H2V2_MERGED_UPSAMPLE_MIPS_DSPR2 extrgb, 6, 0, 1, 2, 6, 3, 4, 5, 6 GENERATE_H2V2_MERGED_UPSAMPLE_DSPR2 extrgb, 6, 0, 1, 2, 6, 3, 4, 5, 6
GENERATE_H2V2_MERGED_UPSAMPLE_MIPS_DSPR2 extbgr, 6, 2, 1, 0, 3, 5, 4, 3, 6 GENERATE_H2V2_MERGED_UPSAMPLE_DSPR2 extbgr, 6, 2, 1, 0, 3, 5, 4, 3, 6
GENERATE_H2V2_MERGED_UPSAMPLE_MIPS_DSPR2 extrgbx, 8, 0, 1, 2, 3, 4, 5, 6, 7 GENERATE_H2V2_MERGED_UPSAMPLE_DSPR2 extrgbx, 8, 0, 1, 2, 3, 4, 5, 6, 7
GENERATE_H2V2_MERGED_UPSAMPLE_MIPS_DSPR2 extbgrx, 8, 2, 1, 0, 3, 6, 5, 4, 7 GENERATE_H2V2_MERGED_UPSAMPLE_DSPR2 extbgrx, 8, 2, 1, 0, 3, 6, 5, 4, 7
GENERATE_H2V2_MERGED_UPSAMPLE_MIPS_DSPR2 extxbgr, 8, 3, 2, 1, 0, 7, 6, 5, 4 GENERATE_H2V2_MERGED_UPSAMPLE_DSPR2 extxbgr, 8, 3, 2, 1, 0, 7, 6, 5, 4
GENERATE_H2V2_MERGED_UPSAMPLE_MIPS_DSPR2 extxrgb, 8, 1, 2, 3, 0, 5, 6, 7, 4 GENERATE_H2V2_MERGED_UPSAMPLE_DSPR2 extxrgb, 8, 1, 2, 3, 0, 5, 6, 7, 4
/*****************************************************************************/ /*****************************************************************************/
/* /*
* jsimd_h2v1_merged_upsample_mips_dspr2 * jsimd_h2v1_merged_upsample_dspr2
* jsimd_h2v1_extrgb_merged_upsample_mips_dspr2 * jsimd_h2v1_extrgb_merged_upsample_dspr2
* jsimd_h2v1_extrgbx_merged_upsample_mips_dspr2 * jsimd_h2v1_extrgbx_merged_upsample_dspr2
* jsimd_h2v1_extbgr_merged_upsample_mips_dspr2 * jsimd_h2v1_extbgr_merged_upsample_dspr2
* jsimd_h2v1_extbgrx_merged_upsample_mips_dspr2 * jsimd_h2v1_extbgrx_merged_upsample_dspr2
* jsimd_h2v1_extxbgr_merged_upsample_mips_dspr2 * jsimd_h2v1_extxbgr_merged_upsample_dspr2
* jsimd_h2v1_extxrgb_merged_upsample_mips_dspr2 * jsimd_h2v1_extxrgb_merged_upsample_dspr2
* *
* Merged h2v1 upsample routines * Merged h2v1 upsample routines
*/ */
.macro GENERATE_H2V1_MERGED_UPSAMPLE_MIPS_DSPR2 colorid, \ .macro GENERATE_H2V1_MERGED_UPSAMPLE_DSPR2 colorid, \
pixel_size, \ pixel_size, \
r1_offs, \ r1_offs, \
g1_offs, \ g1_offs, \
@@ -750,7 +751,7 @@ GENERATE_H2V2_MERGED_UPSAMPLE_MIPS_DSPR2 extxrgb, 8, 1, 2, 3, 0, 5, 6, 7, 4
.endif .endif
.endm .endm
LEAF_MIPS_DSPR2(jsimd_h2v1_\colorid\()_merged_upsample_mips_dspr2) LEAF_DSPR2(jsimd_h2v1_\colorid\()_merged_upsample_dspr2)
/* /*
* a0 - cinfo->output_width * a0 - cinfo->output_width
* a1 - input_buf * a1 - input_buf
@@ -854,26 +855,26 @@ LEAF_MIPS_DSPR2(jsimd_h2v1_\colorid\()_merged_upsample_mips_dspr2)
j ra j ra
nop nop
END(jsimd_h2v1_\colorid\()_merged_upsample_mips_dspr2) END(jsimd_h2v1_\colorid\()_merged_upsample_dspr2)
.purgem STORE_H2V1_1_PIXEL .purgem STORE_H2V1_1_PIXEL
.purgem STORE_H2V1_2_PIXELS .purgem STORE_H2V1_2_PIXELS
.endm .endm
/*-----------------------------------------id -- pix R1 G1 B1 A1 R2 G2 B2 A2 */ /*------------------------------------id -- pix R1 G1 B1 A1 R2 G2 B2 A2 */
GENERATE_H2V1_MERGED_UPSAMPLE_MIPS_DSPR2 extrgb, 6, 0, 1, 2, 6, 3, 4, 5, 6 GENERATE_H2V1_MERGED_UPSAMPLE_DSPR2 extrgb, 6, 0, 1, 2, 6, 3, 4, 5, 6
GENERATE_H2V1_MERGED_UPSAMPLE_MIPS_DSPR2 extbgr, 6, 2, 1, 0, 3, 5, 4, 3, 6 GENERATE_H2V1_MERGED_UPSAMPLE_DSPR2 extbgr, 6, 2, 1, 0, 3, 5, 4, 3, 6
GENERATE_H2V1_MERGED_UPSAMPLE_MIPS_DSPR2 extrgbx, 8, 0, 1, 2, 3, 4, 5, 6, 7 GENERATE_H2V1_MERGED_UPSAMPLE_DSPR2 extrgbx, 8, 0, 1, 2, 3, 4, 5, 6, 7
GENERATE_H2V1_MERGED_UPSAMPLE_MIPS_DSPR2 extbgrx, 8, 2, 1, 0, 3, 6, 5, 4, 7 GENERATE_H2V1_MERGED_UPSAMPLE_DSPR2 extbgrx, 8, 2, 1, 0, 3, 6, 5, 4, 7
GENERATE_H2V1_MERGED_UPSAMPLE_MIPS_DSPR2 extxbgr, 8, 3, 2, 1, 0, 7, 6, 5, 4 GENERATE_H2V1_MERGED_UPSAMPLE_DSPR2 extxbgr, 8, 3, 2, 1, 0, 7, 6, 5, 4
GENERATE_H2V1_MERGED_UPSAMPLE_MIPS_DSPR2 extxrgb, 8, 1, 2, 3, 0, 5, 6, 7, 4 GENERATE_H2V1_MERGED_UPSAMPLE_DSPR2 extxrgb, 8, 1, 2, 3, 0, 5, 6, 7, 4
/*****************************************************************************/ /*****************************************************************************/
/* /*
* jsimd_h2v2_fancy_upsample_mips_dspr2 * jsimd_h2v2_fancy_upsample_dspr2
* *
* Fancy processing for the common case of 2:1 horizontal and 2:1 vertical. * Fancy processing for the common case of 2:1 horizontal and 2:1 vertical.
*/ */
LEAF_MIPS_DSPR2(jsimd_h2v2_fancy_upsample_mips_dspr2) LEAF_DSPR2(jsimd_h2v2_fancy_upsample_dspr2)
/* /*
* a0 - cinfo->max_v_samp_factor * a0 - cinfo->max_v_samp_factor
* a1 - downsampled_width * a1 - downsampled_width
@@ -998,10 +999,10 @@ LEAF_MIPS_DSPR2(jsimd_h2v2_fancy_upsample_mips_dspr2)
j ra j ra
nop nop
END(jsimd_h2v2_fancy_upsample_mips_dspr2) END(jsimd_h2v2_fancy_upsample_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_h2v1_fancy_upsample_mips_dspr2) LEAF_DSPR2(jsimd_h2v1_fancy_upsample_dspr2)
/* /*
* a0 - cinfo->max_v_samp_factor * a0 - cinfo->max_v_samp_factor
* a1 - downsampled_width * a1 - downsampled_width
@@ -1108,10 +1109,10 @@ LEAF_MIPS_DSPR2(jsimd_h2v1_fancy_upsample_mips_dspr2)
j ra j ra
nop nop
END(jsimd_h2v1_fancy_upsample_mips_dspr2) END(jsimd_h2v1_fancy_upsample_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_h2v1_downsample_mips_dspr2) LEAF_DSPR2(jsimd_h2v1_downsample_dspr2)
/* /*
* a0 - cinfo->image_width * a0 - cinfo->image_width
* a1 - cinfo->max_v_samp_factor * a1 - cinfo->max_v_samp_factor
@@ -1203,10 +1204,10 @@ LEAF_MIPS_DSPR2(jsimd_h2v1_downsample_mips_dspr2)
j ra j ra
nop nop
END(jsimd_h2v1_downsample_mips_dspr2) END(jsimd_h2v1_downsample_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_h2v2_downsample_mips_dspr2) LEAF_DSPR2(jsimd_h2v2_downsample_dspr2)
/* /*
* a0 - cinfo->image_width * a0 - cinfo->image_width
@@ -1315,9 +1316,10 @@ LEAF_MIPS_DSPR2(jsimd_h2v2_downsample_mips_dspr2)
j ra j ra
nop nop
END(jsimd_h2v2_downsample_mips_dspr2) END(jsimd_h2v2_downsample_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_h2v2_smooth_downsample_mips_dspr2) LEAF_DSPR2(jsimd_h2v2_smooth_downsample_dspr2)
/* /*
* a0 - input_data * a0 - input_data
* a1 - output_data * a1 - output_data
@@ -1615,10 +1617,10 @@ LEAF_MIPS_DSPR2(jsimd_h2v2_smooth_downsample_mips_dspr2)
j ra j ra
nop nop
END(jsimd_h2v2_smooth_downsample_mips_dspr2) END(jsimd_h2v2_smooth_downsample_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_int_upsample_mips_dspr2) LEAF_DSPR2(jsimd_int_upsample_dspr2)
/* /*
* a0 - upsample->h_expand[compptr->component_index] * a0 - upsample->h_expand[compptr->component_index]
* a1 - upsample->v_expand[compptr->component_index] * a1 - upsample->v_expand[compptr->component_index]
@@ -1702,10 +1704,10 @@ LEAF_MIPS_DSPR2(jsimd_int_upsample_mips_dspr2)
j ra j ra
nop nop
END(jsimd_int_upsample_mips_dspr2) END(jsimd_int_upsample_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_h2v1_upsample_mips_dspr2) LEAF_DSPR2(jsimd_h2v1_upsample_dspr2)
/* /*
* a0 - cinfo->max_v_samp_factor * a0 - cinfo->max_v_samp_factor
* a1 - cinfo->output_width * a1 - cinfo->output_width
@@ -1761,10 +1763,10 @@ LEAF_MIPS_DSPR2(jsimd_h2v1_upsample_mips_dspr2)
4: 4:
j ra j ra
nop nop
END(jsimd_h2v1_upsample_mips_dspr2) END(jsimd_h2v1_upsample_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_h2v2_upsample_mips_dspr2) LEAF_DSPR2(jsimd_h2v2_upsample_dspr2)
/* /*
* a0 - cinfo->max_v_samp_factor * a0 - cinfo->max_v_samp_factor
* a1 - cinfo->output_width * a1 - cinfo->output_width
@@ -1845,10 +1847,10 @@ LEAF_MIPS_DSPR2(jsimd_h2v2_upsample_mips_dspr2)
7: 7:
j ra j ra
nop nop
END(jsimd_h2v2_upsample_mips_dspr2) END(jsimd_h2v2_upsample_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_idct_islow_mips_dspr2) LEAF_DSPR2(jsimd_idct_islow_dspr2)
/* /*
* a0 - coef_block * a0 - coef_block
* a1 - compptr->dcttable * a1 - compptr->dcttable
@@ -2125,10 +2127,10 @@ LEAF_MIPS_DSPR2(jsimd_idct_islow_mips_dspr2)
j ra j ra
nop nop
END(jsimd_idct_islow_mips_dspr2) END(jsimd_idct_islow_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_idct_ifast_cols_mips_dspr2) LEAF_DSPR2(jsimd_idct_ifast_cols_dspr2)
/* /*
* a0 - inptr * a0 - inptr
* a1 - quantptr * a1 - quantptr
@@ -2266,10 +2268,10 @@ LEAF_MIPS_DSPR2(jsimd_idct_ifast_cols_mips_dspr2)
j ra j ra
nop nop
END(jsimd_idct_ifast_cols_mips_dspr2) END(jsimd_idct_ifast_cols_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_idct_ifast_rows_mips_dspr2) LEAF_DSPR2(jsimd_idct_ifast_rows_dspr2)
/* /*
* a0 - wsptr * a0 - wsptr
* a1 - output_buf * a1 - output_buf
@@ -2417,10 +2419,10 @@ LEAF_MIPS_DSPR2(jsimd_idct_ifast_rows_mips_dspr2)
j ra j ra
nop nop
END(jsimd_idct_ifast_rows_mips_dspr2) END(jsimd_idct_ifast_rows_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_fdct_islow_mips_dspr2) LEAF_DSPR2(jsimd_fdct_islow_dspr2)
/* /*
* a0 - data * a0 - data
*/ */
@@ -2581,10 +2583,10 @@ LEAF_MIPS_DSPR2(jsimd_fdct_islow_mips_dspr2)
jr ra jr ra
nop nop
END(jsimd_fdct_islow_mips_dspr2) END(jsimd_fdct_islow_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_fdct_ifast_mips_dspr2) LEAF_DSPR2(jsimd_fdct_ifast_dspr2)
/* /*
* a0 - data * a0 - data
*/ */
@@ -2726,10 +2728,10 @@ LEAF_MIPS_DSPR2(jsimd_fdct_ifast_mips_dspr2)
j ra j ra
nop nop
END(jsimd_fdct_ifast_mips_dspr2) END(jsimd_fdct_ifast_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_quantize_mips_dspr2) LEAF_DSPR2(jsimd_quantize_dspr2)
/* /*
* a0 - coef_block * a0 - coef_block
* a1 - divisors * a1 - divisors
@@ -2826,10 +2828,10 @@ LEAF_MIPS_DSPR2(jsimd_quantize_mips_dspr2)
j ra j ra
nop nop
END(jsimd_quantize_mips_dspr2) END(jsimd_quantize_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_quantize_float_mips_dspr2) LEAF_DSPR2(jsimd_quantize_float_dspr2)
/* /*
* a0 - coef_block * a0 - coef_block
* a1 - divisors * a1 - divisors
@@ -2907,9 +2909,10 @@ LEAF_MIPS_DSPR2(jsimd_quantize_float_mips_dspr2)
j ra j ra
nop nop
END(jsimd_quantize_float_mips_dspr2) END(jsimd_quantize_float_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_idct_2x2_mips_dspr2) LEAF_DSPR2(jsimd_idct_2x2_dspr2)
/* /*
* a0 - compptr->dct_table * a0 - compptr->dct_table
* a1 - coef_block * a1 - coef_block
@@ -3125,10 +3128,10 @@ LEAF_MIPS_DSPR2(jsimd_idct_2x2_mips_dspr2)
j ra j ra
nop nop
END(jsimd_idct_2x2_mips_dspr2) END(jsimd_idct_2x2_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_idct_4x4_mips_dspr2) LEAF_DSPR2(jsimd_idct_4x4_dspr2)
/* /*
* a0 - compptr->dct_table * a0 - compptr->dct_table
* a1 - coef_block * a1 - coef_block
@@ -3485,10 +3488,10 @@ LEAF_MIPS_DSPR2(jsimd_idct_4x4_mips_dspr2)
j ra j ra
nop nop
END(jsimd_idct_4x4_mips_dspr2) END(jsimd_idct_4x4_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_idct_6x6_mips_dspr2) LEAF_DSPR2(jsimd_idct_6x6_dspr2)
/* /*
* a0 - compptr->dct_table * a0 - compptr->dct_table
* a1 - coef_block * a1 - coef_block
@@ -3640,10 +3643,10 @@ LEAF_MIPS_DSPR2(jsimd_idct_6x6_mips_dspr2)
j ra j ra
nop nop
END(jsimd_idct_6x6_mips_dspr2) END(jsimd_idct_6x6_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_idct_12x12_pass1_mips_dspr2) LEAF_DSPR2(jsimd_idct_12x12_pass1_dspr2)
/* /*
* a0 - compptr->dct_table * a0 - compptr->dct_table
* a1 - coef_block * a1 - coef_block
@@ -3798,10 +3801,10 @@ LEAF_MIPS_DSPR2(jsimd_idct_12x12_pass1_mips_dspr2)
j ra j ra
nop nop
END(jsimd_idct_12x12_pass1_mips_dspr2) END(jsimd_idct_12x12_pass1_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_idct_12x12_pass2_mips_dspr2) LEAF_DSPR2(jsimd_idct_12x12_pass2_dspr2)
/* /*
* a0 - workspace * a0 - workspace
* a1 - output * a1 - output
@@ -3973,10 +3976,10 @@ LEAF_MIPS_DSPR2(jsimd_idct_12x12_pass2_mips_dspr2)
jr ra jr ra
nop nop
END(jsimd_idct_12x12_pass2_mips_dspr2) END(jsimd_idct_12x12_pass2_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_convsamp_mips_dspr2) LEAF_DSPR2(jsimd_convsamp_dspr2)
/* /*
* a0 - sample_data * a0 - sample_data
* a1 - start_col * a1 - start_col
@@ -4122,10 +4125,10 @@ LEAF_MIPS_DSPR2(jsimd_convsamp_mips_dspr2)
j ra j ra
nop nop
END(jsimd_convsamp_mips_dspr2) END(jsimd_convsamp_dspr2)
/*****************************************************************************/ /*****************************************************************************/
LEAF_MIPS_DSPR2(jsimd_convsamp_float_mips_dspr2) LEAF_DSPR2(jsimd_convsamp_float_dspr2)
/* /*
* a0 - sample_data * a0 - sample_data
* a1 - start_col * a1 - start_col
@@ -4481,6 +4484,6 @@ LEAF_MIPS_DSPR2(jsimd_convsamp_float_mips_dspr2)
j ra j ra
nop nop
END(jsimd_convsamp_float_mips_dspr2) END(jsimd_convsamp_float_dspr2)
/*****************************************************************************/ /*****************************************************************************/

View File

@@ -112,9 +112,9 @@ symbol: .frame sp, 0, ra; \
.set noat; .set noat;
/* /*
* LEAF_MIPS_DSPR2 - declare leaf routine for MIPS DSPr2 * LEAF_DSPR2 - declare leaf routine for MIPS DSPr2
*/ */
#define LEAF_MIPS_DSPR2(symbol) \ #define LEAF_DSPR2(symbol) \
LEAF_MIPS32R2(symbol) \ LEAF_MIPS32R2(symbol) \
.set dspr2; .set dspr2;

View File

@@ -24,9 +24,10 @@
/* This file is included by jccolor-altivec.c */ /* This file is included by jccolor-altivec.c */
void jsimd_rgb_ycc_convert_altivec (JDIMENSION img_width, JSAMPARRAY input_buf, void
JSAMPIMAGE output_buf, jsimd_rgb_ycc_convert_altivec (JDIMENSION img_width, JSAMPARRAY input_buf,
JDIMENSION output_row, int num_rows) JSAMPIMAGE output_buf, JDIMENSION output_row,
int num_rows)
{ {
JSAMPROW inptr, outptr0, outptr1, outptr2; JSAMPROW inptr, outptr0, outptr1, outptr2;
int pitch = img_width * RGB_PIXELSIZE, num_cols; int pitch = img_width * RGB_PIXELSIZE, num_cols;

View File

@@ -24,10 +24,10 @@
/* This file is included by jcgray-altivec.c */ /* This file is included by jcgray-altivec.c */
void jsimd_rgb_gray_convert_altivec (JDIMENSION img_width, void
JSAMPARRAY input_buf, jsimd_rgb_gray_convert_altivec (JDIMENSION img_width, JSAMPARRAY input_buf,
JSAMPIMAGE output_buf, JSAMPIMAGE output_buf, JDIMENSION output_row,
JDIMENSION output_row, int num_rows) int num_rows)
{ {
JSAMPROW inptr, outptr; JSAMPROW inptr, outptr;
int pitch = img_width * RGB_PIXELSIZE, num_cols; int pitch = img_width * RGB_PIXELSIZE, num_cols;

View File

@@ -29,11 +29,11 @@
void void
jsimd_h2v1_downsample_altivec (JDIMENSION image_width, int max_v_samp_factor, jsimd_h2v1_downsample_altivec (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION v_samp_factor,
JDIMENSION width_blocks, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data) JSAMPARRAY input_data, JSAMPARRAY output_data)
{ {
int outrow, outcol; int outrow, outcol;
JDIMENSION output_cols = width_blocks * DCTSIZE; JDIMENSION output_cols = width_in_blocks * DCTSIZE;
JSAMPROW inptr, outptr; JSAMPROW inptr, outptr;
__vector unsigned char this0, next0, out; __vector unsigned char this0, next0, out;
@@ -85,11 +85,11 @@ jsimd_h2v1_downsample_altivec (JDIMENSION image_width, int max_v_samp_factor,
void void
jsimd_h2v2_downsample_altivec (JDIMENSION image_width, int max_v_samp_factor, jsimd_h2v2_downsample_altivec (JDIMENSION image_width, int max_v_samp_factor,
JDIMENSION v_samp_factor, JDIMENSION v_samp_factor,
JDIMENSION width_blocks, JDIMENSION width_in_blocks,
JSAMPARRAY input_data, JSAMPARRAY output_data) JSAMPARRAY input_data, JSAMPARRAY output_data)
{ {
int inrow, outrow, outcol; int inrow, outrow, outcol;
JDIMENSION output_cols = width_blocks * DCTSIZE; JDIMENSION output_cols = width_in_blocks * DCTSIZE;
JSAMPROW inptr0, inptr1, outptr; JSAMPROW inptr0, inptr1, outptr;
__vector unsigned char this0, next0, this1, next1, out; __vector unsigned char this0, next0, this1, next1, out;

View File

@@ -23,9 +23,10 @@
/* This file is included by jdcolor-altivec.c */ /* This file is included by jdcolor-altivec.c */
void jsimd_ycc_rgb_convert_altivec (JDIMENSION out_width, JSAMPIMAGE input_buf, void
JDIMENSION input_row, jsimd_ycc_rgb_convert_altivec (JDIMENSION out_width, JSAMPIMAGE input_buf,
JSAMPARRAY output_buf, int num_rows) JDIMENSION input_row, JSAMPARRAY output_buf,
int num_rows)
{ {
JSAMPROW outptr, inptr0, inptr1, inptr2; JSAMPROW outptr, inptr0, inptr1, inptr2;
int pitch = out_width * RGB_PIXELSIZE, num_cols; int pitch = out_width * RGB_PIXELSIZE, num_cols;

View File

@@ -23,7 +23,8 @@
/* This file is included by jdmerge-altivec.c */ /* This file is included by jdmerge-altivec.c */
void jsimd_h2v1_merged_upsample_altivec (JDIMENSION output_width, void
jsimd_h2v1_merged_upsample_altivec (JDIMENSION output_width,
JSAMPIMAGE input_buf, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JDIMENSION in_row_group_ctr,
JSAMPARRAY output_buf) JSAMPARRAY output_buf)
@@ -299,7 +300,8 @@ void jsimd_h2v1_merged_upsample_altivec (JDIMENSION output_width,
} }
void jsimd_h2v2_merged_upsample_altivec (JDIMENSION output_width, void
jsimd_h2v2_merged_upsample_altivec (JDIMENSION output_width,
JSAMPIMAGE input_buf, JSAMPIMAGE input_buf,
JDIMENSION in_row_group_ctr, JDIMENSION in_row_group_ctr,
JSAMPARRAY output_buf) JSAMPARRAY output_buf)

View File

@@ -29,14 +29,15 @@
; ;
; GLOBAL(void) ; GLOBAL(void)
; jsimd_h2v1_downsample_avx2 (JDIMENSION image_width, int max_v_samp_factor, ; jsimd_h2v1_downsample_avx2 (JDIMENSION image_width, int max_v_samp_factor,
; JDIMENSION v_samp_factor, JDIMENSION width_blocks, ; JDIMENSION v_samp_factor,
; JDIMENSION width_in_blocks,
; JSAMPARRAY input_data, JSAMPARRAY output_data); ; JSAMPARRAY input_data, JSAMPARRAY output_data);
; ;
; r10d = JDIMENSION image_width ; r10d = JDIMENSION image_width
; r11 = int max_v_samp_factor ; r11 = int max_v_samp_factor
; r12d = JDIMENSION v_samp_factor ; r12d = JDIMENSION v_samp_factor
; r13d = JDIMENSION width_blocks ; r13d = JDIMENSION width_in_blocks
; r14 = JSAMPARRAY input_data ; r14 = JSAMPARRAY input_data
; r15 = JSAMPARRAY output_data ; r15 = JSAMPARRAY output_data
@@ -190,14 +191,15 @@ EXTN(jsimd_h2v1_downsample_avx2):
; ;
; GLOBAL(void) ; GLOBAL(void)
; jsimd_h2v2_downsample_avx2 (JDIMENSION image_width, int max_v_samp_factor, ; jsimd_h2v2_downsample_avx2 (JDIMENSION image_width, int max_v_samp_factor,
; JDIMENSION v_samp_factor, JDIMENSION width_blocks, ; JDIMENSION v_samp_factor,
; JDIMENSION width_in_blocks,
; JSAMPARRAY input_data, JSAMPARRAY output_data); ; JSAMPARRAY input_data, JSAMPARRAY output_data);
; ;
; r10d = JDIMENSION image_width ; r10d = JDIMENSION image_width
; r11 = int max_v_samp_factor ; r11 = int max_v_samp_factor
; r12d = JDIMENSION v_samp_factor ; r12d = JDIMENSION v_samp_factor
; r13d = JDIMENSION width_blocks ; r13d = JDIMENSION width_in_blocks
; r14 = JSAMPARRAY input_data ; r14 = JSAMPARRAY input_data
; r15 = JSAMPARRAY output_data ; r15 = JSAMPARRAY output_data

View File

@@ -28,14 +28,15 @@
; ;
; GLOBAL(void) ; GLOBAL(void)
; jsimd_h2v1_downsample_sse2 (JDIMENSION image_width, int max_v_samp_factor, ; jsimd_h2v1_downsample_sse2 (JDIMENSION image_width, int max_v_samp_factor,
; JDIMENSION v_samp_factor, JDIMENSION width_blocks, ; JDIMENSION v_samp_factor,
; JDIMENSION width_in_blocks,
; JSAMPARRAY input_data, JSAMPARRAY output_data); ; JSAMPARRAY input_data, JSAMPARRAY output_data);
; ;
; r10d = JDIMENSION image_width ; r10d = JDIMENSION image_width
; r11 = int max_v_samp_factor ; r11 = int max_v_samp_factor
; r12d = JDIMENSION v_samp_factor ; r12d = JDIMENSION v_samp_factor
; r13d = JDIMENSION width_blocks ; r13d = JDIMENSION width_in_blocks
; r14 = JSAMPARRAY input_data ; r14 = JSAMPARRAY input_data
; r15 = JSAMPARRAY output_data ; r15 = JSAMPARRAY output_data
@@ -172,14 +173,15 @@ EXTN(jsimd_h2v1_downsample_sse2):
; ;
; GLOBAL(void) ; GLOBAL(void)
; jsimd_h2v2_downsample_sse2 (JDIMENSION image_width, int max_v_samp_factor, ; jsimd_h2v2_downsample_sse2 (JDIMENSION image_width, int max_v_samp_factor,
; JDIMENSION v_samp_factor, JDIMENSION width_blocks, ; JDIMENSION v_samp_factor,
; JDIMENSION width_in_blocks,
; JSAMPARRAY input_data, JSAMPARRAY output_data); ; JSAMPARRAY input_data, JSAMPARRAY output_data);
; ;
; r10d = JDIMENSION image_width ; r10d = JDIMENSION image_width
; r11 = int max_v_samp_factor ; r11 = int max_v_samp_factor
; r12d = JDIMENSION v_samp_factor ; r12d = JDIMENSION v_samp_factor
; r13d = JDIMENSION width_blocks ; r13d = JDIMENSION width_in_blocks
; r14 = JSAMPARRAY input_data ; r14 = JSAMPARRAY input_data
; r15 = JSAMPARRAY output_data ; r15 = JSAMPARRAY output_data