xref: /aosp_15_r20/external/libjpeg-turbo/simd/arm/jdmerge-neon.c (revision dfc6aa5c1cfd4bc4e2018dc74aa96e29ee49c6da)
1*dfc6aa5cSAndroid Build Coastguard Worker /*
2*dfc6aa5cSAndroid Build Coastguard Worker  * jdmerge-neon.c - merged upsampling/color conversion (Arm Neon)
3*dfc6aa5cSAndroid Build Coastguard Worker  *
4*dfc6aa5cSAndroid Build Coastguard Worker  * Copyright (C) 2020, Arm Limited.  All Rights Reserved.
5*dfc6aa5cSAndroid Build Coastguard Worker  *
6*dfc6aa5cSAndroid Build Coastguard Worker  * This software is provided 'as-is', without any express or implied
7*dfc6aa5cSAndroid Build Coastguard Worker  * warranty.  In no event will the authors be held liable for any damages
8*dfc6aa5cSAndroid Build Coastguard Worker  * arising from the use of this software.
9*dfc6aa5cSAndroid Build Coastguard Worker  *
10*dfc6aa5cSAndroid Build Coastguard Worker  * Permission is granted to anyone to use this software for any purpose,
11*dfc6aa5cSAndroid Build Coastguard Worker  * including commercial applications, and to alter it and redistribute it
12*dfc6aa5cSAndroid Build Coastguard Worker  * freely, subject to the following restrictions:
13*dfc6aa5cSAndroid Build Coastguard Worker  *
14*dfc6aa5cSAndroid Build Coastguard Worker  * 1. The origin of this software must not be misrepresented; you must not
15*dfc6aa5cSAndroid Build Coastguard Worker  *    claim that you wrote the original software. If you use this software
16*dfc6aa5cSAndroid Build Coastguard Worker  *    in a product, an acknowledgment in the product documentation would be
17*dfc6aa5cSAndroid Build Coastguard Worker  *    appreciated but is not required.
18*dfc6aa5cSAndroid Build Coastguard Worker  * 2. Altered source versions must be plainly marked as such, and must not be
19*dfc6aa5cSAndroid Build Coastguard Worker  *    misrepresented as being the original software.
20*dfc6aa5cSAndroid Build Coastguard Worker  * 3. This notice may not be removed or altered from any source distribution.
21*dfc6aa5cSAndroid Build Coastguard Worker  */
22*dfc6aa5cSAndroid Build Coastguard Worker 
23*dfc6aa5cSAndroid Build Coastguard Worker #define JPEG_INTERNALS
24*dfc6aa5cSAndroid Build Coastguard Worker #include "../../jinclude.h"
25*dfc6aa5cSAndroid Build Coastguard Worker #include "../../jpeglib.h"
26*dfc6aa5cSAndroid Build Coastguard Worker #include "../../jsimd.h"
27*dfc6aa5cSAndroid Build Coastguard Worker #include "../../jdct.h"
28*dfc6aa5cSAndroid Build Coastguard Worker #include "../../jsimddct.h"
29*dfc6aa5cSAndroid Build Coastguard Worker #include "../jsimd.h"
30*dfc6aa5cSAndroid Build Coastguard Worker #include "align.h"
31*dfc6aa5cSAndroid Build Coastguard Worker 
32*dfc6aa5cSAndroid Build Coastguard Worker #include <arm_neon.h>
33*dfc6aa5cSAndroid Build Coastguard Worker 
34*dfc6aa5cSAndroid Build Coastguard Worker 
35*dfc6aa5cSAndroid Build Coastguard Worker /* YCbCr -> RGB conversion constants */
36*dfc6aa5cSAndroid Build Coastguard Worker 
37*dfc6aa5cSAndroid Build Coastguard Worker #define F_0_344  11277  /* 0.3441467 = 11277 * 2^-15 */
38*dfc6aa5cSAndroid Build Coastguard Worker #define F_0_714  23401  /* 0.7141418 = 23401 * 2^-15 */
39*dfc6aa5cSAndroid Build Coastguard Worker #define F_1_402  22971  /* 1.4020386 = 22971 * 2^-14 */
40*dfc6aa5cSAndroid Build Coastguard Worker #define F_1_772  29033  /* 1.7720337 = 29033 * 2^-14 */
41*dfc6aa5cSAndroid Build Coastguard Worker 
42*dfc6aa5cSAndroid Build Coastguard Worker ALIGN(16) static const int16_t jsimd_ycc_rgb_convert_neon_consts[] = {
43*dfc6aa5cSAndroid Build Coastguard Worker   -F_0_344, F_0_714, F_1_402, F_1_772
44*dfc6aa5cSAndroid Build Coastguard Worker };
45*dfc6aa5cSAndroid Build Coastguard Worker 
46*dfc6aa5cSAndroid Build Coastguard Worker 
47*dfc6aa5cSAndroid Build Coastguard Worker /* Include inline routines for colorspace extensions. */
48*dfc6aa5cSAndroid Build Coastguard Worker 
49*dfc6aa5cSAndroid Build Coastguard Worker #include "jdmrgext-neon.c"
50*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_RED
51*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_GREEN
52*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_BLUE
53*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_PIXELSIZE
54*dfc6aa5cSAndroid Build Coastguard Worker 
55*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_RED  EXT_RGB_RED
56*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_GREEN  EXT_RGB_GREEN
57*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_BLUE  EXT_RGB_BLUE
58*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_PIXELSIZE  EXT_RGB_PIXELSIZE
59*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extrgb_merged_upsample_neon
60*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extrgb_merged_upsample_neon
61*dfc6aa5cSAndroid Build Coastguard Worker #include "jdmrgext-neon.c"
62*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_RED
63*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_GREEN
64*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_BLUE
65*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_PIXELSIZE
66*dfc6aa5cSAndroid Build Coastguard Worker #undef jsimd_h2v1_merged_upsample_neon
67*dfc6aa5cSAndroid Build Coastguard Worker #undef jsimd_h2v2_merged_upsample_neon
68*dfc6aa5cSAndroid Build Coastguard Worker 
69*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_RED  EXT_RGBX_RED
70*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_GREEN  EXT_RGBX_GREEN
71*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_BLUE  EXT_RGBX_BLUE
72*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_ALPHA  3
73*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_PIXELSIZE  EXT_RGBX_PIXELSIZE
74*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extrgbx_merged_upsample_neon
75*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extrgbx_merged_upsample_neon
76*dfc6aa5cSAndroid Build Coastguard Worker #include "jdmrgext-neon.c"
77*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_RED
78*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_GREEN
79*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_BLUE
80*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_ALPHA
81*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_PIXELSIZE
82*dfc6aa5cSAndroid Build Coastguard Worker #undef jsimd_h2v1_merged_upsample_neon
83*dfc6aa5cSAndroid Build Coastguard Worker #undef jsimd_h2v2_merged_upsample_neon
84*dfc6aa5cSAndroid Build Coastguard Worker 
85*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_RED  EXT_BGR_RED
86*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_GREEN  EXT_BGR_GREEN
87*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_BLUE  EXT_BGR_BLUE
88*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_PIXELSIZE  EXT_BGR_PIXELSIZE
89*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extbgr_merged_upsample_neon
90*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extbgr_merged_upsample_neon
91*dfc6aa5cSAndroid Build Coastguard Worker #include "jdmrgext-neon.c"
92*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_RED
93*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_GREEN
94*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_BLUE
95*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_PIXELSIZE
96*dfc6aa5cSAndroid Build Coastguard Worker #undef jsimd_h2v1_merged_upsample_neon
97*dfc6aa5cSAndroid Build Coastguard Worker #undef jsimd_h2v2_merged_upsample_neon
98*dfc6aa5cSAndroid Build Coastguard Worker 
99*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_RED  EXT_BGRX_RED
100*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_GREEN  EXT_BGRX_GREEN
101*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_BLUE  EXT_BGRX_BLUE
102*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_ALPHA  3
103*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_PIXELSIZE  EXT_BGRX_PIXELSIZE
104*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extbgrx_merged_upsample_neon
105*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extbgrx_merged_upsample_neon
106*dfc6aa5cSAndroid Build Coastguard Worker #include "jdmrgext-neon.c"
107*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_RED
108*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_GREEN
109*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_BLUE
110*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_ALPHA
111*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_PIXELSIZE
112*dfc6aa5cSAndroid Build Coastguard Worker #undef jsimd_h2v1_merged_upsample_neon
113*dfc6aa5cSAndroid Build Coastguard Worker #undef jsimd_h2v2_merged_upsample_neon
114*dfc6aa5cSAndroid Build Coastguard Worker 
115*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_RED  EXT_XBGR_RED
116*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_GREEN  EXT_XBGR_GREEN
117*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_BLUE  EXT_XBGR_BLUE
118*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_ALPHA  0
119*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_PIXELSIZE  EXT_XBGR_PIXELSIZE
120*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extxbgr_merged_upsample_neon
121*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extxbgr_merged_upsample_neon
122*dfc6aa5cSAndroid Build Coastguard Worker #include "jdmrgext-neon.c"
123*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_RED
124*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_GREEN
125*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_BLUE
126*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_ALPHA
127*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_PIXELSIZE
128*dfc6aa5cSAndroid Build Coastguard Worker #undef jsimd_h2v1_merged_upsample_neon
129*dfc6aa5cSAndroid Build Coastguard Worker #undef jsimd_h2v2_merged_upsample_neon
130*dfc6aa5cSAndroid Build Coastguard Worker 
131*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_RED  EXT_XRGB_RED
132*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_GREEN  EXT_XRGB_GREEN
133*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_BLUE  EXT_XRGB_BLUE
134*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_ALPHA  0
135*dfc6aa5cSAndroid Build Coastguard Worker #define RGB_PIXELSIZE  EXT_XRGB_PIXELSIZE
136*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extxrgb_merged_upsample_neon
137*dfc6aa5cSAndroid Build Coastguard Worker #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extxrgb_merged_upsample_neon
138*dfc6aa5cSAndroid Build Coastguard Worker #include "jdmrgext-neon.c"
139*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_RED
140*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_GREEN
141*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_BLUE
142*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_ALPHA
143*dfc6aa5cSAndroid Build Coastguard Worker #undef RGB_PIXELSIZE
144*dfc6aa5cSAndroid Build Coastguard Worker #undef jsimd_h2v1_merged_upsample_neon
145