OLD | NEW |
1 /* | 1 /* |
2 * jsimd_i386.c | 2 * jsimd_i386.c |
3 * | 3 * |
4 * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB | 4 * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB |
5 * Copyright 2009-2011 D. R. Commander | 5 * Copyright 2009-2011 D. R. Commander |
6 * | 6 * |
7 * Based on the x86 SIMD extension for IJG JPEG library, | 7 * Based on the x86 SIMD extension for IJG JPEG library, |
8 * Copyright (C) 1999-2006, MIYASAKA Masaru. | 8 * Copyright (C) 1999-2006, MIYASAKA Masaru. |
9 * For conditions of distribution and use, see copyright notice in jsimdext.inc | 9 * For conditions of distribution and use, see copyright notice in jsimdext.inc |
10 * | 10 * |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 void (*sse2fct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); | 135 void (*sse2fct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); |
136 void (*mmxfct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); | 136 void (*mmxfct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); |
137 | 137 |
138 switch(cinfo->in_color_space) | 138 switch(cinfo->in_color_space) |
139 { | 139 { |
140 case JCS_EXT_RGB: | 140 case JCS_EXT_RGB: |
141 sse2fct=jsimd_extrgb_ycc_convert_sse2; | 141 sse2fct=jsimd_extrgb_ycc_convert_sse2; |
142 mmxfct=jsimd_extrgb_ycc_convert_mmx; | 142 mmxfct=jsimd_extrgb_ycc_convert_mmx; |
143 break; | 143 break; |
144 case JCS_EXT_RGBX: | 144 case JCS_EXT_RGBX: |
| 145 case JCS_EXT_RGBA: |
145 sse2fct=jsimd_extrgbx_ycc_convert_sse2; | 146 sse2fct=jsimd_extrgbx_ycc_convert_sse2; |
146 mmxfct=jsimd_extrgbx_ycc_convert_mmx; | 147 mmxfct=jsimd_extrgbx_ycc_convert_mmx; |
147 break; | 148 break; |
148 case JCS_EXT_BGR: | 149 case JCS_EXT_BGR: |
149 sse2fct=jsimd_extbgr_ycc_convert_sse2; | 150 sse2fct=jsimd_extbgr_ycc_convert_sse2; |
150 mmxfct=jsimd_extbgr_ycc_convert_mmx; | 151 mmxfct=jsimd_extbgr_ycc_convert_mmx; |
151 break; | 152 break; |
152 case JCS_EXT_BGRX: | 153 case JCS_EXT_BGRX: |
| 154 case JCS_EXT_BGRA: |
153 sse2fct=jsimd_extbgrx_ycc_convert_sse2; | 155 sse2fct=jsimd_extbgrx_ycc_convert_sse2; |
154 mmxfct=jsimd_extbgrx_ycc_convert_mmx; | 156 mmxfct=jsimd_extbgrx_ycc_convert_mmx; |
155 break; | 157 break; |
156 case JCS_EXT_XBGR: | 158 case JCS_EXT_XBGR: |
| 159 case JCS_EXT_ABGR: |
157 sse2fct=jsimd_extxbgr_ycc_convert_sse2; | 160 sse2fct=jsimd_extxbgr_ycc_convert_sse2; |
158 mmxfct=jsimd_extxbgr_ycc_convert_mmx; | 161 mmxfct=jsimd_extxbgr_ycc_convert_mmx; |
159 break; | 162 break; |
160 case JCS_EXT_XRGB: | 163 case JCS_EXT_XRGB: |
| 164 case JCS_EXT_ARGB: |
161 sse2fct=jsimd_extxrgb_ycc_convert_sse2; | 165 sse2fct=jsimd_extxrgb_ycc_convert_sse2; |
162 mmxfct=jsimd_extxrgb_ycc_convert_mmx; | 166 mmxfct=jsimd_extxrgb_ycc_convert_mmx; |
163 break; | 167 break; |
164 default: | 168 default: |
165 sse2fct=jsimd_rgb_ycc_convert_sse2; | 169 sse2fct=jsimd_rgb_ycc_convert_sse2; |
166 mmxfct=jsimd_rgb_ycc_convert_mmx; | 170 mmxfct=jsimd_rgb_ycc_convert_mmx; |
167 break; | 171 break; |
168 } | 172 } |
169 | 173 |
170 if ((simd_support & JSIMD_SSE2) && | 174 if ((simd_support & JSIMD_SSE2) && |
(...skipping 13 matching lines...) Expand all Loading... |
184 void (*sse2fct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); | 188 void (*sse2fct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); |
185 void (*mmxfct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); | 189 void (*mmxfct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); |
186 | 190 |
187 switch(cinfo->in_color_space) | 191 switch(cinfo->in_color_space) |
188 { | 192 { |
189 case JCS_EXT_RGB: | 193 case JCS_EXT_RGB: |
190 sse2fct=jsimd_extrgb_gray_convert_sse2; | 194 sse2fct=jsimd_extrgb_gray_convert_sse2; |
191 mmxfct=jsimd_extrgb_gray_convert_mmx; | 195 mmxfct=jsimd_extrgb_gray_convert_mmx; |
192 break; | 196 break; |
193 case JCS_EXT_RGBX: | 197 case JCS_EXT_RGBX: |
| 198 case JCS_EXT_RGBA: |
194 sse2fct=jsimd_extrgbx_gray_convert_sse2; | 199 sse2fct=jsimd_extrgbx_gray_convert_sse2; |
195 mmxfct=jsimd_extrgbx_gray_convert_mmx; | 200 mmxfct=jsimd_extrgbx_gray_convert_mmx; |
196 break; | 201 break; |
197 case JCS_EXT_BGR: | 202 case JCS_EXT_BGR: |
198 sse2fct=jsimd_extbgr_gray_convert_sse2; | 203 sse2fct=jsimd_extbgr_gray_convert_sse2; |
199 mmxfct=jsimd_extbgr_gray_convert_mmx; | 204 mmxfct=jsimd_extbgr_gray_convert_mmx; |
200 break; | 205 break; |
201 case JCS_EXT_BGRX: | 206 case JCS_EXT_BGRX: |
| 207 case JCS_EXT_BGRA: |
202 sse2fct=jsimd_extbgrx_gray_convert_sse2; | 208 sse2fct=jsimd_extbgrx_gray_convert_sse2; |
203 mmxfct=jsimd_extbgrx_gray_convert_mmx; | 209 mmxfct=jsimd_extbgrx_gray_convert_mmx; |
204 break; | 210 break; |
205 case JCS_EXT_XBGR: | 211 case JCS_EXT_XBGR: |
| 212 case JCS_EXT_ABGR: |
206 sse2fct=jsimd_extxbgr_gray_convert_sse2; | 213 sse2fct=jsimd_extxbgr_gray_convert_sse2; |
207 mmxfct=jsimd_extxbgr_gray_convert_mmx; | 214 mmxfct=jsimd_extxbgr_gray_convert_mmx; |
208 break; | 215 break; |
209 case JCS_EXT_XRGB: | 216 case JCS_EXT_XRGB: |
| 217 case JCS_EXT_ARGB: |
210 sse2fct=jsimd_extxrgb_gray_convert_sse2; | 218 sse2fct=jsimd_extxrgb_gray_convert_sse2; |
211 mmxfct=jsimd_extxrgb_gray_convert_mmx; | 219 mmxfct=jsimd_extxrgb_gray_convert_mmx; |
212 break; | 220 break; |
213 default: | 221 default: |
214 sse2fct=jsimd_rgb_gray_convert_sse2; | 222 sse2fct=jsimd_rgb_gray_convert_sse2; |
215 mmxfct=jsimd_rgb_gray_convert_mmx; | 223 mmxfct=jsimd_rgb_gray_convert_mmx; |
216 break; | 224 break; |
217 } | 225 } |
218 | 226 |
219 if ((simd_support & JSIMD_SSE2) && | 227 if ((simd_support & JSIMD_SSE2) && |
(...skipping 13 matching lines...) Expand all Loading... |
233 void (*sse2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, int); | 241 void (*sse2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, int); |
234 void (*mmxfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, int); | 242 void (*mmxfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, int); |
235 | 243 |
236 switch(cinfo->out_color_space) | 244 switch(cinfo->out_color_space) |
237 { | 245 { |
238 case JCS_EXT_RGB: | 246 case JCS_EXT_RGB: |
239 sse2fct=jsimd_ycc_extrgb_convert_sse2; | 247 sse2fct=jsimd_ycc_extrgb_convert_sse2; |
240 mmxfct=jsimd_ycc_extrgb_convert_mmx; | 248 mmxfct=jsimd_ycc_extrgb_convert_mmx; |
241 break; | 249 break; |
242 case JCS_EXT_RGBX: | 250 case JCS_EXT_RGBX: |
| 251 case JCS_EXT_RGBA: |
243 sse2fct=jsimd_ycc_extrgbx_convert_sse2; | 252 sse2fct=jsimd_ycc_extrgbx_convert_sse2; |
244 mmxfct=jsimd_ycc_extrgbx_convert_mmx; | 253 mmxfct=jsimd_ycc_extrgbx_convert_mmx; |
245 break; | 254 break; |
246 case JCS_EXT_BGR: | 255 case JCS_EXT_BGR: |
247 sse2fct=jsimd_ycc_extbgr_convert_sse2; | 256 sse2fct=jsimd_ycc_extbgr_convert_sse2; |
248 mmxfct=jsimd_ycc_extbgr_convert_mmx; | 257 mmxfct=jsimd_ycc_extbgr_convert_mmx; |
249 break; | 258 break; |
250 case JCS_EXT_BGRX: | 259 case JCS_EXT_BGRX: |
| 260 case JCS_EXT_BGRA: |
251 sse2fct=jsimd_ycc_extbgrx_convert_sse2; | 261 sse2fct=jsimd_ycc_extbgrx_convert_sse2; |
252 mmxfct=jsimd_ycc_extbgrx_convert_mmx; | 262 mmxfct=jsimd_ycc_extbgrx_convert_mmx; |
253 break; | 263 break; |
254 case JCS_EXT_XBGR: | 264 case JCS_EXT_XBGR: |
| 265 case JCS_EXT_ABGR: |
255 sse2fct=jsimd_ycc_extxbgr_convert_sse2; | 266 sse2fct=jsimd_ycc_extxbgr_convert_sse2; |
256 mmxfct=jsimd_ycc_extxbgr_convert_mmx; | 267 mmxfct=jsimd_ycc_extxbgr_convert_mmx; |
257 break; | 268 break; |
258 case JCS_EXT_XRGB: | 269 case JCS_EXT_XRGB: |
| 270 case JCS_EXT_ARGB: |
259 sse2fct=jsimd_ycc_extxrgb_convert_sse2; | 271 sse2fct=jsimd_ycc_extxrgb_convert_sse2; |
260 mmxfct=jsimd_ycc_extxrgb_convert_mmx; | 272 mmxfct=jsimd_ycc_extxrgb_convert_mmx; |
261 break; | 273 break; |
262 default: | 274 default: |
263 sse2fct=jsimd_ycc_rgb_convert_sse2; | 275 sse2fct=jsimd_ycc_rgb_convert_sse2; |
264 mmxfct=jsimd_ycc_rgb_convert_mmx; | 276 mmxfct=jsimd_ycc_rgb_convert_mmx; |
265 break; | 277 break; |
266 } | 278 } |
267 | 279 |
268 if ((simd_support & JSIMD_SSE2) && | 280 if ((simd_support & JSIMD_SSE2) && |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 void (*sse2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); | 537 void (*sse2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); |
526 void (*mmxfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); | 538 void (*mmxfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); |
527 | 539 |
528 switch(cinfo->out_color_space) | 540 switch(cinfo->out_color_space) |
529 { | 541 { |
530 case JCS_EXT_RGB: | 542 case JCS_EXT_RGB: |
531 sse2fct=jsimd_h2v2_extrgb_merged_upsample_sse2; | 543 sse2fct=jsimd_h2v2_extrgb_merged_upsample_sse2; |
532 mmxfct=jsimd_h2v2_extrgb_merged_upsample_mmx; | 544 mmxfct=jsimd_h2v2_extrgb_merged_upsample_mmx; |
533 break; | 545 break; |
534 case JCS_EXT_RGBX: | 546 case JCS_EXT_RGBX: |
| 547 case JCS_EXT_RGBA: |
535 sse2fct=jsimd_h2v2_extrgbx_merged_upsample_sse2; | 548 sse2fct=jsimd_h2v2_extrgbx_merged_upsample_sse2; |
536 mmxfct=jsimd_h2v2_extrgbx_merged_upsample_mmx; | 549 mmxfct=jsimd_h2v2_extrgbx_merged_upsample_mmx; |
537 break; | 550 break; |
538 case JCS_EXT_BGR: | 551 case JCS_EXT_BGR: |
539 sse2fct=jsimd_h2v2_extbgr_merged_upsample_sse2; | 552 sse2fct=jsimd_h2v2_extbgr_merged_upsample_sse2; |
540 mmxfct=jsimd_h2v2_extbgr_merged_upsample_mmx; | 553 mmxfct=jsimd_h2v2_extbgr_merged_upsample_mmx; |
541 break; | 554 break; |
542 case JCS_EXT_BGRX: | 555 case JCS_EXT_BGRX: |
| 556 case JCS_EXT_BGRA: |
543 sse2fct=jsimd_h2v2_extbgrx_merged_upsample_sse2; | 557 sse2fct=jsimd_h2v2_extbgrx_merged_upsample_sse2; |
544 mmxfct=jsimd_h2v2_extbgrx_merged_upsample_mmx; | 558 mmxfct=jsimd_h2v2_extbgrx_merged_upsample_mmx; |
545 break; | 559 break; |
546 case JCS_EXT_XBGR: | 560 case JCS_EXT_XBGR: |
| 561 case JCS_EXT_ABGR: |
547 sse2fct=jsimd_h2v2_extxbgr_merged_upsample_sse2; | 562 sse2fct=jsimd_h2v2_extxbgr_merged_upsample_sse2; |
548 mmxfct=jsimd_h2v2_extxbgr_merged_upsample_mmx; | 563 mmxfct=jsimd_h2v2_extxbgr_merged_upsample_mmx; |
549 break; | 564 break; |
550 case JCS_EXT_XRGB: | 565 case JCS_EXT_XRGB: |
| 566 case JCS_EXT_ARGB: |
551 sse2fct=jsimd_h2v2_extxrgb_merged_upsample_sse2; | 567 sse2fct=jsimd_h2v2_extxrgb_merged_upsample_sse2; |
552 mmxfct=jsimd_h2v2_extxrgb_merged_upsample_mmx; | 568 mmxfct=jsimd_h2v2_extxrgb_merged_upsample_mmx; |
553 break; | 569 break; |
554 default: | 570 default: |
555 sse2fct=jsimd_h2v2_merged_upsample_sse2; | 571 sse2fct=jsimd_h2v2_merged_upsample_sse2; |
556 mmxfct=jsimd_h2v2_merged_upsample_mmx; | 572 mmxfct=jsimd_h2v2_merged_upsample_mmx; |
557 break; | 573 break; |
558 } | 574 } |
559 | 575 |
560 if ((simd_support & JSIMD_SSE2) && | 576 if ((simd_support & JSIMD_SSE2) && |
(...skipping 14 matching lines...) Expand all Loading... |
575 void (*sse2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); | 591 void (*sse2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); |
576 void (*mmxfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); | 592 void (*mmxfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); |
577 | 593 |
578 switch(cinfo->out_color_space) | 594 switch(cinfo->out_color_space) |
579 { | 595 { |
580 case JCS_EXT_RGB: | 596 case JCS_EXT_RGB: |
581 sse2fct=jsimd_h2v1_extrgb_merged_upsample_sse2; | 597 sse2fct=jsimd_h2v1_extrgb_merged_upsample_sse2; |
582 mmxfct=jsimd_h2v1_extrgb_merged_upsample_mmx; | 598 mmxfct=jsimd_h2v1_extrgb_merged_upsample_mmx; |
583 break; | 599 break; |
584 case JCS_EXT_RGBX: | 600 case JCS_EXT_RGBX: |
| 601 case JCS_EXT_RGBA: |
585 sse2fct=jsimd_h2v1_extrgbx_merged_upsample_sse2; | 602 sse2fct=jsimd_h2v1_extrgbx_merged_upsample_sse2; |
586 mmxfct=jsimd_h2v1_extrgbx_merged_upsample_mmx; | 603 mmxfct=jsimd_h2v1_extrgbx_merged_upsample_mmx; |
587 break; | 604 break; |
588 case JCS_EXT_BGR: | 605 case JCS_EXT_BGR: |
589 sse2fct=jsimd_h2v1_extbgr_merged_upsample_sse2; | 606 sse2fct=jsimd_h2v1_extbgr_merged_upsample_sse2; |
590 mmxfct=jsimd_h2v1_extbgr_merged_upsample_mmx; | 607 mmxfct=jsimd_h2v1_extbgr_merged_upsample_mmx; |
591 break; | 608 break; |
592 case JCS_EXT_BGRX: | 609 case JCS_EXT_BGRX: |
| 610 case JCS_EXT_BGRA: |
593 sse2fct=jsimd_h2v1_extbgrx_merged_upsample_sse2; | 611 sse2fct=jsimd_h2v1_extbgrx_merged_upsample_sse2; |
594 mmxfct=jsimd_h2v1_extbgrx_merged_upsample_mmx; | 612 mmxfct=jsimd_h2v1_extbgrx_merged_upsample_mmx; |
595 break; | 613 break; |
596 case JCS_EXT_XBGR: | 614 case JCS_EXT_XBGR: |
| 615 case JCS_EXT_ABGR: |
597 sse2fct=jsimd_h2v1_extxbgr_merged_upsample_sse2; | 616 sse2fct=jsimd_h2v1_extxbgr_merged_upsample_sse2; |
598 mmxfct=jsimd_h2v1_extxbgr_merged_upsample_mmx; | 617 mmxfct=jsimd_h2v1_extxbgr_merged_upsample_mmx; |
599 break; | 618 break; |
600 case JCS_EXT_XRGB: | 619 case JCS_EXT_XRGB: |
| 620 case JCS_EXT_ARGB: |
601 sse2fct=jsimd_h2v1_extxrgb_merged_upsample_sse2; | 621 sse2fct=jsimd_h2v1_extxrgb_merged_upsample_sse2; |
602 mmxfct=jsimd_h2v1_extxrgb_merged_upsample_mmx; | 622 mmxfct=jsimd_h2v1_extxrgb_merged_upsample_mmx; |
603 break; | 623 break; |
604 default: | 624 default: |
605 sse2fct=jsimd_h2v1_merged_upsample_sse2; | 625 sse2fct=jsimd_h2v1_merged_upsample_sse2; |
606 mmxfct=jsimd_h2v1_merged_upsample_mmx; | 626 mmxfct=jsimd_h2v1_merged_upsample_mmx; |
607 break; | 627 break; |
608 } | 628 } |
609 | 629 |
610 if ((simd_support & JSIMD_SSE2) && | 630 if ((simd_support & JSIMD_SSE2) && |
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1019 jsimd_idct_float_sse2(compptr->dct_table, coef_block, | 1039 jsimd_idct_float_sse2(compptr->dct_table, coef_block, |
1020 output_buf, output_col); | 1040 output_buf, output_col); |
1021 else if ((simd_support & JSIMD_SSE) && IS_ALIGNED_SSE(jconst_idct_float_sse)) | 1041 else if ((simd_support & JSIMD_SSE) && IS_ALIGNED_SSE(jconst_idct_float_sse)) |
1022 jsimd_idct_float_sse(compptr->dct_table, coef_block, | 1042 jsimd_idct_float_sse(compptr->dct_table, coef_block, |
1023 output_buf, output_col); | 1043 output_buf, output_col); |
1024 else if (simd_support & JSIMD_3DNOW) | 1044 else if (simd_support & JSIMD_3DNOW) |
1025 jsimd_idct_float_3dnow(compptr->dct_table, coef_block, | 1045 jsimd_idct_float_3dnow(compptr->dct_table, coef_block, |
1026 output_buf, output_col); | 1046 output_buf, output_col); |
1027 } | 1047 } |
1028 | 1048 |
OLD | NEW |