blob: be48b84d4a8fbdc410251598c69118c69a7fb4cc [file] [log] [blame]
Pierre Ossman82c7f312009-03-09 13:21:27 +00001/*
2 * simd/jsimd.h
3 *
4 * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
5 *
6 * Based on the x86 SIMD extension for IJG JPEG library,
7 * Copyright (C) 1999-2006, MIYASAKA Masaru.
8 *
9 */
10
11/* Bitmask for supported acceleration methods */
12
13#define JSIMD_NONE 0x00
Pierre Ossman3e0e2de2009-03-09 13:25:30 +000014#define JSIMD_MMX 0x01
Pierre Ossman82c7f312009-03-09 13:21:27 +000015
16/* Short forms of external names for systems with brain-damaged linkers. */
17
18#ifdef NEED_SHORT_EXTERNAL_NAMES
Pierre Ossman3e0e2de2009-03-09 13:25:30 +000019#define jpeg_simd_cpu_support jSiCpuSupport
20#define jsimd_rgb_ycc_convert_mmx jSRGBYCCM
21#define jsimd_ycc_rgb_convert_mmx jSYCCRGBM
22#define jsimd_h2v2_downsample_mmx jSDnH2V2M
23#define jsimd_h2v1_downsample_mmx jSDnH2V1M
24#define jsimd_h2v2_upsample_mmx jSUpH2V2M
25#define jsimd_h2v1_upsample_mmx jSUpH2V1M
26#define jsimd_h2v2_fancy_upsample_mmx jSFUpH2V2M
27#define jsimd_h2v1_fancy_upsample_mmx jSFUpH2V1M
28#define jsimd_h2v2_merged_upsample_mmx jSMUpH2V2M
29#define jsimd_h2v1_merged_upsample_mmx jSMUpH2V1M
30#define jsimd_convsamp_mmx jSConvM
31#define jsimd_fdct_islow_mmx jSFDMIS
32#define jsimd_fdct_ifast_mmx jSFDMIF
33#define jsimd_quantize_mmx jSQuantM
34#define jsimd_idct_2x2_mmx jSIDM22
35#define jsimd_idct_4x4_mmx jSIDM44
36#define jsimd_idct_islow_mmx jSIDMIS
37#define jsimd_idct_ifast_mmx jSIDMIF
Pierre Ossman82c7f312009-03-09 13:21:27 +000038#endif /* NEED_SHORT_EXTERNAL_NAMES */
39
40/* SIMD Ext: retrieve SIMD/CPU information */
41EXTERN(unsigned int) jpeg_simd_cpu_support JPP((void));
42
Pierre Ossman3e0e2de2009-03-09 13:25:30 +000043/* SIMD Color Space Conversion */
44EXTERN(void) jsimd_rgb_ycc_convert_mmx
45 JPP((JDIMENSION img_width,
46 JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
47 JDIMENSION output_row, int num_rows));
48EXTERN(void) jsimd_ycc_rgb_convert_mmx
49 JPP((JDIMENSION out_width,
50 JSAMPIMAGE input_buf, JDIMENSION input_row,
51 JSAMPARRAY output_buf, int num_rows));
52
53/* SIMD Downsample */
54EXTERN(void) jsimd_h2v2_downsample_mmx
55 JPP((JDIMENSION image_width, int max_v_samp_factor,
56 JDIMENSION v_samp_factor, JDIMENSION width_blocks,
57 JSAMPARRAY input_data, JSAMPARRAY output_data));
58EXTERN(void) jsimd_h2v1_downsample_mmx
59 JPP((JDIMENSION image_width, int max_v_samp_factor,
60 JDIMENSION v_samp_factor, JDIMENSION width_blocks,
61 JSAMPARRAY input_data, JSAMPARRAY output_data));
62
63/* SIMD Upsample */
64EXTERN(void) jsimd_h2v2_upsample_mmx
65 JPP((int max_v_samp_factor, JDIMENSION output_width,
66 JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr));
67EXTERN(void) jsimd_h2v1_upsample_mmx
68 JPP((int max_v_samp_factor, JDIMENSION output_width,
69 JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr));
70
71EXTERN(void) jsimd_h2v2_fancy_upsample_mmx
72 JPP((int max_v_samp_factor, JDIMENSION downsampled_width,
73 JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr));
74EXTERN(void) jsimd_h2v1_fancy_upsample_mmx
75 JPP((int max_v_samp_factor, JDIMENSION downsampled_width,
76 JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr));
77
78EXTERN(void) jsimd_h2v2_merged_upsample_mmx
79 JPP((JDIMENSION output_width, JSAMPIMAGE input_buf,
80 JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf));
81EXTERN(void) jsimd_h2v1_merged_upsample_mmx
82 JPP((JDIMENSION output_width, JSAMPIMAGE input_buf,
83 JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf));
84
85/* SIMD Sample Conversion */
86EXTERN(void) jsimd_convsamp_mmx JPP((JSAMPARRAY sample_data,
87 JDIMENSION start_col,
88 DCTELEM * workspace));
89
90/* SIMD Forward DCT */
91EXTERN(void) jsimd_fdct_islow_mmx JPP((DCTELEM * data));
92EXTERN(void) jsimd_fdct_ifast_mmx JPP((DCTELEM * data));
93
94/* SIMD Quantization */
95EXTERN(void) jsimd_quantize_mmx JPP((JCOEFPTR coef_block,
96 DCTELEM * divisors,
97 DCTELEM * workspace));
98
99/* SIMD Reduced Inverse DCT */
100EXTERN(void) jsimd_idct_2x2_mmx JPP((void * dct_table,
101 JCOEFPTR coef_block,
102 JSAMPARRAY output_buf,
103 JDIMENSION output_col));
104EXTERN(void) jsimd_idct_4x4_mmx JPP((void * dct_table,
105 JCOEFPTR coef_block,
106 JSAMPARRAY output_buf,
107 JDIMENSION output_col));
108
109/* SIMD Inverse DCT */
110EXTERN(void) jsimd_idct_islow_mmx JPP((void * dct_table,
111 JCOEFPTR coef_block,
112 JSAMPARRAY output_buf,
113 JDIMENSION output_col));
114EXTERN(void) jsimd_idct_ifast_mmx JPP((void * dct_table,
115 JCOEFPTR coef_block,
116 JSAMPARRAY output_buf,
117 JDIMENSION output_col));
118