1pub(crate) fn decode_block(v: u8, data: &[u8]) -> (u32, u32, u32, usize) {
2 match v & 0b11_11_11 {
3 0 => {
5 let v0 = data[0] as u32;
6 let v1 = data[1] as u32;
7 let v2 = data[2] as u32;
8 (v0, v1, v2, 3)
9 }
10 1 => {
11 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
12 let v1 = data[2] as u32;
13 let v2 = data[3] as u32;
14 (v0, v1, v2, 4)
15 }
16 2 => {
17 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
18 let v1 = data[3] as u32;
19 let v2 = data[4] as u32;
20 (v0, v1, v2, 5)
21 }
22 3 => {
23 let v0 = (data[0] as u32)
24 | (data[1] as u32) << 8
25 | (data[2] as u32) << 16
26 | (data[3] as u32) << 24;
27 let v1 = data[4] as u32;
28 let v2 = data[5] as u32;
29 (v0, v1, v2, 6)
30 }
31 4 => {
32 let v0 = data[0] as u32;
33 let v1 = (data[1] as u32) | (data[2] as u32) << 8;
34 let v2 = data[3] as u32;
35 (v0, v1, v2, 4)
36 }
37 5 => {
38 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
39 let v1 = (data[2] as u32) | (data[3] as u32) << 8;
40 let v2 = data[4] as u32;
41 (v0, v1, v2, 5)
42 }
43 6 => {
44 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
45 let v1 = (data[3] as u32) | (data[4] as u32) << 8;
46 let v2 = data[5] as u32;
47 (v0, v1, v2, 6)
48 }
49 7 => {
50 let v0 = (data[0] as u32)
51 | (data[1] as u32) << 8
52 | (data[2] as u32) << 16
53 | (data[3] as u32) << 24;
54 let v1 = (data[4] as u32) | (data[5] as u32) << 8;
55 let v2 = data[6] as u32;
56 (v0, v1, v2, 7)
57 }
58 8 => {
59 let v0 = data[0] as u32;
60 let v1 = (data[1] as u32) | (data[2] as u32) << 8 | (data[3] as u32) << 16;
61 let v2 = data[4] as u32;
62 (v0, v1, v2, 5)
63 }
64 9 => {
65 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
66 let v1 = (data[2] as u32) | (data[3] as u32) << 8 | (data[4] as u32) << 16;
67 let v2 = data[5] as u32;
68 (v0, v1, v2, 6)
69 }
70 10 => {
71 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
72 let v1 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
73 let v2 = data[6] as u32;
74 (v0, v1, v2, 7)
75 }
76 11 => {
77 let v0 = (data[0] as u32)
78 | (data[1] as u32) << 8
79 | (data[2] as u32) << 16
80 | (data[3] as u32) << 24;
81 let v1 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
82 let v2 = data[7] as u32;
83 (v0, v1, v2, 8)
84 }
85 12 => {
86 let v0 = data[0] as u32;
87 let v1 = (data[1] as u32)
88 | (data[2] as u32) << 8
89 | (data[3] as u32) << 16
90 | (data[4] as u32) << 24;
91 let v2 = data[5] as u32;
92 (v0, v1, v2, 6)
93 }
94 13 => {
95 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
96 let v1 = (data[2] as u32)
97 | (data[3] as u32) << 8
98 | (data[4] as u32) << 16
99 | (data[5] as u32) << 24;
100 let v2 = data[6] as u32;
101 (v0, v1, v2, 7)
102 }
103 14 => {
104 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
105 let v1 = (data[3] as u32)
106 | (data[4] as u32) << 8
107 | (data[5] as u32) << 16
108 | (data[6] as u32) << 24;
109 let v2 = data[7] as u32;
110 (v0, v1, v2, 8)
111 }
112 15 => {
113 let v0 = (data[0] as u32)
114 | (data[1] as u32) << 8
115 | (data[2] as u32) << 16
116 | (data[3] as u32) << 24;
117 let v1 = (data[4] as u32)
118 | (data[5] as u32) << 8
119 | (data[6] as u32) << 16
120 | (data[7] as u32) << 24;
121 let v2 = data[8] as u32;
122 (v0, v1, v2, 9)
123 }
124 16 => {
125 let v0 = data[0] as u32;
126 let v1 = data[1] as u32;
127 let v2 = (data[2] as u32) | (data[3] as u32) << 8;
128 (v0, v1, v2, 4)
129 }
130 17 => {
131 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
132 let v1 = data[2] as u32;
133 let v2 = (data[3] as u32) | (data[4] as u32) << 8;
134 (v0, v1, v2, 5)
135 }
136 18 => {
137 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
138 let v1 = data[3] as u32;
139 let v2 = (data[4] as u32) | (data[5] as u32) << 8;
140 (v0, v1, v2, 6)
141 }
142 19 => {
143 let v0 = (data[0] as u32)
144 | (data[1] as u32) << 8
145 | (data[2] as u32) << 16
146 | (data[3] as u32) << 24;
147 let v1 = data[4] as u32;
148 let v2 = (data[5] as u32) | (data[6] as u32) << 8;
149 (v0, v1, v2, 7)
150 }
151 20 => {
152 let v0 = data[0] as u32;
153 let v1 = (data[1] as u32) | (data[2] as u32) << 8;
154 let v2 = (data[3] as u32) | (data[4] as u32) << 8;
155 (v0, v1, v2, 5)
156 }
157 21 => {
158 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
159 let v1 = (data[2] as u32) | (data[3] as u32) << 8;
160 let v2 = (data[4] as u32) | (data[5] as u32) << 8;
161 (v0, v1, v2, 6)
162 }
163 22 => {
164 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
165 let v1 = (data[3] as u32) | (data[4] as u32) << 8;
166 let v2 = (data[5] as u32) | (data[6] as u32) << 8;
167 (v0, v1, v2, 7)
168 }
169 23 => {
170 let v0 = (data[0] as u32)
171 | (data[1] as u32) << 8
172 | (data[2] as u32) << 16
173 | (data[3] as u32) << 24;
174 let v1 = (data[4] as u32) | (data[5] as u32) << 8;
175 let v2 = (data[6] as u32) | (data[7] as u32) << 8;
176 (v0, v1, v2, 8)
177 }
178 24 => {
179 let v0 = data[0] as u32;
180 let v1 = (data[1] as u32) | (data[2] as u32) << 8 | (data[3] as u32) << 16;
181 let v2 = (data[4] as u32) | (data[5] as u32) << 8;
182 (v0, v1, v2, 6)
183 }
184 25 => {
185 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
186 let v1 = (data[2] as u32) | (data[3] as u32) << 8 | (data[4] as u32) << 16;
187 let v2 = (data[5] as u32) | (data[6] as u32) << 8;
188 (v0, v1, v2, 7)
189 }
190 26 => {
191 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
192 let v1 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
193 let v2 = (data[6] as u32) | (data[7] as u32) << 8;
194 (v0, v1, v2, 8)
195 }
196 27 => {
197 let v0 = (data[0] as u32)
198 | (data[1] as u32) << 8
199 | (data[2] as u32) << 16
200 | (data[3] as u32) << 24;
201 let v1 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
202 let v2 = (data[7] as u32) | (data[8] as u32) << 8;
203 (v0, v1, v2, 9)
204 }
205 28 => {
206 let v0 = data[0] as u32;
207 let v1 = (data[1] as u32)
208 | (data[2] as u32) << 8
209 | (data[3] as u32) << 16
210 | (data[4] as u32) << 24;
211 let v2 = (data[5] as u32) | (data[6] as u32) << 8;
212 (v0, v1, v2, 7)
213 }
214 29 => {
215 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
216 let v1 = (data[2] as u32)
217 | (data[3] as u32) << 8
218 | (data[4] as u32) << 16
219 | (data[5] as u32) << 24;
220 let v2 = (data[6] as u32) | (data[7] as u32) << 8;
221 (v0, v1, v2, 8)
222 }
223 30 => {
224 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
225 let v1 = (data[3] as u32)
226 | (data[4] as u32) << 8
227 | (data[5] as u32) << 16
228 | (data[6] as u32) << 24;
229 let v2 = (data[7] as u32) | (data[8] as u32) << 8;
230 (v0, v1, v2, 9)
231 }
232 31 => {
233 let v0 = (data[0] as u32)
234 | (data[1] as u32) << 8
235 | (data[2] as u32) << 16
236 | (data[3] as u32) << 24;
237 let v1 = (data[4] as u32)
238 | (data[5] as u32) << 8
239 | (data[6] as u32) << 16
240 | (data[7] as u32) << 24;
241 let v2 = (data[8] as u32) | (data[9] as u32) << 8;
242 (v0, v1, v2, 10)
243 }
244 32 => {
245 let v0 = data[0] as u32;
246 let v1 = data[1] as u32;
247 let v2 = (data[2] as u32) | (data[3] as u32) << 8 | (data[4] as u32) << 16;
248 (v0, v1, v2, 5)
249 }
250 33 => {
251 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
252 let v1 = data[2] as u32;
253 let v2 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
254 (v0, v1, v2, 6)
255 }
256 34 => {
257 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
258 let v1 = data[3] as u32;
259 let v2 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
260 (v0, v1, v2, 7)
261 }
262 35 => {
263 let v0 = (data[0] as u32)
264 | (data[1] as u32) << 8
265 | (data[2] as u32) << 16
266 | (data[3] as u32) << 24;
267 let v1 = data[4] as u32;
268 let v2 = (data[5] as u32) | (data[6] as u32) << 8 | (data[7] as u32) << 16;
269 (v0, v1, v2, 8)
270 }
271 36 => {
272 let v0 = data[0] as u32;
273 let v1 = (data[1] as u32) | (data[2] as u32) << 8;
274 let v2 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
275 (v0, v1, v2, 6)
276 }
277 37 => {
278 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
279 let v1 = (data[2] as u32) | (data[3] as u32) << 8;
280 let v2 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
281 (v0, v1, v2, 7)
282 }
283 38 => {
284 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
285 let v1 = (data[3] as u32) | (data[4] as u32) << 8;
286 let v2 = (data[5] as u32) | (data[6] as u32) << 8 | (data[7] as u32) << 16;
287 (v0, v1, v2, 8)
288 }
289 39 => {
290 let v0 = (data[0] as u32)
291 | (data[1] as u32) << 8
292 | (data[2] as u32) << 16
293 | (data[3] as u32) << 24;
294 let v1 = (data[4] as u32) | (data[5] as u32) << 8;
295 let v2 = (data[6] as u32) | (data[7] as u32) << 8 | (data[8] as u32) << 16;
296 (v0, v1, v2, 9)
297 }
298 40 => {
299 let v0 = data[0] as u32;
300 let v1 = (data[1] as u32) | (data[2] as u32) << 8 | (data[3] as u32) << 16;
301 let v2 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
302 (v0, v1, v2, 7)
303 }
304 41 => {
305 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
306 let v1 = (data[2] as u32) | (data[3] as u32) << 8 | (data[4] as u32) << 16;
307 let v2 = (data[5] as u32) | (data[6] as u32) << 8 | (data[7] as u32) << 16;
308 (v0, v1, v2, 8)
309 }
310 42 => {
311 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
312 let v1 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
313 let v2 = (data[6] as u32) | (data[7] as u32) << 8 | (data[8] as u32) << 16;
314 (v0, v1, v2, 9)
315 }
316 43 => {
317 let v0 = (data[0] as u32)
318 | (data[1] as u32) << 8
319 | (data[2] as u32) << 16
320 | (data[3] as u32) << 24;
321 let v1 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
322 let v2 = (data[7] as u32) | (data[8] as u32) << 8 | (data[9] as u32) << 16;
323 (v0, v1, v2, 10)
324 }
325 44 => {
326 let v0 = data[0] as u32;
327 let v1 = (data[1] as u32)
328 | (data[2] as u32) << 8
329 | (data[3] as u32) << 16
330 | (data[4] as u32) << 24;
331 let v2 = (data[5] as u32) | (data[6] as u32) << 8 | (data[7] as u32) << 16;
332 (v0, v1, v2, 8)
333 }
334 45 => {
335 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
336 let v1 = (data[2] as u32)
337 | (data[3] as u32) << 8
338 | (data[4] as u32) << 16
339 | (data[5] as u32) << 24;
340 let v2 = (data[6] as u32) | (data[7] as u32) << 8 | (data[8] as u32) << 16;
341 (v0, v1, v2, 9)
342 }
343 46 => {
344 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
345 let v1 = (data[3] as u32)
346 | (data[4] as u32) << 8
347 | (data[5] as u32) << 16
348 | (data[6] as u32) << 24;
349 let v2 = (data[7] as u32) | (data[8] as u32) << 8 | (data[9] as u32) << 16;
350 (v0, v1, v2, 10)
351 }
352 47 => {
353 let v0 = (data[0] as u32)
354 | (data[1] as u32) << 8
355 | (data[2] as u32) << 16
356 | (data[3] as u32) << 24;
357 let v1 = (data[4] as u32)
358 | (data[5] as u32) << 8
359 | (data[6] as u32) << 16
360 | (data[7] as u32) << 24;
361 let v2 = (data[8] as u32) | (data[9] as u32) << 8 | (data[10] as u32) << 16;
362 (v0, v1, v2, 11)
363 }
364 48 => {
365 let v0 = data[0] as u32;
366 let v1 = data[1] as u32;
367 let v2 = (data[2] as u32)
368 | (data[3] as u32) << 8
369 | (data[4] as u32) << 16
370 | (data[5] as u32) << 24;
371 (v0, v1, v2, 6)
372 }
373 49 => {
374 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
375 let v1 = data[2] as u32;
376 let v2 = (data[3] as u32)
377 | (data[4] as u32) << 8
378 | (data[5] as u32) << 16
379 | (data[6] as u32) << 24;
380 (v0, v1, v2, 7)
381 }
382 50 => {
383 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
384 let v1 = data[3] as u32;
385 let v2 = (data[4] as u32)
386 | (data[5] as u32) << 8
387 | (data[6] as u32) << 16
388 | (data[7] as u32) << 24;
389 (v0, v1, v2, 8)
390 }
391 51 => {
392 let v0 = (data[0] as u32)
393 | (data[1] as u32) << 8
394 | (data[2] as u32) << 16
395 | (data[3] as u32) << 24;
396 let v1 = data[4] as u32;
397 let v2 = (data[5] as u32)
398 | (data[6] as u32) << 8
399 | (data[7] as u32) << 16
400 | (data[8] as u32) << 24;
401 (v0, v1, v2, 9)
402 }
403 52 => {
404 let v0 = data[0] as u32;
405 let v1 = (data[1] as u32) | (data[2] as u32) << 8;
406 let v2 = (data[3] as u32)
407 | (data[4] as u32) << 8
408 | (data[5] as u32) << 16
409 | (data[6] as u32) << 24;
410 (v0, v1, v2, 7)
411 }
412 53 => {
413 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
414 let v1 = (data[2] as u32) | (data[3] as u32) << 8;
415 let v2 = (data[4] as u32)
416 | (data[5] as u32) << 8
417 | (data[6] as u32) << 16
418 | (data[7] as u32) << 24;
419 (v0, v1, v2, 8)
420 }
421 54 => {
422 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
423 let v1 = (data[3] as u32) | (data[4] as u32) << 8;
424 let v2 = (data[5] as u32)
425 | (data[6] as u32) << 8
426 | (data[7] as u32) << 16
427 | (data[8] as u32) << 24;
428 (v0, v1, v2, 9)
429 }
430 55 => {
431 let v0 = (data[0] as u32)
432 | (data[1] as u32) << 8
433 | (data[2] as u32) << 16
434 | (data[3] as u32) << 24;
435 let v1 = (data[4] as u32) | (data[5] as u32) << 8;
436 let v2 = (data[6] as u32)
437 | (data[7] as u32) << 8
438 | (data[8] as u32) << 16
439 | (data[9] as u32) << 24;
440 (v0, v1, v2, 10)
441 }
442 56 => {
443 let v0 = data[0] as u32;
444 let v1 = (data[1] as u32) | (data[2] as u32) << 8 | (data[3] as u32) << 16;
445 let v2 = (data[4] as u32)
446 | (data[5] as u32) << 8
447 | (data[6] as u32) << 16
448 | (data[7] as u32) << 24;
449 (v0, v1, v2, 8)
450 }
451 57 => {
452 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
453 let v1 = (data[2] as u32) | (data[3] as u32) << 8 | (data[4] as u32) << 16;
454 let v2 = (data[5] as u32)
455 | (data[6] as u32) << 8
456 | (data[7] as u32) << 16
457 | (data[8] as u32) << 24;
458 (v0, v1, v2, 9)
459 }
460 58 => {
461 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
462 let v1 = (data[3] as u32) | (data[4] as u32) << 8 | (data[5] as u32) << 16;
463 let v2 = (data[6] as u32)
464 | (data[7] as u32) << 8
465 | (data[8] as u32) << 16
466 | (data[9] as u32) << 24;
467 (v0, v1, v2, 10)
468 }
469 59 => {
470 let v0 = (data[0] as u32)
471 | (data[1] as u32) << 8
472 | (data[2] as u32) << 16
473 | (data[3] as u32) << 24;
474 let v1 = (data[4] as u32) | (data[5] as u32) << 8 | (data[6] as u32) << 16;
475 let v2 = (data[7] as u32)
476 | (data[8] as u32) << 8
477 | (data[9] as u32) << 16
478 | (data[10] as u32) << 24;
479 (v0, v1, v2, 11)
480 }
481 60 => {
482 let v0 = data[0] as u32;
483 let v1 = (data[1] as u32)
484 | (data[2] as u32) << 8
485 | (data[3] as u32) << 16
486 | (data[4] as u32) << 24;
487 let v2 = (data[5] as u32)
488 | (data[6] as u32) << 8
489 | (data[7] as u32) << 16
490 | (data[8] as u32) << 24;
491 (v0, v1, v2, 9)
492 }
493 61 => {
494 let v0 = (data[0] as u32) | (data[1] as u32) << 8;
495 let v1 = (data[2] as u32)
496 | (data[3] as u32) << 8
497 | (data[4] as u32) << 16
498 | (data[5] as u32) << 24;
499 let v2 = (data[6] as u32)
500 | (data[7] as u32) << 8
501 | (data[8] as u32) << 16
502 | (data[9] as u32) << 24;
503 (v0, v1, v2, 10)
504 }
505 62 => {
506 let v0 = (data[0] as u32) | (data[1] as u32) << 8 | (data[2] as u32) << 16;
507 let v1 = (data[3] as u32)
508 | (data[4] as u32) << 8
509 | (data[5] as u32) << 16
510 | (data[6] as u32) << 24;
511 let v2 = (data[7] as u32)
512 | (data[8] as u32) << 8
513 | (data[9] as u32) << 16
514 | (data[10] as u32) << 24;
515 (v0, v1, v2, 11)
516 }
517 63 => {
518 let v0 = (data[0] as u32)
519 | (data[1] as u32) << 8
520 | (data[2] as u32) << 16
521 | (data[3] as u32) << 24;
522 let v1 = (data[4] as u32)
523 | (data[5] as u32) << 8
524 | (data[6] as u32) << 16
525 | (data[7] as u32) << 24;
526 let v2 = (data[8] as u32)
527 | (data[9] as u32) << 8
528 | (data[10] as u32) << 16
529 | (data[11] as u32) << 24;
530 (v0, v1, v2, 12)
531 } _ => unreachable!(),
533 }
534}