xref: /aosp_15_r20/external/libjpeg-turbo/simd/nasm/jdct.inc (revision dfc6aa5c1cfd4bc4e2018dc74aa96e29ee49c6da)
1*dfc6aa5cSAndroid Build Coastguard Worker;
2*dfc6aa5cSAndroid Build Coastguard Worker; jdct.inc - private declarations for forward & reverse DCT subsystems
3*dfc6aa5cSAndroid Build Coastguard Worker;
4*dfc6aa5cSAndroid Build Coastguard Worker; Copyright 2009 Pierre Ossman <[email protected]> for Cendio AB
5*dfc6aa5cSAndroid Build Coastguard Worker; Copyright (C) 2018, D. R. Commander.
6*dfc6aa5cSAndroid Build Coastguard Worker;
7*dfc6aa5cSAndroid Build Coastguard Worker; Based on the x86 SIMD extension for IJG JPEG library
8*dfc6aa5cSAndroid Build Coastguard Worker; Copyright (C) 1999-2006, MIYASAKA Masaru.
9*dfc6aa5cSAndroid Build Coastguard Worker; For conditions of distribution and use, see copyright notice in jsimdext.inc
10*dfc6aa5cSAndroid Build Coastguard Worker
11*dfc6aa5cSAndroid Build Coastguard Worker; Each IDCT routine is responsible for range-limiting its results and
12*dfc6aa5cSAndroid Build Coastguard Worker; converting them to unsigned form (0..MAXJSAMPLE).  The raw outputs could
13*dfc6aa5cSAndroid Build Coastguard Worker; be quite far out of range if the input data is corrupt, so a bulletproof
14*dfc6aa5cSAndroid Build Coastguard Worker; range-limiting step is required.  We use a mask-and-table-lookup method
15*dfc6aa5cSAndroid Build Coastguard Worker; to do the combined operations quickly.
16*dfc6aa5cSAndroid Build Coastguard Worker;
17*dfc6aa5cSAndroid Build Coastguard Worker%define RANGE_MASK  (MAXJSAMPLE * 4 + 3)  ; 2 bits wider than legal samples
18*dfc6aa5cSAndroid Build Coastguard Worker
19*dfc6aa5cSAndroid Build Coastguard Worker%define ROW(n, b, s)  ((b) + (n) * (s))
20*dfc6aa5cSAndroid Build Coastguard Worker%define COL(n, b, s)  ((b) + (n) * (s) * DCTSIZE)
21*dfc6aa5cSAndroid Build Coastguard Worker
22*dfc6aa5cSAndroid Build Coastguard Worker%define DWBLOCK(m, n, b, s) \
23*dfc6aa5cSAndroid Build Coastguard Worker  ((b) + (m) * DCTSIZE * (s) + (n) * SIZEOF_DWORD)
24*dfc6aa5cSAndroid Build Coastguard Worker%define MMBLOCK(m, n, b, s) \
25*dfc6aa5cSAndroid Build Coastguard Worker  ((b) + (m) * DCTSIZE * (s) + (n) * SIZEOF_MMWORD)
26*dfc6aa5cSAndroid Build Coastguard Worker%define XMMBLOCK(m, n, b, s) \
27*dfc6aa5cSAndroid Build Coastguard Worker  ((b) + (m) * DCTSIZE * (s) + (n) * SIZEOF_XMMWORD)
28*dfc6aa5cSAndroid Build Coastguard Worker%define YMMBLOCK(m, n, b, s) \
29*dfc6aa5cSAndroid Build Coastguard Worker  ((b) + (m) * DCTSIZE * (s) + (n) * SIZEOF_YMMWORD)
30*dfc6aa5cSAndroid Build Coastguard Worker
31*dfc6aa5cSAndroid Build Coastguard Worker; --------------------------------------------------------------------------
32