1f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 2f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * jsimd_x86_64.c 3f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 4f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB 59862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * Copyright 2009-2011 D. R. Commander 6df5ffdd8b73415b78055177148995bdbdf38b12ehbono@chromium.org * 7f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Based on the x86 SIMD extension for IJG JPEG library, 8f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Copyright (C) 1999-2006, MIYASAKA Masaru. 99862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * For conditions of distribution and use, see copyright notice in jsimdext.inc 10f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 11f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * This file contains the interface between the "normal" portions 12f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * of the library and the SIMD implementations when running on a 13f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * x86_64 architecture. 14f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 15f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 16f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define JPEG_INTERNALS 17f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include "../jinclude.h" 18f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include "../jpeglib.h" 19f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include "../jsimd.h" 20f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include "../jdct.h" 21f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include "../jsimddct.h" 22f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include "jsimd.h" 23f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 24f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 25f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * In the PIC cases, we have no guarantee that constants will keep 26f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * their alignment. This macro allows us to verify it at runtime. 27f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 28f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define IS_ALIGNED(ptr, order) (((size_t)ptr & ((1 << order) - 1)) == 0) 29f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 30f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define IS_ALIGNED_SSE(ptr) (IS_ALIGNED(ptr, 4)) /* 16 byte alignment */ 31f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 321c3c7ffd1f4d6914024b069b1e4b4230dcce8d73fbarchard@chromium.org#ifndef JPEG_DECODE_ONLY 33f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 34f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_rgb_ycc (void) 35f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 36f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 37f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 38f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 39f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 40f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 41f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) 42f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 43f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 44f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_rgb_ycc_convert_sse2)) 45f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 46f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 47f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 48f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 491c3c7ffd1f4d6914024b069b1e4b4230dcce8d73fbarchard@chromium.org#endif 50f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 51f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 529862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.orgjsimd_can_rgb_gray (void) 539862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org{ 549862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org /* The code is optimised for these values only */ 559862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org if (BITS_IN_JSAMPLE != 8) 569862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org return 0; 579862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org if (sizeof(JDIMENSION) != 4) 589862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org return 0; 599862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) 609862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org return 0; 619862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 629862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org if (!IS_ALIGNED_SSE(jconst_rgb_gray_convert_sse2)) 639862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org return 0; 649862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 659862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org return 1; 669862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org} 679862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 689862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.orgGLOBAL(int) 69f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_ycc_rgb (void) 70f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 71f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 72f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 73f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 74f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 75f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 76f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) 77f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 78f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 79f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_ycc_rgb_convert_sse2)) 80f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 81f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 82f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 83f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 84f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 851c3c7ffd1f4d6914024b069b1e4b4230dcce8d73fbarchard@chromium.org#ifndef JPEG_DECODE_ONLY 86f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 87f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_rgb_ycc_convert (j_compress_ptr cinfo, 88f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY input_buf, JSAMPIMAGE output_buf, 89f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JDIMENSION output_row, int num_rows) 90f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 91f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org void (*sse2fct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); 92f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 93f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org switch(cinfo->in_color_space) 94f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org { 95f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_RGB: 96f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_extrgb_ycc_convert_sse2; 97f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 98f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_RGBX: 990ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_RGBA: 100f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_extrgbx_ycc_convert_sse2; 101f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 102f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_BGR: 103f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_extbgr_ycc_convert_sse2; 104f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 105f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_BGRX: 1060ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_BGRA: 107f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_extbgrx_ycc_convert_sse2; 108f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 109f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_XBGR: 1100ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_ABGR: 111f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_extxbgr_ycc_convert_sse2; 112f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 113f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_XRGB: 1140ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_ARGB: 115f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_extxrgb_ycc_convert_sse2; 116f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 117f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org default: 118f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_rgb_ycc_convert_sse2; 119f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 120f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org } 121f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 122f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows); 123f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 1241c3c7ffd1f4d6914024b069b1e4b4230dcce8d73fbarchard@chromium.org#endif 125f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 126f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 1279862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.orgjsimd_rgb_gray_convert (j_compress_ptr cinfo, 1289862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JSAMPARRAY input_buf, JSAMPIMAGE output_buf, 1299862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JDIMENSION output_row, int num_rows) 1309862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org{ 1319862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org void (*sse2fct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); 1329862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 1339862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org switch(cinfo->in_color_space) 1349862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org { 1359862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org case JCS_EXT_RGB: 1369862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org sse2fct=jsimd_extrgb_gray_convert_sse2; 1379862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org break; 1389862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org case JCS_EXT_RGBX: 1390ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_RGBA: 1409862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org sse2fct=jsimd_extrgbx_gray_convert_sse2; 1419862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org break; 1429862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org case JCS_EXT_BGR: 1439862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org sse2fct=jsimd_extbgr_gray_convert_sse2; 1449862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org break; 1459862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org case JCS_EXT_BGRX: 1460ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_BGRA: 1479862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org sse2fct=jsimd_extbgrx_gray_convert_sse2; 1489862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org break; 1499862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org case JCS_EXT_XBGR: 1500ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_ABGR: 1519862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org sse2fct=jsimd_extxbgr_gray_convert_sse2; 1529862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org break; 1539862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org case JCS_EXT_XRGB: 1540ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_ARGB: 1559862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org sse2fct=jsimd_extxrgb_gray_convert_sse2; 1569862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org break; 1579862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org default: 1589862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org sse2fct=jsimd_rgb_gray_convert_sse2; 1599862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org break; 1609862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org } 1619862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 1629862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org sse2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows); 1639862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org} 1649862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 1659862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.orgGLOBAL(void) 166f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_ycc_rgb_convert (j_decompress_ptr cinfo, 167f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPIMAGE input_buf, JDIMENSION input_row, 168f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY output_buf, int num_rows) 169f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 170f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org void (*sse2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, int); 171f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 172f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org switch(cinfo->out_color_space) 173f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org { 174f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_RGB: 175f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_ycc_extrgb_convert_sse2; 176f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 177f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_RGBX: 1780ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_RGBA: 179f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_ycc_extrgbx_convert_sse2; 180f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 181f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_BGR: 182f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_ycc_extbgr_convert_sse2; 183f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 184f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_BGRX: 1850ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_BGRA: 186f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_ycc_extbgrx_convert_sse2; 187f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 188f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_XBGR: 1890ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_ABGR: 190f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_ycc_extxbgr_convert_sse2; 191f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 192f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_XRGB: 1930ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_ARGB: 194f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_ycc_extxrgb_convert_sse2; 195f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 196f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org default: 197f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_ycc_rgb_convert_sse2; 198f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 199f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org } 200f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 201f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct(cinfo->output_width, input_buf, input_row, output_buf, num_rows); 202f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 203f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 2041c3c7ffd1f4d6914024b069b1e4b4230dcce8d73fbarchard@chromium.org#ifndef JPEG_DECODE_ONLY 205f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 206f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_h2v2_downsample (void) 207f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 208f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 209f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 210f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 211f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 212f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 213f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 214f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 215f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 216f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 217f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 218f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_h2v1_downsample (void) 219f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 220f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 221f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 222f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 223f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 224f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 225f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 226f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 227f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 228f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 229f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 230f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, 231f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY input_data, JSAMPARRAY output_data) 232f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 233f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_h2v2_downsample_sse2(cinfo->image_width, 234f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org cinfo->max_v_samp_factor, 235f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org compptr->v_samp_factor, 236f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org compptr->width_in_blocks, 237f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org input_data, output_data); 238f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 239f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 240f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 241f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, 242f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY input_data, JSAMPARRAY output_data) 243f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 244f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_h2v1_downsample_sse2(cinfo->image_width, 245f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org cinfo->max_v_samp_factor, 246f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org compptr->v_samp_factor, 247f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org compptr->width_in_blocks, 248f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org input_data, output_data); 249f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 2501c3c7ffd1f4d6914024b069b1e4b4230dcce8d73fbarchard@chromium.org#endif 251f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 252f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 253f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_h2v2_upsample (void) 254f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 255f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 256f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 257f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 258f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 259f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 260f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 261f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 262f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 263f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 264f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 265f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_h2v1_upsample (void) 266f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 267f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 268f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 269f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 270f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 271f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 272f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 273f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 274f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 275f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 276f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 277f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_h2v2_upsample (j_decompress_ptr cinfo, 278df5ffdd8b73415b78055177148995bdbdf38b12ehbono@chromium.org jpeg_component_info * compptr, 279f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY input_data, 280f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY * output_data_ptr) 281f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 282f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_h2v2_upsample_sse2(cinfo->max_v_samp_factor, 283f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org cinfo->output_width, 284f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org input_data, output_data_ptr); 285f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 286f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 287f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 288f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_h2v1_upsample (j_decompress_ptr cinfo, 289df5ffdd8b73415b78055177148995bdbdf38b12ehbono@chromium.org jpeg_component_info * compptr, 290f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY input_data, 291f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY * output_data_ptr) 292f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 293f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_h2v1_upsample_sse2(cinfo->max_v_samp_factor, 294f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org cinfo->output_width, 295f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org input_data, output_data_ptr); 296f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 297f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 298f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 299f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_h2v2_fancy_upsample (void) 300f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 301f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 302f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 303f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 304f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 305f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 306f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 307f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_fancy_upsample_sse2)) 308f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 309f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 310f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 311f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 312f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 313f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 314f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_h2v1_fancy_upsample (void) 315f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 316f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 317f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 318f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 319f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 320f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 321f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 322f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_fancy_upsample_sse2)) 323f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 324f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 325f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 326f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 327f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 328f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 329f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_h2v2_fancy_upsample (j_decompress_ptr cinfo, 330df5ffdd8b73415b78055177148995bdbdf38b12ehbono@chromium.org jpeg_component_info * compptr, 331f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY input_data, 332f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY * output_data_ptr) 333f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 334f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_h2v2_fancy_upsample_sse2(cinfo->max_v_samp_factor, 335f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org compptr->downsampled_width, 336f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org input_data, output_data_ptr); 337f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 338f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 339f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 340f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_h2v1_fancy_upsample (j_decompress_ptr cinfo, 341df5ffdd8b73415b78055177148995bdbdf38b12ehbono@chromium.org jpeg_component_info * compptr, 342f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY input_data, 343f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY * output_data_ptr) 344f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 345f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_h2v1_fancy_upsample_sse2(cinfo->max_v_samp_factor, 346f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org compptr->downsampled_width, 347f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org input_data, output_data_ptr); 348f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 349f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 350f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 351f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_h2v2_merged_upsample (void) 352f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 353f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 354f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 355f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 356f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 357f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 358f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 359f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_merged_upsample_sse2)) 360f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 361f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 362f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 363f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 364f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 365f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 366f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_h2v1_merged_upsample (void) 367f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 368f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 369f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 370f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 371f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 372f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 373f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 374f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_merged_upsample_sse2)) 375f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 376f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 377f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 378f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 379f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 380f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 381f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_h2v2_merged_upsample (j_decompress_ptr cinfo, 382f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPIMAGE input_buf, 383f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JDIMENSION in_row_group_ctr, 384f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY output_buf) 385f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 386f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org void (*sse2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); 387f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 388f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org switch(cinfo->out_color_space) 389f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org { 390f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_RGB: 391f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v2_extrgb_merged_upsample_sse2; 392f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 393f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_RGBX: 3940ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_RGBA: 395f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v2_extrgbx_merged_upsample_sse2; 396f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 397f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_BGR: 398f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v2_extbgr_merged_upsample_sse2; 399f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 400f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_BGRX: 4010ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_BGRA: 402f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v2_extbgrx_merged_upsample_sse2; 403f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 404f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_XBGR: 4050ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_ABGR: 406f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v2_extxbgr_merged_upsample_sse2; 407f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 408f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_XRGB: 4090ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_ARGB: 410f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v2_extxrgb_merged_upsample_sse2; 411f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 412f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org default: 413f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v2_merged_upsample_sse2; 414f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 415f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org } 416f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 417f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf); 418f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 419f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 420f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 421f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_h2v1_merged_upsample (j_decompress_ptr cinfo, 422f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPIMAGE input_buf, 423f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JDIMENSION in_row_group_ctr, 424f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JSAMPARRAY output_buf) 425f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 426f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org void (*sse2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); 427f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 428f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org switch(cinfo->out_color_space) 429f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org { 430f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_RGB: 431f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v1_extrgb_merged_upsample_sse2; 432f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 433f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_RGBX: 4340ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_RGBA: 435f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v1_extrgbx_merged_upsample_sse2; 436f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 437f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_BGR: 438f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v1_extbgr_merged_upsample_sse2; 439f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 440f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_BGRX: 4410ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_BGRA: 442f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v1_extbgrx_merged_upsample_sse2; 443f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 444f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_XBGR: 4450ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_ABGR: 446f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v1_extxbgr_merged_upsample_sse2; 447f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 448f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org case JCS_EXT_XRGB: 4490ec930ec950c94f0319d5b94a201b7e61ef15130hbono@chromium.org case JCS_EXT_ARGB: 450f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v1_extxrgb_merged_upsample_sse2; 451f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 452f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org default: 453f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct=jsimd_h2v1_merged_upsample_sse2; 454f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 455f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org } 456f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 457f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sse2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf); 458f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 459f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 4601c3c7ffd1f4d6914024b069b1e4b4230dcce8d73fbarchard@chromium.org#ifndef JPEG_DECODE_ONLY 461f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 462f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_convsamp (void) 463f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 464f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 465f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 466f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 467f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 468f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 469f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 470f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 471f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(DCTELEM) != 2) 472f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 473f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 474f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 475f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 476f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 477f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 478f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_convsamp_float (void) 479f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 480f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 481f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 482f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 483f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 484f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 485f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 486f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 487f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(FAST_FLOAT) != 4) 488f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 489f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 490f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 491f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 492f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 493f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 494f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_convsamp (JSAMPARRAY sample_data, JDIMENSION start_col, 495f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org DCTELEM * workspace) 496f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 497f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_convsamp_sse2(sample_data, start_col, workspace); 498f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 499f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 500f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 501f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_convsamp_float (JSAMPARRAY sample_data, JDIMENSION start_col, 502f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org FAST_FLOAT * workspace) 503f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 504f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_convsamp_float_sse2(sample_data, start_col, workspace); 505f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 506f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 507f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 508f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_fdct_islow (void) 509f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 510f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 511f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 512f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 513f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(DCTELEM) != 2) 514f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 515f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 516f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_fdct_islow_sse2)) 517f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 518f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 519f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 520f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 521f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 522f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 523f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_fdct_ifast (void) 524f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 525f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 526f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 527f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 528f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(DCTELEM) != 2) 529f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 530f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 531f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_fdct_ifast_sse2)) 532f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 533f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 534f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 535f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 536f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 537f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 538f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_fdct_float (void) 539f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 540f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 541f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 542f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 543f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(FAST_FLOAT) != 4) 544f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 545f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 546f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_fdct_float_sse)) 547f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 548f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 549f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 550f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 551f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 552f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 553f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_fdct_islow (DCTELEM * data) 554f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 555f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_fdct_islow_sse2(data); 556f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 557f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 558f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 559f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_fdct_ifast (DCTELEM * data) 560f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 561f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_fdct_ifast_sse2(data); 562f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 563f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 564f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 565f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_fdct_float (FAST_FLOAT * data) 566f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 567f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_fdct_float_sse(data); 568f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 569f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 570f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 571f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_quantize (void) 572f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 573f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 574f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 575f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 576f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JCOEF) != 2) 577f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 578f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(DCTELEM) != 2) 579f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 580f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 581f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 582f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 583f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 584f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 585f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_quantize_float (void) 586f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 587f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 588f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 589f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 590f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JCOEF) != 2) 591f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 592f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(FAST_FLOAT) != 4) 593f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 594f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 595f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 596f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 597f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 598f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 599f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_quantize (JCOEFPTR coef_block, DCTELEM * divisors, 600f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org DCTELEM * workspace) 601f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 602f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_quantize_sse2(coef_block, divisors, workspace); 603f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 604f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 605f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 606f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_quantize_float (JCOEFPTR coef_block, FAST_FLOAT * divisors, 607f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org FAST_FLOAT * workspace) 608f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 609f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_quantize_float_sse2(coef_block, divisors, workspace); 610f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 6111c3c7ffd1f4d6914024b069b1e4b4230dcce8d73fbarchard@chromium.org#endif 612f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 613f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 614f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_idct_2x2 (void) 615f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 616f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 617f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 618f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 619f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JCOEF) != 2) 620f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 621f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 622f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 623f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 624f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 625f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(ISLOW_MULT_TYPE) != 2) 626f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 627f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 628f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_idct_red_sse2)) 629f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 630f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 631f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 632f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 633f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 634f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 635f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_idct_4x4 (void) 636f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 637f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 638f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 639f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 640f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JCOEF) != 2) 641f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 642f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 643f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 644f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 645f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 646f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(ISLOW_MULT_TYPE) != 2) 647f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 648f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 649f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_idct_red_sse2)) 650f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 651f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 652f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 653f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 654f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 655f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 656f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, 657f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JCOEFPTR coef_block, JSAMPARRAY output_buf, 658f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JDIMENSION output_col) 659f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 660f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_idct_2x2_sse2(compptr->dct_table, coef_block, output_buf, output_col); 661f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 662f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 663f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 664f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, 665f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JCOEFPTR coef_block, JSAMPARRAY output_buf, 666f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JDIMENSION output_col) 667f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 668f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_idct_4x4_sse2(compptr->dct_table, coef_block, output_buf, output_col); 669f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 670f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 671f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 672f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_idct_islow (void) 673f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 674f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 675f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 676f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 677f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JCOEF) != 2) 678f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 679f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 680f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 681f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 682f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 683f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(ISLOW_MULT_TYPE) != 2) 684f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 685f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 686f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_idct_islow_sse2)) 687f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 688f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 689f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 690f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 691f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 692f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 693f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_idct_ifast (void) 694f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 695f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* The code is optimised for these values only */ 696f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 697f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 698f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JCOEF) != 2) 699f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 700f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 701f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 702f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 703f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 704f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(IFAST_MULT_TYPE) != 2) 705f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 706f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (IFAST_SCALE_BITS != 2) 707f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 708f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 709f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_idct_ifast_sse2)) 710f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 711f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 712f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 713f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 714f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 715f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(int) 716f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_can_idct_float (void) 717f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 718f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (DCTSIZE != 8) 719f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 720f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JCOEF) != 2) 721f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 722f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (BITS_IN_JSAMPLE != 8) 723f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 724f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(JDIMENSION) != 4) 725f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 726f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(FAST_FLOAT) != 4) 727f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 728f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (sizeof(FLOAT_MULT_TYPE) != 4) 729f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 730f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 731f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (!IS_ALIGNED_SSE(jconst_idct_float_sse2)) 732f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 0; 733f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 734f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return 1; 735f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 736f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 737f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 738f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, 739f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JCOEFPTR coef_block, JSAMPARRAY output_buf, 740f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JDIMENSION output_col) 741f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 742f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_idct_islow_sse2(compptr->dct_table, coef_block, output_buf, output_col); 743f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 744f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 745f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 746f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr, 747f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JCOEFPTR coef_block, JSAMPARRAY output_buf, 748f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JDIMENSION output_col) 749f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 750f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_idct_ifast_sse2(compptr->dct_table, coef_block, output_buf, output_col); 751f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 752f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 753f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(void) 754f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjsimd_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr, 755f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JCOEFPTR coef_block, JSAMPARRAY output_buf, 756f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JDIMENSION output_col) 757f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 758f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jsimd_idct_float_sse2(compptr->dct_table, coef_block, 759f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org output_buf, output_col); 760f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 761