xref: /aosp_15_r20/external/libdav1d/src/scan.c (revision c09093415860a1c2373dacd84c4fde00c507cdfd)
1*c0909341SAndroid Build Coastguard Worker /*
2*c0909341SAndroid Build Coastguard Worker  * Copyright © 2018, VideoLAN and dav1d authors
3*c0909341SAndroid Build Coastguard Worker  * Copyright © 2018, Two Orioles, LLC
4*c0909341SAndroid Build Coastguard Worker  * All rights reserved.
5*c0909341SAndroid Build Coastguard Worker  *
6*c0909341SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
7*c0909341SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions are met:
8*c0909341SAndroid Build Coastguard Worker  *
9*c0909341SAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright notice, this
10*c0909341SAndroid Build Coastguard Worker  *    list of conditions and the following disclaimer.
11*c0909341SAndroid Build Coastguard Worker  *
12*c0909341SAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright notice,
13*c0909341SAndroid Build Coastguard Worker  *    this list of conditions and the following disclaimer in the documentation
14*c0909341SAndroid Build Coastguard Worker  *    and/or other materials provided with the distribution.
15*c0909341SAndroid Build Coastguard Worker  *
16*c0909341SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17*c0909341SAndroid Build Coastguard Worker  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18*c0909341SAndroid Build Coastguard Worker  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19*c0909341SAndroid Build Coastguard Worker  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20*c0909341SAndroid Build Coastguard Worker  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21*c0909341SAndroid Build Coastguard Worker  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22*c0909341SAndroid Build Coastguard Worker  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23*c0909341SAndroid Build Coastguard Worker  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24*c0909341SAndroid Build Coastguard Worker  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25*c0909341SAndroid Build Coastguard Worker  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*c0909341SAndroid Build Coastguard Worker  */
27*c0909341SAndroid Build Coastguard Worker 
28*c0909341SAndroid Build Coastguard Worker #include "config.h"
29*c0909341SAndroid Build Coastguard Worker 
30*c0909341SAndroid Build Coastguard Worker #include "common/attributes.h"
31*c0909341SAndroid Build Coastguard Worker #include "common/intops.h"
32*c0909341SAndroid Build Coastguard Worker 
33*c0909341SAndroid Build Coastguard Worker #include "src/scan.h"
34*c0909341SAndroid Build Coastguard Worker #include "src/thread.h"
35*c0909341SAndroid Build Coastguard Worker 
36*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_4x4[], 32) = {
37*c0909341SAndroid Build Coastguard Worker      0,  4,  1,  2,
38*c0909341SAndroid Build Coastguard Worker      5,  8, 12,  9,
39*c0909341SAndroid Build Coastguard Worker      6,  3,  7, 10,
40*c0909341SAndroid Build Coastguard Worker     13, 14, 11, 15,
41*c0909341SAndroid Build Coastguard Worker };
42*c0909341SAndroid Build Coastguard Worker 
43*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_4x8[], 32) = {
44*c0909341SAndroid Build Coastguard Worker      0,  8,  1, 16,
45*c0909341SAndroid Build Coastguard Worker      9,  2, 24, 17,
46*c0909341SAndroid Build Coastguard Worker     10,  3, 25, 18,
47*c0909341SAndroid Build Coastguard Worker     11,  4, 26, 19,
48*c0909341SAndroid Build Coastguard Worker     12,  5, 27, 20,
49*c0909341SAndroid Build Coastguard Worker     13,  6, 28, 21,
50*c0909341SAndroid Build Coastguard Worker     14,  7, 29, 22,
51*c0909341SAndroid Build Coastguard Worker     15, 30, 23, 31,
52*c0909341SAndroid Build Coastguard Worker };
53*c0909341SAndroid Build Coastguard Worker 
54*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_4x16[], 32) = {
55*c0909341SAndroid Build Coastguard Worker      0, 16,  1, 32,
56*c0909341SAndroid Build Coastguard Worker     17,  2, 48, 33,
57*c0909341SAndroid Build Coastguard Worker     18,  3, 49, 34,
58*c0909341SAndroid Build Coastguard Worker     19,  4, 50, 35,
59*c0909341SAndroid Build Coastguard Worker     20,  5, 51, 36,
60*c0909341SAndroid Build Coastguard Worker     21,  6, 52, 37,
61*c0909341SAndroid Build Coastguard Worker     22,  7, 53, 38,
62*c0909341SAndroid Build Coastguard Worker     23,  8, 54, 39,
63*c0909341SAndroid Build Coastguard Worker     24,  9, 55, 40,
64*c0909341SAndroid Build Coastguard Worker     25, 10, 56, 41,
65*c0909341SAndroid Build Coastguard Worker     26, 11, 57, 42,
66*c0909341SAndroid Build Coastguard Worker     27, 12, 58, 43,
67*c0909341SAndroid Build Coastguard Worker     28, 13, 59, 44,
68*c0909341SAndroid Build Coastguard Worker     29, 14, 60, 45,
69*c0909341SAndroid Build Coastguard Worker     30, 15, 61, 46,
70*c0909341SAndroid Build Coastguard Worker     31, 62, 47, 63,
71*c0909341SAndroid Build Coastguard Worker };
72*c0909341SAndroid Build Coastguard Worker 
73*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_8x4[], 32) = {
74*c0909341SAndroid Build Coastguard Worker      0,  1,  4,  2,  5,  8,  3,  6,
75*c0909341SAndroid Build Coastguard Worker      9, 12,  7, 10, 13, 16, 11, 14,
76*c0909341SAndroid Build Coastguard Worker     17, 20, 15, 18, 21, 24, 19, 22,
77*c0909341SAndroid Build Coastguard Worker     25, 28, 23, 26, 29, 27, 30, 31,
78*c0909341SAndroid Build Coastguard Worker };
79*c0909341SAndroid Build Coastguard Worker 
80*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_8x8[], 32) = {
81*c0909341SAndroid Build Coastguard Worker      0,  8,  1,  2,  9, 16, 24, 17,
82*c0909341SAndroid Build Coastguard Worker     10,  3,  4, 11, 18, 25, 32, 40,
83*c0909341SAndroid Build Coastguard Worker     33, 26, 19, 12,  5,  6, 13, 20,
84*c0909341SAndroid Build Coastguard Worker     27, 34, 41, 48, 56, 49, 42, 35,
85*c0909341SAndroid Build Coastguard Worker     28, 21, 14,  7, 15, 22, 29, 36,
86*c0909341SAndroid Build Coastguard Worker     43, 50, 57, 58, 51, 44, 37, 30,
87*c0909341SAndroid Build Coastguard Worker     23, 31, 38, 45, 52, 59, 60, 53,
88*c0909341SAndroid Build Coastguard Worker     46, 39, 47, 54, 61, 62, 55, 63,
89*c0909341SAndroid Build Coastguard Worker };
90*c0909341SAndroid Build Coastguard Worker 
91*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_8x16[], 32) = {
92*c0909341SAndroid Build Coastguard Worker       0,  16,   1,  32,  17,   2,  48,  33,
93*c0909341SAndroid Build Coastguard Worker      18,   3,  64,  49,  34,  19,   4,  80,
94*c0909341SAndroid Build Coastguard Worker      65,  50,  35,  20,   5,  96,  81,  66,
95*c0909341SAndroid Build Coastguard Worker      51,  36,  21,   6, 112,  97,  82,  67,
96*c0909341SAndroid Build Coastguard Worker      52,  37,  22,   7, 113,  98,  83,  68,
97*c0909341SAndroid Build Coastguard Worker      53,  38,  23,   8, 114,  99,  84,  69,
98*c0909341SAndroid Build Coastguard Worker      54,  39,  24,   9, 115, 100,  85,  70,
99*c0909341SAndroid Build Coastguard Worker      55,  40,  25,  10, 116, 101,  86,  71,
100*c0909341SAndroid Build Coastguard Worker      56,  41,  26,  11, 117, 102,  87,  72,
101*c0909341SAndroid Build Coastguard Worker      57,  42,  27,  12, 118, 103,  88,  73,
102*c0909341SAndroid Build Coastguard Worker      58,  43,  28,  13, 119, 104,  89,  74,
103*c0909341SAndroid Build Coastguard Worker      59,  44,  29,  14, 120, 105,  90,  75,
104*c0909341SAndroid Build Coastguard Worker      60,  45,  30,  15, 121, 106,  91,  76,
105*c0909341SAndroid Build Coastguard Worker      61,  46,  31, 122, 107,  92,  77,  62,
106*c0909341SAndroid Build Coastguard Worker      47, 123, 108,  93,  78,  63, 124, 109,
107*c0909341SAndroid Build Coastguard Worker      94,  79, 125, 110,  95, 126, 111, 127,
108*c0909341SAndroid Build Coastguard Worker };
109*c0909341SAndroid Build Coastguard Worker 
110*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_8x32[], 32) = {
111*c0909341SAndroid Build Coastguard Worker       0,  32,   1,  64,  33,   2,  96,  65,
112*c0909341SAndroid Build Coastguard Worker      34,   3, 128,  97,  66,  35,   4, 160,
113*c0909341SAndroid Build Coastguard Worker     129,  98,  67,  36,   5, 192, 161, 130,
114*c0909341SAndroid Build Coastguard Worker      99,  68,  37,   6, 224, 193, 162, 131,
115*c0909341SAndroid Build Coastguard Worker     100,  69,  38,   7, 225, 194, 163, 132,
116*c0909341SAndroid Build Coastguard Worker     101,  70,  39,   8, 226, 195, 164, 133,
117*c0909341SAndroid Build Coastguard Worker     102,  71,  40,   9, 227, 196, 165, 134,
118*c0909341SAndroid Build Coastguard Worker     103,  72,  41,  10, 228, 197, 166, 135,
119*c0909341SAndroid Build Coastguard Worker     104,  73,  42,  11, 229, 198, 167, 136,
120*c0909341SAndroid Build Coastguard Worker     105,  74,  43,  12, 230, 199, 168, 137,
121*c0909341SAndroid Build Coastguard Worker     106,  75,  44,  13, 231, 200, 169, 138,
122*c0909341SAndroid Build Coastguard Worker     107,  76,  45,  14, 232, 201, 170, 139,
123*c0909341SAndroid Build Coastguard Worker     108,  77,  46,  15, 233, 202, 171, 140,
124*c0909341SAndroid Build Coastguard Worker     109,  78,  47,  16, 234, 203, 172, 141,
125*c0909341SAndroid Build Coastguard Worker     110,  79,  48,  17, 235, 204, 173, 142,
126*c0909341SAndroid Build Coastguard Worker     111,  80,  49,  18, 236, 205, 174, 143,
127*c0909341SAndroid Build Coastguard Worker     112,  81,  50,  19, 237, 206, 175, 144,
128*c0909341SAndroid Build Coastguard Worker     113,  82,  51,  20, 238, 207, 176, 145,
129*c0909341SAndroid Build Coastguard Worker     114,  83,  52,  21, 239, 208, 177, 146,
130*c0909341SAndroid Build Coastguard Worker     115,  84,  53,  22, 240, 209, 178, 147,
131*c0909341SAndroid Build Coastguard Worker     116,  85,  54,  23, 241, 210, 179, 148,
132*c0909341SAndroid Build Coastguard Worker     117,  86,  55,  24, 242, 211, 180, 149,
133*c0909341SAndroid Build Coastguard Worker     118,  87,  56,  25, 243, 212, 181, 150,
134*c0909341SAndroid Build Coastguard Worker     119,  88,  57,  26, 244, 213, 182, 151,
135*c0909341SAndroid Build Coastguard Worker     120,  89,  58,  27, 245, 214, 183, 152,
136*c0909341SAndroid Build Coastguard Worker     121,  90,  59,  28, 246, 215, 184, 153,
137*c0909341SAndroid Build Coastguard Worker     122,  91,  60,  29, 247, 216, 185, 154,
138*c0909341SAndroid Build Coastguard Worker     123,  92,  61,  30, 248, 217, 186, 155,
139*c0909341SAndroid Build Coastguard Worker     124,  93,  62,  31, 249, 218, 187, 156,
140*c0909341SAndroid Build Coastguard Worker     125,  94,  63, 250, 219, 188, 157, 126,
141*c0909341SAndroid Build Coastguard Worker      95, 251, 220, 189, 158, 127, 252, 221,
142*c0909341SAndroid Build Coastguard Worker     190, 159, 253, 222, 191, 254, 223, 255,
143*c0909341SAndroid Build Coastguard Worker };
144*c0909341SAndroid Build Coastguard Worker 
145*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_16x4[], 32) = {
146*c0909341SAndroid Build Coastguard Worker      0,  1,  4,  2,  5,  8,  3,  6,  9, 12,  7, 10, 13, 16, 11, 14,
147*c0909341SAndroid Build Coastguard Worker     17, 20, 15, 18, 21, 24, 19, 22, 25, 28, 23, 26, 29, 32, 27, 30,
148*c0909341SAndroid Build Coastguard Worker     33, 36, 31, 34, 37, 40, 35, 38, 41, 44, 39, 42, 45, 48, 43, 46,
149*c0909341SAndroid Build Coastguard Worker     49, 52, 47, 50, 53, 56, 51, 54, 57, 60, 55, 58, 61, 59, 62, 63,
150*c0909341SAndroid Build Coastguard Worker };
151*c0909341SAndroid Build Coastguard Worker 
152*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_16x8[], 32) = {
153*c0909341SAndroid Build Coastguard Worker       0,   1,   8,   2,   9,  16,   3,  10,  17,  24,   4,  11,  18,  25,  32,   5,
154*c0909341SAndroid Build Coastguard Worker      12,  19,  26,  33,  40,   6,  13,  20,  27,  34,  41,  48,   7,  14,  21,  28,
155*c0909341SAndroid Build Coastguard Worker      35,  42,  49,  56,  15,  22,  29,  36,  43,  50,  57,  64,  23,  30,  37,  44,
156*c0909341SAndroid Build Coastguard Worker      51,  58,  65,  72,  31,  38,  45,  52,  59,  66,  73,  80,  39,  46,  53,  60,
157*c0909341SAndroid Build Coastguard Worker      67,  74,  81,  88,  47,  54,  61,  68,  75,  82,  89,  96,  55,  62,  69,  76,
158*c0909341SAndroid Build Coastguard Worker      83,  90,  97, 104,  63,  70,  77,  84,  91,  98, 105, 112,  71,  78,  85,  92,
159*c0909341SAndroid Build Coastguard Worker      99, 106, 113, 120,  79,  86,  93, 100, 107, 114, 121,  87,  94, 101, 108, 115,
160*c0909341SAndroid Build Coastguard Worker     122,  95, 102, 109, 116, 123, 103, 110, 117, 124, 111, 118, 125, 119, 126, 127,
161*c0909341SAndroid Build Coastguard Worker };
162*c0909341SAndroid Build Coastguard Worker 
163*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_16x16[], 32) = {
164*c0909341SAndroid Build Coastguard Worker       0,  16,   1,   2,  17,  32,  48,  33,  18,   3,   4,  19,  34,  49,  64,  80,
165*c0909341SAndroid Build Coastguard Worker      65,  50,  35,  20,   5,   6,  21,  36,  51,  66,  81,  96, 112,  97,  82,  67,
166*c0909341SAndroid Build Coastguard Worker      52,  37,  22,   7,   8,  23,  38,  53,  68,  83,  98, 113, 128, 144, 129, 114,
167*c0909341SAndroid Build Coastguard Worker      99,  84,  69,  54,  39,  24,   9,  10,  25,  40,  55,  70,  85, 100, 115, 130,
168*c0909341SAndroid Build Coastguard Worker     145, 160, 176, 161, 146, 131, 116, 101,  86,  71,  56,  41,  26,  11,  12,  27,
169*c0909341SAndroid Build Coastguard Worker      42,  57,  72,  87, 102, 117, 132, 147, 162, 177, 192, 208, 193, 178, 163, 148,
170*c0909341SAndroid Build Coastguard Worker     133, 118, 103,  88,  73,  58,  43,  28,  13,  14,  29,  44,  59,  74,  89, 104,
171*c0909341SAndroid Build Coastguard Worker     119, 134, 149, 164, 179, 194, 209, 224, 240, 225, 210, 195, 180, 165, 150, 135,
172*c0909341SAndroid Build Coastguard Worker     120, 105,  90,  75,  60,  45,  30,  15,  31,  46,  61,  76,  91, 106, 121, 136,
173*c0909341SAndroid Build Coastguard Worker     151, 166, 181, 196, 211, 226, 241, 242, 227, 212, 197, 182, 167, 152, 137, 122,
174*c0909341SAndroid Build Coastguard Worker     107,  92,  77,  62,  47,  63,  78,  93, 108, 123, 138, 153, 168, 183, 198, 213,
175*c0909341SAndroid Build Coastguard Worker     228, 243, 244, 229, 214, 199, 184, 169, 154, 139, 124, 109,  94,  79,  95, 110,
176*c0909341SAndroid Build Coastguard Worker     125, 140, 155, 170, 185, 200, 215, 230, 245, 246, 231, 216, 201, 186, 171, 156,
177*c0909341SAndroid Build Coastguard Worker     141, 126, 111, 127, 142, 157, 172, 187, 202, 217, 232, 247, 248, 233, 218, 203,
178*c0909341SAndroid Build Coastguard Worker     188, 173, 158, 143, 159, 174, 189, 204, 219, 234, 249, 250, 235, 220, 205, 190,
179*c0909341SAndroid Build Coastguard Worker     175, 191, 206, 221, 236, 251, 252, 237, 222, 207, 223, 238, 253, 254, 239, 255,
180*c0909341SAndroid Build Coastguard Worker };
181*c0909341SAndroid Build Coastguard Worker 
182*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_16x32[], 32) = {
183*c0909341SAndroid Build Coastguard Worker       0,  32,   1,  64,  33,   2,  96,  65,  34,   3, 128,  97,  66,  35,   4, 160,
184*c0909341SAndroid Build Coastguard Worker     129,  98,  67,  36,   5, 192, 161, 130,  99,  68,  37,   6, 224, 193, 162, 131,
185*c0909341SAndroid Build Coastguard Worker     100,  69,  38,   7, 256, 225, 194, 163, 132, 101,  70,  39,   8, 288, 257, 226,
186*c0909341SAndroid Build Coastguard Worker     195, 164, 133, 102,  71,  40,   9, 320, 289, 258, 227, 196, 165, 134, 103,  72,
187*c0909341SAndroid Build Coastguard Worker      41,  10, 352, 321, 290, 259, 228, 197, 166, 135, 104,  73,  42,  11, 384, 353,
188*c0909341SAndroid Build Coastguard Worker     322, 291, 260, 229, 198, 167, 136, 105,  74,  43,  12, 416, 385, 354, 323, 292,
189*c0909341SAndroid Build Coastguard Worker     261, 230, 199, 168, 137, 106,  75,  44,  13, 448, 417, 386, 355, 324, 293, 262,
190*c0909341SAndroid Build Coastguard Worker     231, 200, 169, 138, 107,  76,  45,  14, 480, 449, 418, 387, 356, 325, 294, 263,
191*c0909341SAndroid Build Coastguard Worker     232, 201, 170, 139, 108,  77,  46,  15, 481, 450, 419, 388, 357, 326, 295, 264,
192*c0909341SAndroid Build Coastguard Worker     233, 202, 171, 140, 109,  78,  47,  16, 482, 451, 420, 389, 358, 327, 296, 265,
193*c0909341SAndroid Build Coastguard Worker     234, 203, 172, 141, 110,  79,  48,  17, 483, 452, 421, 390, 359, 328, 297, 266,
194*c0909341SAndroid Build Coastguard Worker     235, 204, 173, 142, 111,  80,  49,  18, 484, 453, 422, 391, 360, 329, 298, 267,
195*c0909341SAndroid Build Coastguard Worker     236, 205, 174, 143, 112,  81,  50,  19, 485, 454, 423, 392, 361, 330, 299, 268,
196*c0909341SAndroid Build Coastguard Worker     237, 206, 175, 144, 113,  82,  51,  20, 486, 455, 424, 393, 362, 331, 300, 269,
197*c0909341SAndroid Build Coastguard Worker     238, 207, 176, 145, 114,  83,  52,  21, 487, 456, 425, 394, 363, 332, 301, 270,
198*c0909341SAndroid Build Coastguard Worker     239, 208, 177, 146, 115,  84,  53,  22, 488, 457, 426, 395, 364, 333, 302, 271,
199*c0909341SAndroid Build Coastguard Worker     240, 209, 178, 147, 116,  85,  54,  23, 489, 458, 427, 396, 365, 334, 303, 272,
200*c0909341SAndroid Build Coastguard Worker     241, 210, 179, 148, 117,  86,  55,  24, 490, 459, 428, 397, 366, 335, 304, 273,
201*c0909341SAndroid Build Coastguard Worker     242, 211, 180, 149, 118,  87,  56,  25, 491, 460, 429, 398, 367, 336, 305, 274,
202*c0909341SAndroid Build Coastguard Worker     243, 212, 181, 150, 119,  88,  57,  26, 492, 461, 430, 399, 368, 337, 306, 275,
203*c0909341SAndroid Build Coastguard Worker     244, 213, 182, 151, 120,  89,  58,  27, 493, 462, 431, 400, 369, 338, 307, 276,
204*c0909341SAndroid Build Coastguard Worker     245, 214, 183, 152, 121,  90,  59,  28, 494, 463, 432, 401, 370, 339, 308, 277,
205*c0909341SAndroid Build Coastguard Worker     246, 215, 184, 153, 122,  91,  60,  29, 495, 464, 433, 402, 371, 340, 309, 278,
206*c0909341SAndroid Build Coastguard Worker     247, 216, 185, 154, 123,  92,  61,  30, 496, 465, 434, 403, 372, 341, 310, 279,
207*c0909341SAndroid Build Coastguard Worker     248, 217, 186, 155, 124,  93,  62,  31, 497, 466, 435, 404, 373, 342, 311, 280,
208*c0909341SAndroid Build Coastguard Worker     249, 218, 187, 156, 125,  94,  63, 498, 467, 436, 405, 374, 343, 312, 281, 250,
209*c0909341SAndroid Build Coastguard Worker     219, 188, 157, 126,  95, 499, 468, 437, 406, 375, 344, 313, 282, 251, 220, 189,
210*c0909341SAndroid Build Coastguard Worker     158, 127, 500, 469, 438, 407, 376, 345, 314, 283, 252, 221, 190, 159, 501, 470,
211*c0909341SAndroid Build Coastguard Worker     439, 408, 377, 346, 315, 284, 253, 222, 191, 502, 471, 440, 409, 378, 347, 316,
212*c0909341SAndroid Build Coastguard Worker     285, 254, 223, 503, 472, 441, 410, 379, 348, 317, 286, 255, 504, 473, 442, 411,
213*c0909341SAndroid Build Coastguard Worker     380, 349, 318, 287, 505, 474, 443, 412, 381, 350, 319, 506, 475, 444, 413, 382,
214*c0909341SAndroid Build Coastguard Worker     351, 507, 476, 445, 414, 383, 508, 477, 446, 415, 509, 478, 447, 510, 479, 511,
215*c0909341SAndroid Build Coastguard Worker };
216*c0909341SAndroid Build Coastguard Worker 
217*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_32x8[], 32) = {
218*c0909341SAndroid Build Coastguard Worker       0,   1,   8,   2,   9,  16,   3,  10,  17,  24,   4,  11,  18,  25,  32,   5,  12,  19,  26,  33,  40,   6,  13,  20,  27,  34,  41,  48,   7,  14,  21,  28,
219*c0909341SAndroid Build Coastguard Worker      35,  42,  49,  56,  15,  22,  29,  36,  43,  50,  57,  64,  23,  30,  37,  44,  51,  58,  65,  72,  31,  38,  45,  52,  59,  66,  73,  80,  39,  46,  53,  60,
220*c0909341SAndroid Build Coastguard Worker      67,  74,  81,  88,  47,  54,  61,  68,  75,  82,  89,  96,  55,  62,  69,  76,  83,  90,  97, 104,  63,  70,  77,  84,  91,  98, 105, 112,  71,  78,  85,  92,
221*c0909341SAndroid Build Coastguard Worker      99, 106, 113, 120,  79,  86,  93, 100, 107, 114, 121, 128,  87,  94, 101, 108, 115, 122, 129, 136,  95, 102, 109, 116, 123, 130, 137, 144, 103, 110, 117, 124,
222*c0909341SAndroid Build Coastguard Worker     131, 138, 145, 152, 111, 118, 125, 132, 139, 146, 153, 160, 119, 126, 133, 140, 147, 154, 161, 168, 127, 134, 141, 148, 155, 162, 169, 176, 135, 142, 149, 156,
223*c0909341SAndroid Build Coastguard Worker     163, 170, 177, 184, 143, 150, 157, 164, 171, 178, 185, 192, 151, 158, 165, 172, 179, 186, 193, 200, 159, 166, 173, 180, 187, 194, 201, 208, 167, 174, 181, 188,
224*c0909341SAndroid Build Coastguard Worker     195, 202, 209, 216, 175, 182, 189, 196, 203, 210, 217, 224, 183, 190, 197, 204, 211, 218, 225, 232, 191, 198, 205, 212, 219, 226, 233, 240, 199, 206, 213, 220,
225*c0909341SAndroid Build Coastguard Worker     227, 234, 241, 248, 207, 214, 221, 228, 235, 242, 249, 215, 222, 229, 236, 243, 250, 223, 230, 237, 244, 251, 231, 238, 245, 252, 239, 246, 253, 247, 254, 255,
226*c0909341SAndroid Build Coastguard Worker };
227*c0909341SAndroid Build Coastguard Worker 
228*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_32x16[], 32) = {
229*c0909341SAndroid Build Coastguard Worker       0,   1,  16,   2,  17,  32,   3,  18,  33,  48,   4,  19,  34,  49,  64,   5,  20,  35,  50,  65,  80,   6,  21,  36,  51,  66,  81,  96,   7,  22,  37,  52,
230*c0909341SAndroid Build Coastguard Worker      67,  82,  97, 112,   8,  23,  38,  53,  68,  83,  98, 113, 128,   9,  24,  39,  54,  69,  84,  99, 114, 129, 144,  10,  25,  40,  55,  70,  85, 100, 115, 130,
231*c0909341SAndroid Build Coastguard Worker     145, 160,  11,  26,  41,  56,  71,  86, 101, 116, 131, 146, 161, 176,  12,  27,  42,  57,  72,  87, 102, 117, 132, 147, 162, 177, 192,  13,  28,  43,  58,  73,
232*c0909341SAndroid Build Coastguard Worker      88, 103, 118, 133, 148, 163, 178, 193, 208,  14,  29,  44,  59,  74,  89, 104, 119, 134, 149, 164, 179, 194, 209, 224,  15,  30,  45,  60,  75,  90, 105, 120,
233*c0909341SAndroid Build Coastguard Worker     135, 150, 165, 180, 195, 210, 225, 240,  31,  46,  61,  76,  91, 106, 121, 136, 151, 166, 181, 196, 211, 226, 241, 256,  47,  62,  77,  92, 107, 122, 137, 152,
234*c0909341SAndroid Build Coastguard Worker     167, 182, 197, 212, 227, 242, 257, 272,  63,  78,  93, 108, 123, 138, 153, 168, 183, 198, 213, 228, 243, 258, 273, 288,  79,  94, 109, 124, 139, 154, 169, 184,
235*c0909341SAndroid Build Coastguard Worker     199, 214, 229, 244, 259, 274, 289, 304,  95, 110, 125, 140, 155, 170, 185, 200, 215, 230, 245, 260, 275, 290, 305, 320, 111, 126, 141, 156, 171, 186, 201, 216,
236*c0909341SAndroid Build Coastguard Worker     231, 246, 261, 276, 291, 306, 321, 336, 127, 142, 157, 172, 187, 202, 217, 232, 247, 262, 277, 292, 307, 322, 337, 352, 143, 158, 173, 188, 203, 218, 233, 248,
237*c0909341SAndroid Build Coastguard Worker     263, 278, 293, 308, 323, 338, 353, 368, 159, 174, 189, 204, 219, 234, 249, 264, 279, 294, 309, 324, 339, 354, 369, 384, 175, 190, 205, 220, 235, 250, 265, 280,
238*c0909341SAndroid Build Coastguard Worker     295, 310, 325, 340, 355, 370, 385, 400, 191, 206, 221, 236, 251, 266, 281, 296, 311, 326, 341, 356, 371, 386, 401, 416, 207, 222, 237, 252, 267, 282, 297, 312,
239*c0909341SAndroid Build Coastguard Worker     327, 342, 357, 372, 387, 402, 417, 432, 223, 238, 253, 268, 283, 298, 313, 328, 343, 358, 373, 388, 403, 418, 433, 448, 239, 254, 269, 284, 299, 314, 329, 344,
240*c0909341SAndroid Build Coastguard Worker     359, 374, 389, 404, 419, 434, 449, 464, 255, 270, 285, 300, 315, 330, 345, 360, 375, 390, 405, 420, 435, 450, 465, 480, 271, 286, 301, 316, 331, 346, 361, 376,
241*c0909341SAndroid Build Coastguard Worker     391, 406, 421, 436, 451, 466, 481, 496, 287, 302, 317, 332, 347, 362, 377, 392, 407, 422, 437, 452, 467, 482, 497, 303, 318, 333, 348, 363, 378, 393, 408, 423,
242*c0909341SAndroid Build Coastguard Worker     438, 453, 468, 483, 498, 319, 334, 349, 364, 379, 394, 409, 424, 439, 454, 469, 484, 499, 335, 350, 365, 380, 395, 410, 425, 440, 455, 470, 485, 500, 351, 366,
243*c0909341SAndroid Build Coastguard Worker     381, 396, 411, 426, 441, 456, 471, 486, 501, 367, 382, 397, 412, 427, 442, 457, 472, 487, 502, 383, 398, 413, 428, 443, 458, 473, 488, 503, 399, 414, 429, 444,
244*c0909341SAndroid Build Coastguard Worker     459, 474, 489, 504, 415, 430, 445, 460, 475, 490, 505, 431, 446, 461, 476, 491, 506, 447, 462, 477, 492, 507, 463, 478, 493, 508, 479, 494, 509, 495, 510, 511,
245*c0909341SAndroid Build Coastguard Worker };
246*c0909341SAndroid Build Coastguard Worker 
247*c0909341SAndroid Build Coastguard Worker static const uint16_t ALIGN(scan_32x32[], 32) = {
248*c0909341SAndroid Build Coastguard Worker        0,   32,    1,    2,   33,   64,   96,   65,   34,    3,    4,   35,   66,   97,  128,  160,  129,   98,   67,   36,    5,    6,   37,   68,   99,  130,  161,  192,  224,  193,  162,  131,
249*c0909341SAndroid Build Coastguard Worker      100,   69,   38,    7,    8,   39,   70,  101,  132,  163,  194,  225,  256,  288,  257,  226,  195,  164,  133,  102,   71,   40,    9,   10,   41,   72,  103,  134,  165,  196,  227,  258,
250*c0909341SAndroid Build Coastguard Worker      289,  320,  352,  321,  290,  259,  228,  197,  166,  135,  104,   73,   42,   11,   12,   43,   74,  105,  136,  167,  198,  229,  260,  291,  322,  353,  384,  416,  385,  354,  323,  292,
251*c0909341SAndroid Build Coastguard Worker      261,  230,  199,  168,  137,  106,   75,   44,   13,   14,   45,   76,  107,  138,  169,  200,  231,  262,  293,  324,  355,  386,  417,  448,  480,  449,  418,  387,  356,  325,  294,  263,
252*c0909341SAndroid Build Coastguard Worker      232,  201,  170,  139,  108,   77,   46,   15,   16,   47,   78,  109,  140,  171,  202,  233,  264,  295,  326,  357,  388,  419,  450,  481,  512,  544,  513,  482,  451,  420,  389,  358,
253*c0909341SAndroid Build Coastguard Worker      327,  296,  265,  234,  203,  172,  141,  110,   79,   48,   17,   18,   49,   80,  111,  142,  173,  204,  235,  266,  297,  328,  359,  390,  421,  452,  483,  514,  545,  576,  608,  577,
254*c0909341SAndroid Build Coastguard Worker      546,  515,  484,  453,  422,  391,  360,  329,  298,  267,  236,  205,  174,  143,  112,   81,   50,   19,   20,   51,   82,  113,  144,  175,  206,  237,  268,  299,  330,  361,  392,  423,
255*c0909341SAndroid Build Coastguard Worker      454,  485,  516,  547,  578,  609,  640,  672,  641,  610,  579,  548,  517,  486,  455,  424,  393,  362,  331,  300,  269,  238,  207,  176,  145,  114,   83,   52,   21,   22,   53,   84,
256*c0909341SAndroid Build Coastguard Worker      115,  146,  177,  208,  239,  270,  301,  332,  363,  394,  425,  456,  487,  518,  549,  580,  611,  642,  673,  704,  736,  705,  674,  643,  612,  581,  550,  519,  488,  457,  426,  395,
257*c0909341SAndroid Build Coastguard Worker      364,  333,  302,  271,  240,  209,  178,  147,  116,   85,   54,   23,   24,   55,   86,  117,  148,  179,  210,  241,  272,  303,  334,  365,  396,  427,  458,  489,  520,  551,  582,  613,
258*c0909341SAndroid Build Coastguard Worker      644,  675,  706,  737,  768,  800,  769,  738,  707,  676,  645,  614,  583,  552,  521,  490,  459,  428,  397,  366,  335,  304,  273,  242,  211,  180,  149,  118,   87,   56,   25,   26,
259*c0909341SAndroid Build Coastguard Worker       57,   88,  119,  150,  181,  212,  243,  274,  305,  336,  367,  398,  429,  460,  491,  522,  553,  584,  615,  646,  677,  708,  739,  770,  801,  832,  864,  833,  802,  771,  740,  709,
260*c0909341SAndroid Build Coastguard Worker      678,  647,  616,  585,  554,  523,  492,  461,  430,  399,  368,  337,  306,  275,  244,  213,  182,  151,  120,   89,   58,   27,   28,   59,   90,  121,  152,  183,  214,  245,  276,  307,
261*c0909341SAndroid Build Coastguard Worker      338,  369,  400,  431,  462,  493,  524,  555,  586,  617,  648,  679,  710,  741,  772,  803,  834,  865,  896,  928,  897,  866,  835,  804,  773,  742,  711,  680,  649,  618,  587,  556,
262*c0909341SAndroid Build Coastguard Worker      525,  494,  463,  432,  401,  370,  339,  308,  277,  246,  215,  184,  153,  122,   91,   60,   29,   30,   61,   92,  123,  154,  185,  216,  247,  278,  309,  340,  371,  402,  433,  464,
263*c0909341SAndroid Build Coastguard Worker      495,  526,  557,  588,  619,  650,  681,  712,  743,  774,  805,  836,  867,  898,  929,  960,  992,  961,  930,  899,  868,  837,  806,  775,  744,  713,  682,  651,  620,  589,  558,  527,
264*c0909341SAndroid Build Coastguard Worker      496,  465,  434,  403,  372,  341,  310,  279,  248,  217,  186,  155,  124,   93,   62,   31,   63,   94,  125,  156,  187,  218,  249,  280,  311,  342,  373,  404,  435,  466,  497,  528,
265*c0909341SAndroid Build Coastguard Worker      559,  590,  621,  652,  683,  714,  745,  776,  807,  838,  869,  900,  931,  962,  993,  994,  963,  932,  901,  870,  839,  808,  777,  746,  715,  684,  653,  622,  591,  560,  529,  498,
266*c0909341SAndroid Build Coastguard Worker      467,  436,  405,  374,  343,  312,  281,  250,  219,  188,  157,  126,   95,  127,  158,  189,  220,  251,  282,  313,  344,  375,  406,  437,  468,  499,  530,  561,  592,  623,  654,  685,
267*c0909341SAndroid Build Coastguard Worker      716,  747,  778,  809,  840,  871,  902,  933,  964,  995,  996,  965,  934,  903,  872,  841,  810,  779,  748,  717,  686,  655,  624,  593,  562,  531,  500,  469,  438,  407,  376,  345,
268*c0909341SAndroid Build Coastguard Worker      314,  283,  252,  221,  190,  159,  191,  222,  253,  284,  315,  346,  377,  408,  439,  470,  501,  532,  563,  594,  625,  656,  687,  718,  749,  780,  811,  842,  873,  904,  935,  966,
269*c0909341SAndroid Build Coastguard Worker      997,  998,  967,  936,  905,  874,  843,  812,  781,  750,  719,  688,  657,  626,  595,  564,  533,  502,  471,  440,  409,  378,  347,  316,  285,  254,  223,  255,  286,  317,  348,  379,
270*c0909341SAndroid Build Coastguard Worker      410,  441,  472,  503,  534,  565,  596,  627,  658,  689,  720,  751,  782,  813,  844,  875,  906,  937,  968,  999, 1000,  969,  938,  907,  876,  845,  814,  783,  752,  721,  690,  659,
271*c0909341SAndroid Build Coastguard Worker      628,  597,  566,  535,  504,  473,  442,  411,  380,  349,  318,  287,  319,  350,  381,  412,  443,  474,  505,  536,  567,  598,  629,  660,  691,  722,  753,  784,  815,  846,  877,  908,
272*c0909341SAndroid Build Coastguard Worker      939,  970, 1001, 1002,  971,  940,  909,  878,  847,  816,  785,  754,  723,  692,  661,  630,  599,  568,  537,  506,  475,  444,  413,  382,  351,  383,  414,  445,  476,  507,  538,  569,
273*c0909341SAndroid Build Coastguard Worker      600,  631,  662,  693,  724,  755,  786,  817,  848,  879,  910,  941,  972, 1003, 1004,  973,  942,  911,  880,  849,  818,  787,  756,  725,  694,  663,  632,  601,  570,  539,  508,  477,
274*c0909341SAndroid Build Coastguard Worker      446,  415,  447,  478,  509,  540,  571,  602,  633,  664,  695,  726,  757,  788,  819,  850,  881,  912,  943,  974, 1005, 1006,  975,  944,  913,  882,  851,  820,  789,  758,  727,  696,
275*c0909341SAndroid Build Coastguard Worker      665,  634,  603,  572,  541,  510,  479,  511,  542,  573,  604,  635,  666,  697,  728,  759,  790,  821,  852,  883,  914,  945,  976, 1007, 1008,  977,  946,  915,  884,  853,  822,  791,
276*c0909341SAndroid Build Coastguard Worker      760,  729,  698,  667,  636,  605,  574,  543,  575,  606,  637,  668,  699,  730,  761,  792,  823,  854,  885,  916,  947,  978, 1009, 1010,  979,  948,  917,  886,  855,  824,  793,  762,
277*c0909341SAndroid Build Coastguard Worker      731,  700,  669,  638,  607,  639,  670,  701,  732,  763,  794,  825,  856,  887,  918,  949,  980, 1011, 1012,  981,  950,  919,  888,  857,  826,  795,  764,  733,  702,  671,  703,  734,
278*c0909341SAndroid Build Coastguard Worker      765,  796,  827,  858,  889,  920,  951,  982, 1013, 1014,  983,  952,  921,  890,  859,  828,  797,  766,  735,  767,  798,  829,  860,  891,  922,  953,  984, 1015, 1016,  985,  954,  923,
279*c0909341SAndroid Build Coastguard Worker      892,  861,  830,  799,  831,  862,  893,  924,  955,  986, 1017, 1018,  987,  956,  925,  894,  863,  895,  926,  957,  988, 1019, 1020,  989,  958,  927,  959,  990, 1021, 1022,  991, 1023,
280*c0909341SAndroid Build Coastguard Worker };
281*c0909341SAndroid Build Coastguard Worker 
282*c0909341SAndroid Build Coastguard Worker const uint16_t *const dav1d_scans[N_RECT_TX_SIZES] = {
283*c0909341SAndroid Build Coastguard Worker     [ TX_4X4  ] = scan_4x4,
284*c0909341SAndroid Build Coastguard Worker     [ TX_8X8  ] = scan_8x8,
285*c0909341SAndroid Build Coastguard Worker     [ TX_16X16] = scan_16x16,
286*c0909341SAndroid Build Coastguard Worker     [ TX_32X32] = scan_32x32,
287*c0909341SAndroid Build Coastguard Worker     [ TX_64X64] = scan_32x32,
288*c0909341SAndroid Build Coastguard Worker     [RTX_4X8  ] = scan_4x8,
289*c0909341SAndroid Build Coastguard Worker     [RTX_8X4  ] = scan_8x4,
290*c0909341SAndroid Build Coastguard Worker     [RTX_8X16 ] = scan_8x16,
291*c0909341SAndroid Build Coastguard Worker     [RTX_16X8 ] = scan_16x8,
292*c0909341SAndroid Build Coastguard Worker     [RTX_16X32] = scan_16x32,
293*c0909341SAndroid Build Coastguard Worker     [RTX_32X16] = scan_32x16,
294*c0909341SAndroid Build Coastguard Worker     [RTX_32X64] = scan_32x32,
295*c0909341SAndroid Build Coastguard Worker     [RTX_64X32] = scan_32x32,
296*c0909341SAndroid Build Coastguard Worker     [RTX_4X16 ] = scan_4x16,
297*c0909341SAndroid Build Coastguard Worker     [RTX_16X4 ] = scan_16x4,
298*c0909341SAndroid Build Coastguard Worker     [RTX_8X32 ] = scan_8x32,
299*c0909341SAndroid Build Coastguard Worker     [RTX_32X8 ] = scan_32x8,
300*c0909341SAndroid Build Coastguard Worker     [RTX_16X64] = scan_16x32,
301*c0909341SAndroid Build Coastguard Worker     [RTX_64X16] = scan_32x16,
302*c0909341SAndroid Build Coastguard Worker };
303*c0909341SAndroid Build Coastguard Worker 
304*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_4x4[16];
305*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_8x8[64];
306*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_16x16[256];
307*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_32x32[1024];
308*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_4x8[32];
309*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_8x4[32];
310*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_8x16[128];
311*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_16x8[128];
312*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_16x32[512];
313*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_32x16[512];
314*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_4x16[64];
315*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_16x4[64];
316*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_8x32[256];
317*c0909341SAndroid Build Coastguard Worker static uint8_t last_nonzero_col_from_eob_32x8[256];
318*c0909341SAndroid Build Coastguard Worker 
init_tbl(uint8_t * const last_nonzero_col_from_eob,const uint16_t * const scan,const int w,const int h)319*c0909341SAndroid Build Coastguard Worker static COLD void init_tbl(uint8_t *const last_nonzero_col_from_eob,
320*c0909341SAndroid Build Coastguard Worker                           const uint16_t *const scan, const int w, const int h)
321*c0909341SAndroid Build Coastguard Worker {
322*c0909341SAndroid Build Coastguard Worker     int max_col = 0;
323*c0909341SAndroid Build Coastguard Worker     for (int y = 0, n = 0; y < h; y++) {
324*c0909341SAndroid Build Coastguard Worker         for (int x = 0; x < w; x++, n++) {
325*c0909341SAndroid Build Coastguard Worker             const int rc = scan[n];
326*c0909341SAndroid Build Coastguard Worker             const int rcx = rc & (h - 1);
327*c0909341SAndroid Build Coastguard Worker             max_col = imax(max_col, rcx);
328*c0909341SAndroid Build Coastguard Worker             last_nonzero_col_from_eob[n] = max_col;
329*c0909341SAndroid Build Coastguard Worker         }
330*c0909341SAndroid Build Coastguard Worker     }
331*c0909341SAndroid Build Coastguard Worker }
332*c0909341SAndroid Build Coastguard Worker 
init_internal(void)333*c0909341SAndroid Build Coastguard Worker static COLD void init_internal(void) {
334*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_4x4,   scan_4x4,    4,  4);
335*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_8x8,   scan_8x8,    8,  8);
336*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_16x16, scan_16x16, 16, 16);
337*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_32x32, scan_32x32, 32, 32);
338*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_4x8,   scan_4x8,    4,  8);
339*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_8x4,   scan_8x4,    8,  4);
340*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_8x16,  scan_8x16,   8, 16);
341*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_16x8,  scan_16x8,  16,  8);
342*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_16x32, scan_16x32, 16, 32);
343*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_32x16, scan_32x16, 32, 16);
344*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_4x16,  scan_4x16,   4, 16);
345*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_16x4,  scan_16x4,  16,  4);
346*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_8x32,  scan_8x32,   8, 32);
347*c0909341SAndroid Build Coastguard Worker     init_tbl(last_nonzero_col_from_eob_32x8,  scan_32x8,  32,  8);
348*c0909341SAndroid Build Coastguard Worker }
349*c0909341SAndroid Build Coastguard Worker 
dav1d_init_last_nonzero_col_from_eob_tables(void)350*c0909341SAndroid Build Coastguard Worker COLD void dav1d_init_last_nonzero_col_from_eob_tables(void) {
351*c0909341SAndroid Build Coastguard Worker     static pthread_once_t initted = PTHREAD_ONCE_INIT;
352*c0909341SAndroid Build Coastguard Worker     pthread_once(&initted, init_internal);
353*c0909341SAndroid Build Coastguard Worker }
354*c0909341SAndroid Build Coastguard Worker 
355*c0909341SAndroid Build Coastguard Worker const uint8_t *const dav1d_last_nonzero_col_from_eob[N_RECT_TX_SIZES] = {
356*c0909341SAndroid Build Coastguard Worker     [ TX_4X4  ] = last_nonzero_col_from_eob_4x4,
357*c0909341SAndroid Build Coastguard Worker     [ TX_8X8  ] = last_nonzero_col_from_eob_8x8,
358*c0909341SAndroid Build Coastguard Worker     [ TX_16X16] = last_nonzero_col_from_eob_16x16,
359*c0909341SAndroid Build Coastguard Worker     [ TX_32X32] = last_nonzero_col_from_eob_32x32,
360*c0909341SAndroid Build Coastguard Worker     [ TX_64X64] = last_nonzero_col_from_eob_32x32,
361*c0909341SAndroid Build Coastguard Worker     [RTX_4X8  ] = last_nonzero_col_from_eob_4x8,
362*c0909341SAndroid Build Coastguard Worker     [RTX_8X4  ] = last_nonzero_col_from_eob_8x4,
363*c0909341SAndroid Build Coastguard Worker     [RTX_8X16 ] = last_nonzero_col_from_eob_8x16,
364*c0909341SAndroid Build Coastguard Worker     [RTX_16X8 ] = last_nonzero_col_from_eob_16x8,
365*c0909341SAndroid Build Coastguard Worker     [RTX_16X32] = last_nonzero_col_from_eob_16x32,
366*c0909341SAndroid Build Coastguard Worker     [RTX_32X16] = last_nonzero_col_from_eob_32x16,
367*c0909341SAndroid Build Coastguard Worker     [RTX_32X64] = last_nonzero_col_from_eob_32x32,
368*c0909341SAndroid Build Coastguard Worker     [RTX_64X32] = last_nonzero_col_from_eob_32x32,
369*c0909341SAndroid Build Coastguard Worker     [RTX_4X16 ] = last_nonzero_col_from_eob_4x16,
370*c0909341SAndroid Build Coastguard Worker     [RTX_16X4 ] = last_nonzero_col_from_eob_16x4,
371*c0909341SAndroid Build Coastguard Worker     [RTX_8X32 ] = last_nonzero_col_from_eob_8x32,
372*c0909341SAndroid Build Coastguard Worker     [RTX_32X8 ] = last_nonzero_col_from_eob_32x8,
373*c0909341SAndroid Build Coastguard Worker     [RTX_16X64] = last_nonzero_col_from_eob_16x32,
374*c0909341SAndroid Build Coastguard Worker     [RTX_64X16] = last_nonzero_col_from_eob_32x16,
375*c0909341SAndroid Build Coastguard Worker };
376