1 /* 2 * AltiVec optimizations for libjpeg-turbo 3 * 4 * Copyright (C) 2014, D. R. Commander. All Rights Reserved. 5 * 6 * This software is provided 'as-is', without any express or implied 7 * warranty. In no event will the authors be held liable for any damages 8 * arising from the use of this software. 9 * 10 * Permission is granted to anyone to use this software for any purpose, 11 * including commercial applications, and to alter it and redistribute it 12 * freely, subject to the following restrictions: 13 * 14 * 1. The origin of this software must not be misrepresented; you must not 15 * claim that you wrote the original software. If you use this software 16 * in a product, an acknowledgment in the product documentation would be 17 * appreciated but is not required. 18 * 2. Altered source versions must be plainly marked as such, and must not be 19 * misrepresented as being the original software. 20 * 3. This notice may not be removed or altered from any source distribution. 21 */ 22 23 /* RGB --> YCC CONVERSION */ 24 25 #include "jsimd_altivec.h" 26 27 28 #define F_0_081 5329 /* FIX(0.08131) */ 29 #define F_0_114 7471 /* FIX(0.11400) */ 30 #define F_0_168 11059 /* FIX(0.16874) */ 31 #define F_0_250 16384 /* FIX(0.25000) */ 32 #define F_0_299 19595 /* FIX(0.29900) */ 33 #define F_0_331 21709 /* FIX(0.33126) */ 34 #define F_0_418 27439 /* FIX(0.41869) */ 35 #define F_0_500 32768 /* FIX(0.50000) */ 36 #define F_0_587 38470 /* FIX(0.58700) */ 37 #define F_0_337 (F_0_587 - F_0_250) /* FIX(0.58700) - FIX(0.25000) */ 38 39 #define SCALEBITS 16 40 #define ONE_HALF (1 << (SCALEBITS - 1)) 41 42 43 #define RGBG_INDEX0 \ 44 { 0, 1, 3, 4, 6, 7, 9, 10, 2, 1, 5, 4, 8, 7, 11, 10 } 45 #define RGBG_INDEX1 \ 46 { 12, 13, 15, 16, 18, 19, 21, 22, 14, 13, 17, 16, 20, 19, 23, 22 } 47 #define RGBG_INDEX2 \ 48 { 8, 9, 11, 12, 14, 15, 17, 18, 10, 9, 13, 12, 16, 15, 19, 18 } 49 #define RGBG_INDEX3 \ 50 { 4, 5, 7, 8, 10, 11, 13, 14, 6, 5, 9, 8, 12, 11, 15, 14 } 51 #include "jccolext-altivec.c" 52 #undef RGB_PIXELSIZE 53 54 #define RGB_PIXELSIZE EXT_RGB_PIXELSIZE 55 #define jsimd_rgb_ycc_convert_altivec jsimd_extrgb_ycc_convert_altivec 56 #include "jccolext-altivec.c" 57 #undef RGB_PIXELSIZE 58 #undef RGBG_INDEX0 59 #undef RGBG_INDEX1 60 #undef RGBG_INDEX2 61 #undef RGBG_INDEX3 62 #undef jsimd_rgb_ycc_convert_altivec 63 64 #define RGB_PIXELSIZE EXT_RGBX_PIXELSIZE 65 #define RGBG_INDEX \ 66 { 0, 1, 4, 5, 8, 9, 12, 13, 2, 1, 6, 5, 10, 9, 14, 13 } 67 #define jsimd_rgb_ycc_convert_altivec jsimd_extrgbx_ycc_convert_altivec 68 #include "jccolext-altivec.c" 69 #undef RGB_PIXELSIZE 70 #undef RGBG_INDEX 71 #undef jsimd_rgb_ycc_convert_altivec 72 73 #define RGB_PIXELSIZE EXT_BGR_PIXELSIZE 74 #define RGBG_INDEX0 \ 75 { 2, 1, 5, 4, 8, 7, 11, 10, 0, 1, 3, 4, 6, 7, 9, 10 } 76 #define RGBG_INDEX1 \ 77 { 14, 13, 17, 16, 20, 19, 23, 22, 12, 13, 15, 16, 18, 19, 21, 22 } 78 #define RGBG_INDEX2 \ 79 { 10, 9, 13, 12, 16, 15, 19, 18, 8, 9, 11, 12, 14, 15, 17, 18 } 80 #define RGBG_INDEX3 \ 81 { 6, 5, 9, 8, 12, 11, 15, 14, 4, 5, 7, 8, 10, 11, 13, 14 } 82 #define jsimd_rgb_ycc_convert_altivec jsimd_extbgr_ycc_convert_altivec 83 #include "jccolext-altivec.c" 84 #undef RGB_PIXELSIZE 85 #undef RGBG_INDEX0 86 #undef RGBG_INDEX1 87 #undef RGBG_INDEX2 88 #undef RGBG_INDEX3 89 #undef jsimd_rgb_ycc_convert_altivec 90 91 #define RGB_PIXELSIZE EXT_BGRX_PIXELSIZE 92 #define RGBG_INDEX \ 93 { 2, 1, 6, 5, 10, 9, 14, 13, 0, 1, 4, 5, 8, 9, 12, 13 } 94 #define jsimd_rgb_ycc_convert_altivec jsimd_extbgrx_ycc_convert_altivec 95 #include "jccolext-altivec.c" 96 #undef RGB_PIXELSIZE 97 #undef RGBG_INDEX 98 #undef jsimd_rgb_ycc_convert_altivec 99 100 #define RGB_PIXELSIZE EXT_XBGR_PIXELSIZE 101 #define RGBG_INDEX \ 102 { 3, 2, 7, 6, 11, 10, 15, 14, 1, 2, 5, 6, 9, 10, 13, 14 } 103 #define jsimd_rgb_ycc_convert_altivec jsimd_extxbgr_ycc_convert_altivec 104 #include "jccolext-altivec.c" 105 #undef RGB_PIXELSIZE 106 #undef RGBG_INDEX 107 #undef jsimd_rgb_ycc_convert_altivec 108 109 #define RGB_PIXELSIZE EXT_XRGB_PIXELSIZE 110 #define RGBG_INDEX \ 111 { 1, 2, 5, 6, 9, 10, 13, 14, 3, 2, 7, 6, 11, 10, 15, 14 } 112 #define jsimd_rgb_ycc_convert_altivec jsimd_extxrgb_ycc_convert_altivec 113 #include "jccolext-altivec.c" 114 #undef RGB_PIXELSIZE 115 #undef RGBG_INDEX 116 #undef jsimd_rgb_ycc_convert_altivec 117