tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

jccolor-neon.c (4537B)


      1 /*
      2 * jccolor-neon.c - colorspace conversion (Arm Neon)
      3 *
      4 * Copyright (C) 2020, Arm Limited.  All Rights Reserved.
      5 * Copyright (C) 2020, D. R. Commander.  All Rights Reserved.
      6 *
      7 * This software is provided 'as-is', without any express or implied
      8 * warranty.  In no event will the authors be held liable for any damages
      9 * arising from the use of this software.
     10 *
     11 * Permission is granted to anyone to use this software for any purpose,
     12 * including commercial applications, and to alter it and redistribute it
     13 * freely, subject to the following restrictions:
     14 *
     15 * 1. The origin of this software must not be misrepresented; you must not
     16 *    claim that you wrote the original software. If you use this software
     17 *    in a product, an acknowledgment in the product documentation would be
     18 *    appreciated but is not required.
     19 * 2. Altered source versions must be plainly marked as such, and must not be
     20 *    misrepresented as being the original software.
     21 * 3. This notice may not be removed or altered from any source distribution.
     22 */
     23 
     24 #define JPEG_INTERNALS
     25 #include "../../jinclude.h"
     26 #include "../../jpeglib.h"
     27 #include "../../jsimd.h"
     28 #include "../../jdct.h"
     29 #include "../../jsimddct.h"
     30 #include "../jsimd.h"
     31 #include "align.h"
     32 #include "neon-compat.h"
     33 
     34 #include <arm_neon.h>
     35 
     36 
     37 /* RGB -> YCbCr conversion constants */
     38 
     39 #define F_0_298  19595
     40 #define F_0_587  38470
     41 #define F_0_113  7471
     42 #define F_0_168  11059
     43 #define F_0_331  21709
     44 #define F_0_500  32768
     45 #define F_0_418  27439
     46 #define F_0_081  5329
     47 
     48 ALIGN(16) static const uint16_t jsimd_rgb_ycc_neon_consts[] = {
     49  F_0_298, F_0_587, F_0_113, F_0_168,
     50  F_0_331, F_0_500, F_0_418, F_0_081
     51 };
     52 
     53 
     54 /* Include inline routines for colorspace extensions. */
     55 
     56 #if defined(__aarch64__) || defined(_M_ARM64)
     57 #include "aarch64/jccolext-neon.c"
     58 #else
     59 #include "aarch32/jccolext-neon.c"
     60 #endif
     61 #undef RGB_RED
     62 #undef RGB_GREEN
     63 #undef RGB_BLUE
     64 #undef RGB_PIXELSIZE
     65 
     66 #define RGB_RED  EXT_RGB_RED
     67 #define RGB_GREEN  EXT_RGB_GREEN
     68 #define RGB_BLUE  EXT_RGB_BLUE
     69 #define RGB_PIXELSIZE  EXT_RGB_PIXELSIZE
     70 #define jsimd_rgb_ycc_convert_neon  jsimd_extrgb_ycc_convert_neon
     71 #if defined(__aarch64__) || defined(_M_ARM64)
     72 #include "aarch64/jccolext-neon.c"
     73 #else
     74 #include "aarch32/jccolext-neon.c"
     75 #endif
     76 #undef RGB_RED
     77 #undef RGB_GREEN
     78 #undef RGB_BLUE
     79 #undef RGB_PIXELSIZE
     80 #undef jsimd_rgb_ycc_convert_neon
     81 
     82 #define RGB_RED  EXT_RGBX_RED
     83 #define RGB_GREEN  EXT_RGBX_GREEN
     84 #define RGB_BLUE  EXT_RGBX_BLUE
     85 #define RGB_PIXELSIZE  EXT_RGBX_PIXELSIZE
     86 #define jsimd_rgb_ycc_convert_neon  jsimd_extrgbx_ycc_convert_neon
     87 #if defined(__aarch64__) || defined(_M_ARM64)
     88 #include "aarch64/jccolext-neon.c"
     89 #else
     90 #include "aarch32/jccolext-neon.c"
     91 #endif
     92 #undef RGB_RED
     93 #undef RGB_GREEN
     94 #undef RGB_BLUE
     95 #undef RGB_PIXELSIZE
     96 #undef jsimd_rgb_ycc_convert_neon
     97 
     98 #define RGB_RED  EXT_BGR_RED
     99 #define RGB_GREEN  EXT_BGR_GREEN
    100 #define RGB_BLUE  EXT_BGR_BLUE
    101 #define RGB_PIXELSIZE  EXT_BGR_PIXELSIZE
    102 #define jsimd_rgb_ycc_convert_neon  jsimd_extbgr_ycc_convert_neon
    103 #if defined(__aarch64__) || defined(_M_ARM64)
    104 #include "aarch64/jccolext-neon.c"
    105 #else
    106 #include "aarch32/jccolext-neon.c"
    107 #endif
    108 #undef RGB_RED
    109 #undef RGB_GREEN
    110 #undef RGB_BLUE
    111 #undef RGB_PIXELSIZE
    112 #undef jsimd_rgb_ycc_convert_neon
    113 
    114 #define RGB_RED  EXT_BGRX_RED
    115 #define RGB_GREEN  EXT_BGRX_GREEN
    116 #define RGB_BLUE  EXT_BGRX_BLUE
    117 #define RGB_PIXELSIZE  EXT_BGRX_PIXELSIZE
    118 #define jsimd_rgb_ycc_convert_neon  jsimd_extbgrx_ycc_convert_neon
    119 #if defined(__aarch64__) || defined(_M_ARM64)
    120 #include "aarch64/jccolext-neon.c"
    121 #else
    122 #include "aarch32/jccolext-neon.c"
    123 #endif
    124 #undef RGB_RED
    125 #undef RGB_GREEN
    126 #undef RGB_BLUE
    127 #undef RGB_PIXELSIZE
    128 #undef jsimd_rgb_ycc_convert_neon
    129 
    130 #define RGB_RED  EXT_XBGR_RED
    131 #define RGB_GREEN  EXT_XBGR_GREEN
    132 #define RGB_BLUE  EXT_XBGR_BLUE
    133 #define RGB_PIXELSIZE  EXT_XBGR_PIXELSIZE
    134 #define jsimd_rgb_ycc_convert_neon  jsimd_extxbgr_ycc_convert_neon
    135 #if defined(__aarch64__) || defined(_M_ARM64)
    136 #include "aarch64/jccolext-neon.c"
    137 #else
    138 #include "aarch32/jccolext-neon.c"
    139 #endif
    140 #undef RGB_RED
    141 #undef RGB_GREEN
    142 #undef RGB_BLUE
    143 #undef RGB_PIXELSIZE
    144 #undef jsimd_rgb_ycc_convert_neon
    145 
    146 #define RGB_RED  EXT_XRGB_RED
    147 #define RGB_GREEN  EXT_XRGB_GREEN
    148 #define RGB_BLUE  EXT_XRGB_BLUE
    149 #define RGB_PIXELSIZE  EXT_XRGB_PIXELSIZE
    150 #define jsimd_rgb_ycc_convert_neon  jsimd_extxrgb_ycc_convert_neon
    151 #if defined(__aarch64__) || defined(_M_ARM64)
    152 #include "aarch64/jccolext-neon.c"
    153 #else
    154 #include "aarch32/jccolext-neon.c"
    155 #endif
    156 #undef RGB_RED
    157 #undef RGB_GREEN
    158 #undef RGB_BLUE
    159 #undef RGB_PIXELSIZE
    160 #undef jsimd_rgb_ycc_convert_neon