| 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 |