xref: /aosp_15_r20/external/grpc-grpc/test/cpp/microbenchmarks/huffman_geometries/decode_huff_9_16_5.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1 // Copyright 2023 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 // This file is autogenerated: see
16 // tools/codegen/core/gen_huffman_decompressor.cc
17 
18 #ifndef GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_9_16_5_H
19 #define GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_9_16_5_H
20 #include <cstddef>
21 #include <cstdint>
22 
23 #include <grpc/support/port_platform.h>
24 namespace grpc_core {
25 namespace geometry_9_16_5 {
26 class HuffDecoderCommon {
27  protected:
GetOp2(size_t i)28   static inline uint64_t GetOp2(size_t i) { return table2_0_ops_[i]; }
GetEmit2(size_t,size_t emit)29   static inline uint64_t GetEmit2(size_t, size_t emit) {
30     return table2_0_emit_[emit];
31   }
GetOp3(size_t i)32   static inline uint64_t GetOp3(size_t i) { return table3_0_ops_[i]; }
GetEmit3(size_t,size_t emit)33   static inline uint64_t GetEmit3(size_t, size_t emit) {
34     return table3_0_emit_[emit];
35   }
GetOp4(size_t i)36   static inline uint64_t GetOp4(size_t i) {
37     return table4_ops_[i >> 6][i & 0x3f];
38   }
GetEmit4(size_t i,size_t emit)39   static inline uint64_t GetEmit4(size_t i, size_t emit) {
40     return table4_emit_[i >> 6][emit];
41   }
GetOp5(size_t i)42   static inline uint64_t GetOp5(size_t i) {
43     return table5_ops_[i >> 7][i & 0x7f];
44   }
GetEmit5(size_t i,size_t emit)45   static inline uint64_t GetEmit5(size_t i, size_t emit) {
46     return table5_emit_[i >> 7][emit];
47   }
GetOp1(size_t i)48   static inline uint64_t GetOp1(size_t i) {
49     return table1_ops_[i >> 5][i & 0x1f];
50   }
GetEmit1(size_t i,size_t emit)51   static inline uint64_t GetEmit1(size_t i, size_t emit) {
52     return table1_emit_[i >> 5][emit];
53   }
GetOp6(size_t i)54   static inline uint64_t GetOp6(size_t i) { return i ? 3 : 1; }
GetEmit6(size_t,size_t emit)55   static inline uint64_t GetEmit6(size_t, size_t emit) { return emit + 33; }
GetOp7(size_t i)56   static inline uint64_t GetOp7(size_t i) { return i ? 3 : 1; }
GetEmit7(size_t,size_t emit)57   static inline uint64_t GetEmit7(size_t, size_t emit) { return emit + 40; }
GetOp9(size_t i)58   static inline uint64_t GetOp9(size_t i) { return i; }
GetEmit9(size_t,size_t emit)59   static inline uint64_t GetEmit9(size_t, size_t emit) {
60     return ((void)emit, 63);
61   }
GetOp8(size_t i)62   static inline uint64_t GetOp8(size_t i) {
63     return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1
64                 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1))
65                 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6));
66   }
GetEmit8(size_t,size_t emit)67   static inline uint64_t GetEmit8(size_t, size_t emit) {
68     return (emit < 1 ? (((void)emit, 63)) : ((emit - 1) ? 43 : 39));
69   }
GetOp11(size_t i)70   static inline uint64_t GetOp11(size_t i) {
71     return (i < 2 ? (i) : ((i - 2) + 1));
72   }
GetEmit11(size_t,size_t emit)73   static inline uint64_t GetEmit11(size_t, size_t emit) {
74     return ((void)emit, 124);
75   }
GetOp12(size_t i)76   static inline uint64_t GetOp12(size_t i) {
77     return table12_0_inner_[table12_0_outer_[i]];
78   }
GetEmit12(size_t,size_t emit)79   static inline uint64_t GetEmit12(size_t, size_t emit) {
80     return (emit < 1 ? (((void)emit, 124)) : ((emit - 1) ? 62 : 35));
81   }
GetOp13(size_t i)82   static inline uint64_t GetOp13(size_t i) {
83     return table13_0_inner_[table13_0_outer_[i]];
84   }
GetEmit13(size_t,size_t emit)85   static inline uint64_t GetEmit13(size_t, size_t emit) {
86     return table13_0_emit_[emit];
87   }
GetOp14(size_t i)88   static inline uint64_t GetOp14(size_t i) { return table14_0_ops_[i]; }
GetEmit14(size_t,size_t emit)89   static inline uint64_t GetEmit14(size_t, size_t emit) {
90     return table14_0_emit_[emit];
91   }
GetOp15(size_t i)92   static inline uint64_t GetOp15(size_t i) { return table15_0_ops_[i]; }
GetEmit15(size_t,size_t emit)93   static inline uint64_t GetEmit15(size_t, size_t emit) {
94     return table15_0_emit_[emit];
95   }
GetOp16(size_t i)96   static inline uint64_t GetOp16(size_t i) { return table16_0_ops_[i]; }
GetEmit16(size_t,size_t emit)97   static inline uint64_t GetEmit16(size_t, size_t emit) {
98     return table16_0_emit_[emit];
99   }
GetOp17(size_t i)100   static inline uint64_t GetOp17(size_t i) {
101     return table17_ops_[i >> 5][i & 0x1f];
102   }
GetEmit17(size_t i,size_t emit)103   static inline uint64_t GetEmit17(size_t i, size_t emit) {
104     return table17_emit_[i >> 5][emit];
105   }
GetOp18(size_t i)106   static inline uint64_t GetOp18(size_t i) {
107     return table18_ops_[i >> 6][i & 0x3f];
108   }
GetEmit18(size_t i,size_t emit)109   static inline uint64_t GetEmit18(size_t i, size_t emit) {
110     return table18_emit_[i >> 6][emit];
111   }
GetOp19(size_t i)112   static inline uint64_t GetOp19(size_t i) {
113     return table19_ops_[i >> 6][i & 0x3f];
114   }
GetEmit19(size_t i,size_t emit)115   static inline uint64_t GetEmit19(size_t i, size_t emit) {
116     return table19_emit_[i >> 6][emit];
117   }
GetOp20(size_t i)118   static inline uint64_t GetOp20(size_t i) {
119     return table20_ops_[i >> 6][i & 0x3f];
120   }
GetEmit20(size_t i,size_t emit)121   static inline uint64_t GetEmit20(size_t i, size_t emit) {
122     return table20_emit_[i >> 6][emit];
123   }
GetOp21(size_t i)124   static inline uint64_t GetOp21(size_t i) {
125     return table21_ops_[i >> 6][i & 0x3f];
126   }
GetEmit21(size_t i,size_t emit)127   static inline uint64_t GetEmit21(size_t i, size_t emit) {
128     return table21_emit_[i >> 6][emit];
129   }
GetOp22(size_t i)130   static inline uint64_t GetOp22(size_t i) {
131     return table22_ops_[i >> 6][i & 0x3f];
132   }
GetEmit22(size_t i,size_t emit)133   static inline uint64_t GetEmit22(size_t i, size_t emit) {
134     return table22_emit_[i >> 6][emit];
135   }
GetOp23(size_t i)136   static inline uint64_t GetOp23(size_t i) {
137     return table23_ops_[i >> 7][i & 0x7f];
138   }
GetEmit23(size_t i,size_t emit)139   static inline uint64_t GetEmit23(size_t i, size_t emit) {
140     return table23_emit_[i >> 7][emit];
141   }
GetOp24(size_t i)142   static inline uint64_t GetOp24(size_t i) {
143     return table24_ops_[i >> 7][i & 0x7f];
144   }
GetEmit24(size_t i,size_t emit)145   static inline uint64_t GetEmit24(size_t i, size_t emit) {
146     return table24_emit_[i >> 7][emit];
147   }
GetOp10(size_t i)148   static inline uint64_t GetOp10(size_t i) {
149     return table10_inner_[i >> 9][table10_outer_[i >> 9][i & 0x1ff]];
150   }
GetEmit10(size_t i,size_t emit)151   static inline uint64_t GetEmit10(size_t i, size_t emit) {
152     return table10_emit_[i >> 9][emit];
153   }
GetOp25(size_t i)154   static inline uint64_t GetOp25(size_t i) { return i ? 3 : 1; }
GetEmit25(size_t,size_t emit)155   static inline uint64_t GetEmit25(size_t, size_t emit) { return emit + 192; }
GetOp26(size_t i)156   static inline uint64_t GetOp26(size_t i) { return i ? 3 : 1; }
GetEmit26(size_t,size_t emit)157   static inline uint64_t GetEmit26(size_t, size_t emit) { return emit + 200; }
GetOp27(size_t i)158   static inline uint64_t GetOp27(size_t i) { return i ? 3 : 1; }
GetEmit27(size_t,size_t emit)159   static inline uint64_t GetEmit27(size_t, size_t emit) {
160     return emit ? 205 : 202;
161   }
GetOp28(size_t i)162   static inline uint64_t GetOp28(size_t i) { return i ? 3 : 1; }
GetEmit28(size_t,size_t emit)163   static inline uint64_t GetEmit28(size_t, size_t emit) {
164     return emit ? 213 : 210;
165   }
GetOp29(size_t i)166   static inline uint64_t GetOp29(size_t i) { return i ? 3 : 1; }
GetEmit29(size_t,size_t emit)167   static inline uint64_t GetEmit29(size_t, size_t emit) { return emit + 218; }
GetOp30(size_t i)168   static inline uint64_t GetOp30(size_t i) { return i ? 3 : 1; }
GetEmit30(size_t,size_t emit)169   static inline uint64_t GetEmit30(size_t, size_t emit) {
170     return emit ? 240 : 238;
171   }
GetOp31(size_t i)172   static inline uint64_t GetOp31(size_t i) { return i ? 3 : 1; }
GetEmit31(size_t,size_t emit)173   static inline uint64_t GetEmit31(size_t, size_t emit) { return emit + 242; }
GetOp32(size_t i)174   static inline uint64_t GetOp32(size_t i) {
175     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
176   }
GetEmit32(size_t,size_t emit)177   static inline uint64_t GetEmit32(size_t, size_t emit) {
178     return (emit < 2 ? (emit + 211) : ((emit - 2) ? 221 : 214));
179   }
GetOp33(size_t i)180   static inline uint64_t GetOp33(size_t i) {
181     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
182   }
GetEmit33(size_t,size_t emit)183   static inline uint64_t GetEmit33(size_t, size_t emit) {
184     return (emit < 2 ? (emit + 222) : ((emit - 2) ? 244 : 241));
185   }
GetOp34(size_t i)186   static inline uint64_t GetOp34(size_t i) {
187     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
188   }
GetEmit34(size_t,size_t emit)189   static inline uint64_t GetEmit34(size_t, size_t emit) { return emit + 245; }
GetOp35(size_t i)190   static inline uint64_t GetOp35(size_t i) {
191     return (i < 2 ? (i ? 6 : 2) : ((i - 2) ? 14 : 10));
192   }
GetEmit35(size_t,size_t emit)193   static inline uint64_t GetEmit35(size_t, size_t emit) { return emit + 250; }
GetOp36(size_t i)194   static inline uint64_t GetOp36(size_t i) { return table36_0_inner_[i]; }
GetEmit36(size_t,size_t emit)195   static inline uint64_t GetEmit36(size_t, size_t emit) {
196     return table36_0_emit_[emit];
197   }
GetOp37(size_t i)198   static inline uint64_t GetOp37(size_t i) { return table36_0_inner_[i]; }
GetEmit37(size_t,size_t emit)199   static inline uint64_t GetEmit37(size_t, size_t emit) {
200     return (emit < 3 ? (emit + 19) : ((emit - 3) + 23));
201   }
GetOp39(size_t i)202   static inline uint64_t GetOp39(size_t i) { return i; }
GetEmit39(size_t,size_t emit)203   static inline uint64_t GetEmit39(size_t, size_t emit) {
204     return ((void)emit, 255);
205   }
GetOp38(size_t i)206   static inline uint64_t GetOp38(size_t i) {
207     return ((i < 1 ? (((void)i, 0)) : ((i - 1))) < 1
208                 ? (((void)(i < 1 ? (((void)i, 0)) : ((i - 1))), 1))
209                 : (((i < 1 ? (((void)i, 0)) : ((i - 1))) - 1) ? 10 : 6));
210   }
GetEmit38(size_t,size_t emit)211   static inline uint64_t GetEmit38(size_t, size_t emit) {
212     return (emit < 1 ? (((void)emit, 255)) : ((emit - 1) + 203));
213   }
GetOp41(size_t i)214   static inline uint64_t GetOp41(size_t i) {
215     return (i < 1 ? (((void)i, 0)) : (((void)(i - 1), 1)));
216   }
GetEmit41(size_t,size_t emit)217   static inline uint64_t GetEmit41(size_t, size_t emit) {
218     return ((void)emit, 254);
219   }
GetOp40(size_t i)220   static inline uint64_t GetOp40(size_t i) {
221     return table40_0_inner_[(i < 1 ? (((void)i, 0)) : ((i - 1)))];
222   }
GetEmit40(size_t,size_t emit)223   static inline uint64_t GetEmit40(size_t, size_t emit) {
224     return (emit < 1 ? (((void)emit, 254)) : ((emit - 1) + 2));
225   }
GetOp43(size_t i)226   static inline uint64_t GetOp43(size_t i) { return table43_0_inner_[i]; }
GetEmit43(size_t,size_t emit)227   static inline uint64_t GetEmit43(size_t, size_t emit) {
228     return table43_0_emit_[emit];
229   }
GetOp44(size_t i)230   static inline uint64_t GetOp44(size_t i) {
231     return table44_0_inner_[table44_0_outer_[i]];
232   }
GetEmit44(size_t,size_t emit)233   static inline uint64_t GetEmit44(size_t, size_t emit) {
234     return table43_0_emit_[emit];
235   }
GetOp42(size_t i)236   static inline uint64_t GetOp42(size_t i) { return table42_0_ops_[i]; }
GetEmit42(size_t,size_t emit)237   static inline uint64_t GetEmit42(size_t, size_t emit) {
238     return table42_0_emit_[emit];
239   }
240 
241  private:
242   static const uint8_t table2_0_emit_[10];
243   static const uint8_t table2_0_ops_[32];
244   static const uint8_t table3_0_emit_[36];
245   static const uint8_t table3_0_ops_[64];
246   static const uint8_t table4_0_emit_[22];
247   static const uint8_t table4_0_ops_[64];
248   static const uint8_t table4_1_emit_[46];
249   static const uint8_t table4_1_ops_[64];
250   static const uint8_t* const table4_emit_[2];
251   static const uint8_t* const table4_ops_[2];
252   static const uint8_t table5_0_ops_[128];
253   static const uint8_t table5_1_emit_[52];
254   static const uint8_t table5_1_ops_[128];
255   static const uint8_t* const table5_emit_[2];
256   static const uint8_t* const table5_ops_[2];
257   static const uint8_t table1_0_emit_[2];
258   static const uint16_t table1_0_ops_[32];
259   static const uint8_t table1_1_emit_[2];
260   static const uint8_t table1_2_emit_[2];
261   static const uint8_t table1_3_emit_[2];
262   static const uint8_t table1_4_emit_[2];
263   static const uint8_t table1_5_emit_[4];
264   static const uint16_t table1_5_ops_[32];
265   static const uint8_t table1_6_emit_[4];
266   static const uint8_t table1_7_emit_[4];
267   static const uint8_t table1_8_emit_[4];
268   static const uint8_t table1_9_emit_[4];
269   static const uint8_t table1_10_emit_[4];
270   static const uint8_t table1_11_emit_[6];
271   static const uint16_t table1_11_ops_[32];
272   static const uint8_t table1_12_emit_[8];
273   static const uint16_t table1_12_ops_[32];
274   static const uint8_t table1_13_emit_[8];
275   static const uint8_t table1_14_emit_[8];
276   static const uint8_t table1_15_emit_[10];
277   static const uint16_t table1_15_ops_[32];
278   static const uint8_t* const table1_emit_[16];
279   static const uint16_t* const table1_ops_[16];
280   static const uint8_t table12_0_inner_[5];
281   static const uint8_t table12_0_outer_[8];
282   static const uint8_t table13_0_emit_[9];
283   static const uint8_t table13_0_inner_[11];
284   static const uint8_t table13_0_outer_[16];
285   static const uint8_t table14_0_emit_[11];
286   static const uint8_t table14_0_ops_[32];
287   static const uint8_t table15_0_emit_[14];
288   static const uint8_t table15_0_ops_[64];
289   static const uint8_t table16_0_emit_[33];
290   static const uint8_t table16_0_ops_[128];
291   static const uint8_t table17_0_emit_[44];
292   static const uint8_t table17_0_ops_[32];
293   static const uint8_t table17_1_emit_[28];
294   static const uint8_t table17_1_ops_[32];
295   static const uint8_t table17_2_emit_[20];
296   static const uint8_t table17_2_ops_[32];
297   static const uint8_t table17_3_emit_[20];
298   static const uint8_t table17_4_emit_[2];
299   static const uint8_t table17_4_ops_[32];
300   static const uint8_t table17_5_emit_[2];
301   static const uint8_t table17_6_emit_[2];
302   static const uint8_t table17_7_emit_[5];
303   static const uint8_t table17_7_ops_[32];
304   static const uint8_t* const table17_emit_[8];
305   static const uint8_t* const table17_ops_[8];
306   static const uint16_t table18_0_ops_[64];
307   static const uint8_t table18_1_emit_[92];
308   static const uint16_t table18_1_ops_[64];
309   static const uint8_t table18_2_emit_[72];
310   static const uint16_t table18_2_ops_[64];
311   static const uint8_t table18_3_emit_[72];
312   static const uint8_t table18_4_emit_[40];
313   static const uint16_t table18_4_ops_[64];
314   static const uint8_t table18_5_emit_[40];
315   static const uint8_t table18_6_emit_[40];
316   static const uint16_t table18_7_ops_[64];
317   static const uint8_t* const table18_emit_[8];
318   static const uint16_t* const table18_ops_[8];
319   static const uint8_t table19_0_emit_[16];
320   static const uint16_t table19_0_ops_[64];
321   static const uint8_t table19_1_emit_[28];
322   static const uint16_t table19_1_ops_[64];
323   static const uint8_t table19_2_emit_[36];
324   static const uint16_t table19_2_ops_[64];
325   static const uint8_t table19_3_emit_[68];
326   static const uint16_t table19_3_ops_[64];
327   static const uint8_t table19_4_emit_[44];
328   static const uint8_t table19_5_emit_[92];
329   static const uint8_t table19_6_emit_[44];
330   static const uint8_t table19_7_emit_[92];
331   static const uint8_t table19_8_emit_[72];
332   static const uint8_t table19_9_emit_[72];
333   static const uint8_t table19_10_emit_[72];
334   static const uint8_t table19_11_emit_[72];
335   static const uint8_t table19_12_emit_[72];
336   static const uint8_t table19_13_emit_[72];
337   static const uint8_t table19_14_emit_[40];
338   static const uint8_t table19_15_emit_[6];
339   static const uint16_t table19_15_ops_[64];
340   static const uint8_t* const table19_emit_[16];
341   static const uint16_t* const table19_ops_[16];
342   static const uint8_t table20_0_emit_[8];
343   static const uint16_t table20_0_ops_[64];
344   static const uint8_t table20_1_emit_[8];
345   static const uint8_t table20_2_emit_[12];
346   static const uint16_t table20_2_ops_[64];
347   static const uint8_t table20_3_emit_[16];
348   static const uint8_t table20_4_emit_[16];
349   static const uint8_t table20_5_emit_[20];
350   static const uint16_t table20_5_ops_[64];
351   static const uint8_t table20_6_emit_[32];
352   static const uint16_t table20_6_ops_[64];
353   static const uint8_t table20_7_emit_[36];
354   static const uint16_t table20_7_ops_[64];
355   static const uint8_t table20_8_emit_[16];
356   static const uint8_t table20_9_emit_[28];
357   static const uint8_t table20_10_emit_[36];
358   static const uint8_t table20_11_emit_[68];
359   static const uint8_t table20_12_emit_[16];
360   static const uint8_t table20_13_emit_[28];
361   static const uint8_t table20_14_emit_[36];
362   static const uint8_t table20_15_emit_[68];
363   static const uint8_t table20_16_emit_[44];
364   static const uint8_t table20_17_emit_[92];
365   static const uint8_t table20_18_emit_[44];
366   static const uint8_t table20_19_emit_[92];
367   static const uint8_t table20_20_emit_[44];
368   static const uint8_t table20_21_emit_[92];
369   static const uint8_t table20_22_emit_[44];
370   static const uint8_t table20_23_emit_[92];
371   static const uint8_t table20_24_emit_[44];
372   static const uint8_t table20_25_emit_[92];
373   static const uint8_t table20_26_emit_[44];
374   static const uint8_t table20_27_emit_[92];
375   static const uint8_t table20_28_emit_[72];
376   static const uint8_t table20_29_emit_[72];
377   static const uint8_t table20_30_emit_[40];
378   static const uint8_t table20_31_emit_[31];
379   static const uint16_t table20_31_ops_[64];
380   static const uint8_t* const table20_emit_[32];
381   static const uint16_t* const table20_ops_[32];
382   static const uint8_t table21_0_emit_[60];
383   static const uint16_t table21_0_ops_[64];
384   static const uint8_t table21_1_emit_[60];
385   static const uint8_t table21_2_emit_[60];
386   static const uint8_t table21_3_emit_[60];
387   static const uint8_t table21_4_emit_[60];
388   static const uint8_t table21_5_emit_[8];
389   static const uint16_t table21_5_ops_[64];
390   static const uint8_t table21_6_emit_[8];
391   static const uint8_t table21_7_emit_[8];
392   static const uint8_t table21_8_emit_[8];
393   static const uint8_t table21_9_emit_[8];
394   static const uint8_t table21_10_emit_[8];
395   static const uint8_t table21_11_emit_[12];
396   static const uint16_t table21_11_ops_[64];
397   static const uint8_t table21_12_emit_[16];
398   static const uint16_t table21_12_ops_[64];
399   static const uint8_t table21_13_emit_[16];
400   static const uint8_t table21_14_emit_[16];
401   static const uint8_t table21_15_emit_[30];
402   static const uint16_t table21_15_ops_[64];
403   static const uint8_t table21_16_emit_[8];
404   static const uint8_t table21_17_emit_[8];
405   static const uint8_t table21_18_emit_[12];
406   static const uint8_t table21_19_emit_[16];
407   static const uint8_t table21_20_emit_[16];
408   static const uint8_t table21_21_emit_[20];
409   static const uint16_t table21_21_ops_[64];
410   static const uint8_t table21_22_emit_[32];
411   static const uint16_t table21_22_ops_[64];
412   static const uint8_t table21_23_emit_[36];
413   static const uint16_t table21_23_ops_[64];
414   static const uint8_t table21_24_emit_[8];
415   static const uint8_t table21_25_emit_[8];
416   static const uint8_t table21_26_emit_[12];
417   static const uint8_t table21_27_emit_[16];
418   static const uint8_t table21_28_emit_[16];
419   static const uint8_t table21_29_emit_[20];
420   static const uint8_t table21_30_emit_[32];
421   static const uint8_t table21_31_emit_[36];
422   static const uint8_t table21_32_emit_[16];
423   static const uint8_t table21_33_emit_[28];
424   static const uint16_t table21_33_ops_[64];
425   static const uint8_t table21_34_emit_[36];
426   static const uint16_t table21_34_ops_[64];
427   static const uint8_t table21_35_emit_[68];
428   static const uint16_t table21_35_ops_[64];
429   static const uint8_t table21_36_emit_[16];
430   static const uint8_t table21_37_emit_[28];
431   static const uint8_t table21_38_emit_[36];
432   static const uint8_t table21_39_emit_[68];
433   static const uint8_t table21_40_emit_[16];
434   static const uint8_t table21_41_emit_[28];
435   static const uint8_t table21_42_emit_[36];
436   static const uint8_t table21_43_emit_[68];
437   static const uint8_t table21_44_emit_[16];
438   static const uint8_t table21_45_emit_[28];
439   static const uint8_t table21_46_emit_[36];
440   static const uint8_t table21_47_emit_[68];
441   static const uint8_t table21_48_emit_[16];
442   static const uint8_t table21_49_emit_[28];
443   static const uint8_t table21_50_emit_[36];
444   static const uint8_t table21_51_emit_[68];
445   static const uint8_t table21_52_emit_[16];
446   static const uint8_t table21_53_emit_[28];
447   static const uint8_t table21_54_emit_[36];
448   static const uint8_t table21_55_emit_[68];
449   static const uint8_t table21_56_emit_[44];
450   static const uint16_t table21_56_ops_[64];
451   static const uint8_t table21_57_emit_[92];
452   static const uint16_t table21_57_ops_[64];
453   static const uint8_t table21_58_emit_[44];
454   static const uint8_t table21_59_emit_[92];
455   static const uint8_t table21_60_emit_[72];
456   static const uint16_t table21_60_ops_[64];
457   static const uint8_t table21_61_emit_[72];
458   static const uint8_t table21_62_emit_[72];
459   static const uint8_t table21_63_emit_[24];
460   static const uint16_t table21_63_ops_[64];
461   static const uint8_t* const table21_emit_[64];
462   static const uint16_t* const table21_ops_[64];
463   static const uint8_t table22_0_emit_[108];
464   static const uint16_t table22_0_ops_[64];
465   static const uint8_t table22_1_emit_[108];
466   static const uint8_t table22_2_emit_[108];
467   static const uint8_t table22_3_emit_[108];
468   static const uint8_t table22_4_emit_[108];
469   static const uint8_t table22_5_emit_[108];
470   static const uint8_t table22_6_emit_[108];
471   static const uint8_t table22_7_emit_[108];
472   static const uint8_t table22_8_emit_[108];
473   static const uint8_t table22_9_emit_[108];
474   static const uint8_t table22_10_emit_[60];
475   static const uint16_t table22_10_ops_[64];
476   static const uint8_t table22_11_emit_[60];
477   static const uint8_t table22_12_emit_[60];
478   static const uint8_t table22_13_emit_[60];
479   static const uint8_t table22_14_emit_[60];
480   static const uint8_t table22_15_emit_[60];
481   static const uint8_t table22_16_emit_[60];
482   static const uint8_t table22_17_emit_[60];
483   static const uint8_t table22_18_emit_[60];
484   static const uint8_t table22_19_emit_[60];
485   static const uint8_t table22_20_emit_[60];
486   static const uint8_t table22_21_emit_[60];
487   static const uint8_t table22_22_emit_[60];
488   static const uint8_t table22_23_emit_[8];
489   static const uint16_t table22_23_ops_[64];
490   static const uint8_t table22_24_emit_[8];
491   static const uint8_t table22_25_emit_[8];
492   static const uint8_t table22_26_emit_[8];
493   static const uint8_t table22_27_emit_[8];
494   static const uint8_t table22_28_emit_[8];
495   static const uint8_t table22_29_emit_[8];
496   static const uint8_t table22_30_emit_[8];
497   static const uint8_t table22_31_emit_[28];
498   static const uint16_t table22_31_ops_[64];
499   static const uint8_t table22_32_emit_[60];
500   static const uint8_t table22_33_emit_[60];
501   static const uint8_t table22_34_emit_[60];
502   static const uint8_t table22_35_emit_[60];
503   static const uint8_t table22_36_emit_[60];
504   static const uint8_t table22_37_emit_[8];
505   static const uint8_t table22_38_emit_[8];
506   static const uint8_t table22_39_emit_[8];
507   static const uint8_t table22_40_emit_[8];
508   static const uint8_t table22_41_emit_[8];
509   static const uint8_t table22_42_emit_[8];
510   static const uint8_t table22_43_emit_[12];
511   static const uint16_t table22_43_ops_[64];
512   static const uint8_t table22_44_emit_[16];
513   static const uint16_t table22_44_ops_[64];
514   static const uint8_t table22_45_emit_[16];
515   static const uint8_t table22_46_emit_[16];
516   static const uint8_t table22_47_emit_[30];
517   static const uint16_t table22_47_ops_[64];
518   static const uint8_t table22_48_emit_[60];
519   static const uint8_t table22_49_emit_[60];
520   static const uint8_t table22_50_emit_[60];
521   static const uint8_t table22_51_emit_[60];
522   static const uint8_t table22_52_emit_[60];
523   static const uint8_t table22_53_emit_[8];
524   static const uint8_t table22_54_emit_[8];
525   static const uint8_t table22_55_emit_[8];
526   static const uint8_t table22_56_emit_[8];
527   static const uint8_t table22_57_emit_[8];
528   static const uint8_t table22_58_emit_[8];
529   static const uint8_t table22_59_emit_[12];
530   static const uint8_t table22_60_emit_[16];
531   static const uint8_t table22_61_emit_[16];
532   static const uint8_t table22_62_emit_[16];
533   static const uint8_t table22_63_emit_[30];
534   static const uint8_t table22_64_emit_[8];
535   static const uint8_t table22_65_emit_[8];
536   static const uint8_t table22_66_emit_[12];
537   static const uint8_t table22_67_emit_[16];
538   static const uint8_t table22_68_emit_[16];
539   static const uint8_t table22_69_emit_[20];
540   static const uint16_t table22_69_ops_[64];
541   static const uint8_t table22_70_emit_[32];
542   static const uint16_t table22_70_ops_[64];
543   static const uint8_t table22_71_emit_[36];
544   static const uint16_t table22_71_ops_[64];
545   static const uint8_t table22_72_emit_[8];
546   static const uint8_t table22_73_emit_[8];
547   static const uint8_t table22_74_emit_[12];
548   static const uint8_t table22_75_emit_[16];
549   static const uint8_t table22_76_emit_[16];
550   static const uint8_t table22_77_emit_[20];
551   static const uint8_t table22_78_emit_[32];
552   static const uint8_t table22_79_emit_[36];
553   static const uint8_t table22_80_emit_[8];
554   static const uint8_t table22_81_emit_[8];
555   static const uint8_t table22_82_emit_[12];
556   static const uint8_t table22_83_emit_[16];
557   static const uint8_t table22_84_emit_[16];
558   static const uint8_t table22_85_emit_[20];
559   static const uint8_t table22_86_emit_[32];
560   static const uint8_t table22_87_emit_[36];
561   static const uint8_t table22_88_emit_[8];
562   static const uint8_t table22_89_emit_[8];
563   static const uint8_t table22_90_emit_[12];
564   static const uint8_t table22_91_emit_[16];
565   static const uint8_t table22_92_emit_[16];
566   static const uint8_t table22_93_emit_[20];
567   static const uint8_t table22_94_emit_[32];
568   static const uint8_t table22_95_emit_[36];
569   static const uint8_t table22_96_emit_[8];
570   static const uint8_t table22_97_emit_[8];
571   static const uint8_t table22_98_emit_[12];
572   static const uint8_t table22_99_emit_[16];
573   static const uint8_t table22_100_emit_[16];
574   static const uint8_t table22_101_emit_[20];
575   static const uint8_t table22_102_emit_[32];
576   static const uint8_t table22_103_emit_[36];
577   static const uint8_t table22_104_emit_[8];
578   static const uint8_t table22_105_emit_[8];
579   static const uint8_t table22_106_emit_[12];
580   static const uint8_t table22_107_emit_[16];
581   static const uint8_t table22_108_emit_[16];
582   static const uint8_t table22_109_emit_[20];
583   static const uint8_t table22_110_emit_[32];
584   static const uint8_t table22_111_emit_[36];
585   static const uint8_t table22_112_emit_[16];
586   static const uint8_t table22_113_emit_[28];
587   static const uint16_t table22_113_ops_[64];
588   static const uint8_t table22_114_emit_[36];
589   static const uint16_t table22_114_ops_[64];
590   static const uint8_t table22_115_emit_[68];
591   static const uint16_t table22_115_ops_[64];
592   static const uint8_t table22_116_emit_[16];
593   static const uint8_t table22_117_emit_[28];
594   static const uint8_t table22_118_emit_[36];
595   static const uint8_t table22_119_emit_[68];
596   static const uint8_t table22_120_emit_[44];
597   static const uint16_t table22_120_ops_[64];
598   static const uint8_t table22_121_emit_[92];
599   static const uint16_t table22_121_ops_[64];
600   static const uint8_t table22_122_emit_[44];
601   static const uint8_t table22_123_emit_[92];
602   static const uint8_t table22_124_emit_[44];
603   static const uint8_t table22_125_emit_[92];
604   static const uint8_t table22_126_emit_[15];
605   static const uint16_t table22_126_ops_[64];
606   static const uint8_t table22_127_emit_[35];
607   static const uint16_t table22_127_ops_[64];
608   static const uint8_t* const table22_emit_[128];
609   static const uint16_t* const table22_ops_[128];
610   static const uint8_t table23_0_emit_[204];
611   static const uint16_t table23_0_ops_[128];
612   static const uint8_t table23_1_emit_[204];
613   static const uint8_t table23_2_emit_[204];
614   static const uint8_t table23_3_emit_[204];
615   static const uint8_t table23_4_emit_[204];
616   static const uint8_t table23_5_emit_[204];
617   static const uint8_t table23_6_emit_[204];
618   static const uint8_t table23_7_emit_[204];
619   static const uint8_t table23_8_emit_[204];
620   static const uint8_t table23_9_emit_[204];
621   static const uint8_t table23_10_emit_[216];
622   static const uint16_t table23_10_ops_[128];
623   static const uint8_t table23_11_emit_[216];
624   static const uint8_t table23_12_emit_[216];
625   static const uint8_t table23_13_emit_[216];
626   static const uint8_t table23_14_emit_[216];
627   static const uint8_t table23_15_emit_[216];
628   static const uint8_t table23_16_emit_[216];
629   static const uint8_t table23_17_emit_[216];
630   static const uint8_t table23_18_emit_[216];
631   static const uint8_t table23_19_emit_[216];
632   static const uint8_t table23_20_emit_[216];
633   static const uint8_t table23_21_emit_[216];
634   static const uint8_t table23_22_emit_[216];
635   static const uint8_t table23_23_emit_[120];
636   static const uint16_t table23_23_ops_[128];
637   static const uint8_t table23_24_emit_[120];
638   static const uint8_t table23_25_emit_[120];
639   static const uint8_t table23_26_emit_[120];
640   static const uint8_t table23_27_emit_[120];
641   static const uint8_t table23_28_emit_[120];
642   static const uint8_t table23_29_emit_[120];
643   static const uint8_t table23_30_emit_[120];
644   static const uint8_t table23_31_emit_[31];
645   static const uint16_t table23_31_ops_[128];
646   static const uint8_t table23_32_emit_[216];
647   static const uint8_t table23_33_emit_[216];
648   static const uint8_t table23_34_emit_[216];
649   static const uint8_t table23_35_emit_[216];
650   static const uint8_t table23_36_emit_[216];
651   static const uint8_t table23_37_emit_[120];
652   static const uint8_t table23_38_emit_[120];
653   static const uint8_t table23_39_emit_[120];
654   static const uint8_t table23_40_emit_[120];
655   static const uint8_t table23_41_emit_[120];
656   static const uint8_t table23_42_emit_[120];
657   static const uint8_t table23_43_emit_[68];
658   static const uint16_t table23_43_ops_[128];
659   static const uint16_t table23_44_ops_[128];
660   static const uint8_t table23_47_emit_[36];
661   static const uint16_t table23_47_ops_[128];
662   static const uint8_t table23_48_emit_[216];
663   static const uint8_t table23_49_emit_[216];
664   static const uint8_t table23_50_emit_[216];
665   static const uint8_t table23_51_emit_[216];
666   static const uint8_t table23_52_emit_[216];
667   static const uint8_t table23_53_emit_[120];
668   static const uint8_t table23_54_emit_[120];
669   static const uint8_t table23_55_emit_[120];
670   static const uint8_t table23_56_emit_[120];
671   static const uint8_t table23_57_emit_[120];
672   static const uint8_t table23_58_emit_[120];
673   static const uint8_t table23_59_emit_[68];
674   static const uint8_t table23_63_emit_[36];
675   static const uint8_t table23_64_emit_[120];
676   static const uint8_t table23_65_emit_[120];
677   static const uint8_t table23_66_emit_[68];
678   static const uint16_t table23_69_ops_[128];
679   static const uint16_t table23_70_ops_[128];
680   static const uint8_t table23_71_emit_[46];
681   static const uint16_t table23_71_ops_[128];
682   static const uint8_t table23_72_emit_[120];
683   static const uint8_t table23_73_emit_[120];
684   static const uint8_t table23_74_emit_[68];
685   static const uint8_t table23_79_emit_[46];
686   static const uint8_t table23_80_emit_[120];
687   static const uint8_t table23_81_emit_[120];
688   static const uint8_t table23_82_emit_[68];
689   static const uint8_t table23_87_emit_[46];
690   static const uint8_t table23_88_emit_[120];
691   static const uint8_t table23_89_emit_[120];
692   static const uint8_t table23_90_emit_[68];
693   static const uint8_t table23_95_emit_[46];
694   static const uint8_t table23_96_emit_[120];
695   static const uint8_t table23_97_emit_[120];
696   static const uint8_t table23_98_emit_[68];
697   static const uint8_t table23_103_emit_[46];
698   static const uint8_t table23_104_emit_[120];
699   static const uint8_t table23_105_emit_[120];
700   static const uint8_t table23_106_emit_[68];
701   static const uint8_t table23_111_emit_[46];
702   static const uint16_t table23_113_ops_[128];
703   static const uint16_t table23_114_ops_[128];
704   static const uint16_t table23_115_ops_[128];
705   static const uint16_t table23_120_ops_[128];
706   static const uint8_t table23_121_emit_[104];
707   static const uint16_t table23_121_ops_[128];
708   static const uint8_t table23_123_emit_[104];
709   static const uint8_t table23_125_emit_[104];
710   static const uint16_t table23_126_ops_[128];
711   static const uint8_t table23_127_emit_[64];
712   static const uint16_t table23_127_ops_[128];
713   static const uint8_t* const table23_emit_[128];
714   static const uint16_t* const table23_ops_[128];
715   static const uint8_t table24_0_emit_[66];
716   static const uint16_t table24_0_ops_[128];
717   static const uint8_t table24_1_emit_[156];
718   static const uint16_t table24_1_ops_[128];
719   static const uint8_t table24_2_emit_[66];
720   static const uint8_t table24_3_emit_[156];
721   static const uint8_t table24_4_emit_[66];
722   static const uint8_t table24_5_emit_[156];
723   static const uint8_t table24_6_emit_[66];
724   static const uint8_t table24_7_emit_[156];
725   static const uint8_t table24_8_emit_[66];
726   static const uint8_t table24_9_emit_[156];
727   static const uint8_t table24_10_emit_[66];
728   static const uint8_t table24_11_emit_[156];
729   static const uint8_t table24_12_emit_[66];
730   static const uint8_t table24_13_emit_[156];
731   static const uint8_t table24_14_emit_[66];
732   static const uint8_t table24_15_emit_[156];
733   static const uint8_t table24_16_emit_[66];
734   static const uint8_t table24_17_emit_[156];
735   static const uint8_t table24_18_emit_[66];
736   static const uint8_t table24_19_emit_[156];
737   static const uint8_t table24_20_emit_[204];
738   static const uint8_t table24_21_emit_[204];
739   static const uint8_t table24_22_emit_[204];
740   static const uint8_t table24_23_emit_[204];
741   static const uint8_t table24_24_emit_[204];
742   static const uint8_t table24_25_emit_[204];
743   static const uint8_t table24_26_emit_[204];
744   static const uint8_t table24_27_emit_[204];
745   static const uint8_t table24_28_emit_[204];
746   static const uint8_t table24_29_emit_[204];
747   static const uint8_t table24_30_emit_[204];
748   static const uint8_t table24_31_emit_[204];
749   static const uint8_t table24_32_emit_[204];
750   static const uint8_t table24_33_emit_[204];
751   static const uint8_t table24_34_emit_[204];
752   static const uint8_t table24_35_emit_[204];
753   static const uint8_t table24_36_emit_[204];
754   static const uint8_t table24_37_emit_[204];
755   static const uint8_t table24_38_emit_[204];
756   static const uint8_t table24_39_emit_[204];
757   static const uint8_t table24_40_emit_[204];
758   static const uint8_t table24_41_emit_[204];
759   static const uint8_t table24_42_emit_[204];
760   static const uint8_t table24_43_emit_[204];
761   static const uint8_t table24_44_emit_[204];
762   static const uint8_t table24_45_emit_[204];
763   static const uint8_t table24_46_emit_[216];
764   static const uint8_t table24_47_emit_[216];
765   static const uint8_t table24_48_emit_[216];
766   static const uint8_t table24_49_emit_[216];
767   static const uint8_t table24_50_emit_[216];
768   static const uint8_t table24_51_emit_[216];
769   static const uint8_t table24_52_emit_[216];
770   static const uint8_t table24_53_emit_[216];
771   static const uint8_t table24_54_emit_[216];
772   static const uint8_t table24_55_emit_[216];
773   static const uint8_t table24_56_emit_[216];
774   static const uint8_t table24_57_emit_[216];
775   static const uint8_t table24_58_emit_[216];
776   static const uint8_t table24_59_emit_[216];
777   static const uint8_t table24_60_emit_[216];
778   static const uint8_t table24_61_emit_[216];
779   static const uint8_t table24_62_emit_[120];
780   static const uint8_t table24_63_emit_[91];
781   static const uint16_t table24_63_ops_[128];
782   static const uint8_t table24_64_emit_[204];
783   static const uint8_t table24_65_emit_[204];
784   static const uint8_t table24_66_emit_[204];
785   static const uint8_t table24_67_emit_[204];
786   static const uint8_t table24_68_emit_[204];
787   static const uint8_t table24_69_emit_[204];
788   static const uint8_t table24_70_emit_[204];
789   static const uint8_t table24_71_emit_[204];
790   static const uint8_t table24_72_emit_[204];
791   static const uint8_t table24_73_emit_[204];
792   static const uint8_t table24_74_emit_[216];
793   static const uint8_t table24_75_emit_[216];
794   static const uint8_t table24_76_emit_[216];
795   static const uint8_t table24_77_emit_[216];
796   static const uint8_t table24_78_emit_[216];
797   static const uint8_t table24_79_emit_[216];
798   static const uint8_t table24_80_emit_[216];
799   static const uint8_t table24_81_emit_[216];
800   static const uint8_t table24_82_emit_[216];
801   static const uint8_t table24_83_emit_[216];
802   static const uint8_t table24_84_emit_[216];
803   static const uint8_t table24_85_emit_[216];
804   static const uint8_t table24_86_emit_[216];
805   static const uint8_t table24_87_emit_[120];
806   static const uint8_t table24_88_emit_[120];
807   static const uint8_t table24_89_emit_[120];
808   static const uint8_t table24_90_emit_[120];
809   static const uint8_t table24_91_emit_[120];
810   static const uint8_t table24_92_emit_[120];
811   static const uint8_t table24_93_emit_[120];
812   static const uint8_t table24_94_emit_[120];
813   static const uint8_t table24_95_emit_[31];
814   static const uint16_t table24_95_ops_[128];
815   static const uint8_t table24_96_emit_[204];
816   static const uint8_t table24_97_emit_[204];
817   static const uint8_t table24_98_emit_[204];
818   static const uint8_t table24_99_emit_[204];
819   static const uint8_t table24_100_emit_[204];
820   static const uint8_t table24_101_emit_[204];
821   static const uint8_t table24_102_emit_[204];
822   static const uint8_t table24_103_emit_[204];
823   static const uint8_t table24_104_emit_[204];
824   static const uint8_t table24_105_emit_[204];
825   static const uint8_t table24_106_emit_[216];
826   static const uint8_t table24_107_emit_[216];
827   static const uint8_t table24_108_emit_[216];
828   static const uint8_t table24_109_emit_[216];
829   static const uint8_t table24_110_emit_[216];
830   static const uint8_t table24_111_emit_[216];
831   static const uint8_t table24_112_emit_[216];
832   static const uint8_t table24_113_emit_[216];
833   static const uint8_t table24_114_emit_[216];
834   static const uint8_t table24_115_emit_[216];
835   static const uint8_t table24_116_emit_[216];
836   static const uint8_t table24_117_emit_[216];
837   static const uint8_t table24_118_emit_[216];
838   static const uint8_t table24_119_emit_[120];
839   static const uint8_t table24_120_emit_[120];
840   static const uint8_t table24_121_emit_[120];
841   static const uint8_t table24_122_emit_[120];
842   static const uint8_t table24_123_emit_[120];
843   static const uint8_t table24_124_emit_[120];
844   static const uint8_t table24_125_emit_[120];
845   static const uint8_t table24_126_emit_[120];
846   static const uint8_t table24_127_emit_[32];
847   static const uint16_t table24_127_ops_[128];
848   static const uint8_t table24_128_emit_[216];
849   static const uint8_t table24_129_emit_[216];
850   static const uint8_t table24_130_emit_[216];
851   static const uint8_t table24_131_emit_[216];
852   static const uint8_t table24_132_emit_[216];
853   static const uint8_t table24_133_emit_[120];
854   static const uint8_t table24_134_emit_[120];
855   static const uint8_t table24_135_emit_[120];
856   static const uint8_t table24_136_emit_[120];
857   static const uint8_t table24_137_emit_[120];
858   static const uint8_t table24_138_emit_[120];
859   static const uint8_t table24_139_emit_[68];
860   static const uint8_t table24_140_emit_[16];
861   static const uint8_t table24_141_emit_[16];
862   static const uint8_t table24_142_emit_[16];
863   static const uint8_t table24_143_emit_[36];
864   static const uint8_t table24_144_emit_[216];
865   static const uint8_t table24_145_emit_[216];
866   static const uint8_t table24_146_emit_[216];
867   static const uint8_t table24_147_emit_[216];
868   static const uint8_t table24_148_emit_[216];
869   static const uint8_t table24_149_emit_[120];
870   static const uint8_t table24_150_emit_[120];
871   static const uint8_t table24_151_emit_[120];
872   static const uint8_t table24_152_emit_[120];
873   static const uint8_t table24_153_emit_[120];
874   static const uint8_t table24_154_emit_[120];
875   static const uint8_t table24_155_emit_[68];
876   static const uint8_t table24_156_emit_[16];
877   static const uint8_t table24_157_emit_[16];
878   static const uint8_t table24_158_emit_[16];
879   static const uint8_t table24_159_emit_[36];
880   static const uint8_t table24_160_emit_[216];
881   static const uint8_t table24_161_emit_[216];
882   static const uint8_t table24_162_emit_[216];
883   static const uint8_t table24_163_emit_[216];
884   static const uint8_t table24_164_emit_[216];
885   static const uint8_t table24_165_emit_[120];
886   static const uint8_t table24_166_emit_[120];
887   static const uint8_t table24_167_emit_[120];
888   static const uint8_t table24_168_emit_[120];
889   static const uint8_t table24_169_emit_[120];
890   static const uint8_t table24_170_emit_[120];
891   static const uint8_t table24_171_emit_[68];
892   static const uint8_t table24_172_emit_[16];
893   static const uint8_t table24_173_emit_[16];
894   static const uint8_t table24_174_emit_[16];
895   static const uint8_t table24_175_emit_[36];
896   static const uint8_t table24_176_emit_[216];
897   static const uint8_t table24_177_emit_[216];
898   static const uint8_t table24_178_emit_[216];
899   static const uint8_t table24_179_emit_[216];
900   static const uint8_t table24_180_emit_[216];
901   static const uint8_t table24_181_emit_[120];
902   static const uint8_t table24_182_emit_[120];
903   static const uint8_t table24_183_emit_[120];
904   static const uint8_t table24_184_emit_[120];
905   static const uint8_t table24_185_emit_[120];
906   static const uint8_t table24_186_emit_[120];
907   static const uint8_t table24_187_emit_[68];
908   static const uint8_t table24_188_emit_[16];
909   static const uint8_t table24_189_emit_[16];
910   static const uint8_t table24_190_emit_[16];
911   static const uint8_t table24_191_emit_[36];
912   static const uint8_t table24_192_emit_[216];
913   static const uint8_t table24_193_emit_[216];
914   static const uint8_t table24_194_emit_[216];
915   static const uint8_t table24_195_emit_[216];
916   static const uint8_t table24_196_emit_[216];
917   static const uint8_t table24_197_emit_[120];
918   static const uint8_t table24_198_emit_[120];
919   static const uint8_t table24_199_emit_[120];
920   static const uint8_t table24_200_emit_[120];
921   static const uint8_t table24_201_emit_[120];
922   static const uint8_t table24_202_emit_[120];
923   static const uint8_t table24_203_emit_[68];
924   static const uint8_t table24_204_emit_[16];
925   static const uint8_t table24_205_emit_[16];
926   static const uint8_t table24_206_emit_[16];
927   static const uint8_t table24_207_emit_[36];
928   static const uint8_t table24_208_emit_[216];
929   static const uint8_t table24_209_emit_[216];
930   static const uint8_t table24_210_emit_[216];
931   static const uint8_t table24_211_emit_[216];
932   static const uint8_t table24_212_emit_[216];
933   static const uint8_t table24_213_emit_[120];
934   static const uint8_t table24_214_emit_[120];
935   static const uint8_t table24_215_emit_[120];
936   static const uint8_t table24_216_emit_[120];
937   static const uint8_t table24_217_emit_[120];
938   static const uint8_t table24_218_emit_[120];
939   static const uint8_t table24_219_emit_[68];
940   static const uint8_t table24_220_emit_[16];
941   static const uint8_t table24_221_emit_[16];
942   static const uint8_t table24_222_emit_[16];
943   static const uint8_t table24_223_emit_[36];
944   static const uint8_t table24_224_emit_[120];
945   static const uint8_t table24_225_emit_[120];
946   static const uint8_t table24_226_emit_[68];
947   static const uint8_t table24_227_emit_[16];
948   static const uint8_t table24_228_emit_[16];
949   static const uint8_t table24_229_emit_[20];
950   static const uint8_t table24_230_emit_[32];
951   static const uint8_t table24_231_emit_[46];
952   static const uint8_t table24_232_emit_[120];
953   static const uint8_t table24_233_emit_[120];
954   static const uint8_t table24_234_emit_[68];
955   static const uint8_t table24_235_emit_[16];
956   static const uint8_t table24_236_emit_[16];
957   static const uint8_t table24_237_emit_[20];
958   static const uint8_t table24_238_emit_[32];
959   static const uint8_t table24_239_emit_[46];
960   static const uint8_t table24_240_emit_[16];
961   static const uint8_t table24_241_emit_[28];
962   static const uint8_t table24_242_emit_[36];
963   static const uint8_t table24_243_emit_[68];
964   static const uint8_t table24_244_emit_[16];
965   static const uint8_t table24_245_emit_[28];
966   static const uint8_t table24_246_emit_[36];
967   static const uint8_t table24_247_emit_[68];
968   static const uint8_t table24_248_emit_[16];
969   static const uint8_t table24_249_emit_[28];
970   static const uint8_t table24_250_emit_[36];
971   static const uint8_t table24_251_emit_[68];
972   static const uint8_t table24_252_emit_[62];
973   static const uint16_t table24_252_ops_[128];
974   static const uint8_t table24_253_emit_[10];
975   static const uint16_t table24_253_ops_[128];
976   static const uint8_t table24_254_emit_[23];
977   static const uint16_t table24_254_ops_[128];
978   static const uint8_t table24_255_emit_[53];
979   static const uint16_t table24_255_ops_[128];
980   static const uint8_t* const table24_emit_[256];
981   static const uint16_t* const table24_ops_[256];
982   static const uint8_t table10_0_emit_[1];
983   static const uint32_t table10_0_inner_[1];
984   static const uint8_t table10_0_outer_[512];
985   static const uint8_t table10_32_emit_[1];
986   static const uint32_t table10_32_inner_[1];
987   static const uint8_t table10_48_emit_[1];
988   static const uint8_t table10_64_emit_[1];
989   static const uint32_t table10_64_inner_[1];
990   static const uint8_t table10_72_emit_[1];
991   static const uint8_t table10_80_emit_[1];
992   static const uint8_t table10_88_emit_[1];
993   static const uint8_t table10_96_emit_[1];
994   static const uint8_t table10_104_emit_[1];
995   static const uint8_t table10_112_emit_[1];
996   static const uint32_t table10_112_inner_[1];
997   static const uint8_t table10_116_emit_[1];
998   static const uint8_t table10_120_emit_[1];
999   static const uint32_t table10_120_inner_[1];
1000   static const uint8_t table10_122_emit_[1];
1001   static const uint8_t table10_124_emit_[1];
1002   static const uint32_t table10_126_inner_[15];
1003   static const uint8_t table10_126_outer_[512];
1004   static const uint8_t table10_127_emit_[80];
1005   static const uint32_t table10_127_inner_[96];
1006   static const uint8_t table10_127_outer_[512];
1007   static const uint8_t* const table10_emit_[128];
1008   static const uint32_t* const table10_inner_[128];
1009   static const uint8_t* const table10_outer_[128];
1010   static const uint8_t table36_0_emit_[8];
1011   static const uint8_t table36_0_inner_[8];
1012   static const uint8_t table40_0_inner_[7];
1013   static const uint8_t table43_0_emit_[7];
1014   static const uint8_t table43_0_inner_[8];
1015   static const uint8_t table44_0_inner_[9];
1016   static const uint8_t table44_0_outer_[16];
1017   static const uint8_t table42_0_emit_[10];
1018   static const uint8_t table42_0_ops_[32];
1019 };
1020 template <typename F>
1021 class HuffDecoder : public HuffDecoderCommon {
1022  public:
HuffDecoder(F sink,const uint8_t * begin,const uint8_t * end)1023   HuffDecoder(F sink, const uint8_t* begin, const uint8_t* end)
1024       : sink_(sink), begin_(begin), end_(end) {}
Run()1025   bool Run() {
1026     while (!done_) {
1027       if (!RefillTo9()) {
1028         Done0();
1029         break;
1030       }
1031       const auto index = (buffer_ >> (buffer_len_ - 9)) & 0x1ff;
1032       const auto op = GetOp1(index);
1033       const int consumed = op & 15;
1034       buffer_len_ -= consumed;
1035       const auto emit_ofs = op >> 7;
1036       switch ((op >> 4) & 7) {
1037         case 0: {
1038           sink_(GetEmit1(index, emit_ofs + 0));
1039           break;
1040         }
1041         case 1: {
1042           DecodeStep0();
1043           break;
1044         }
1045         case 2: {
1046           DecodeStep1();
1047           break;
1048         }
1049         case 3: {
1050           DecodeStep2();
1051           break;
1052         }
1053         case 4: {
1054           DecodeStep3();
1055           break;
1056         }
1057       }
1058     }
1059     return ok_;
1060   }
1061 
1062  private:
RefillTo9()1063   bool RefillTo9() {
1064     switch (buffer_len_) {
1065       case 0: {
1066         return Read2to8Bytes();
1067       }
1068       case 1:
1069       case 2:
1070       case 3:
1071       case 4:
1072       case 5:
1073       case 6:
1074       case 7:
1075       case 8: {
1076         return Read1to7Bytes();
1077       }
1078     }
1079     return true;
1080   }
Read2to8Bytes()1081   bool Read2to8Bytes() {
1082     switch (end_ - begin_) {
1083       case 0:
1084       case 1: {
1085         return false;
1086       }
1087       case 2: {
1088         Fill2();
1089         return true;
1090       }
1091       case 3: {
1092         Fill3();
1093         return true;
1094       }
1095       case 4: {
1096         Fill4();
1097         return true;
1098       }
1099       case 5: {
1100         Fill5();
1101         return true;
1102       }
1103       case 6: {
1104         Fill6();
1105         return true;
1106       }
1107       case 7: {
1108         Fill7();
1109         return true;
1110       }
1111       default: {
1112         Fill8();
1113         return true;
1114       }
1115     }
1116   }
Fill2()1117   void Fill2() {
1118     buffer_ = (buffer_ << 16) | (static_cast<uint64_t>(begin_[0]) << 8) |
1119               (static_cast<uint64_t>(begin_[1]) << 0);
1120     begin_ += 2;
1121     buffer_len_ += 16;
1122   }
Fill3()1123   void Fill3() {
1124     buffer_ = (buffer_ << 24) | (static_cast<uint64_t>(begin_[0]) << 16) |
1125               (static_cast<uint64_t>(begin_[1]) << 8) |
1126               (static_cast<uint64_t>(begin_[2]) << 0);
1127     begin_ += 3;
1128     buffer_len_ += 24;
1129   }
Fill4()1130   void Fill4() {
1131     buffer_ = (buffer_ << 32) | (static_cast<uint64_t>(begin_[0]) << 24) |
1132               (static_cast<uint64_t>(begin_[1]) << 16) |
1133               (static_cast<uint64_t>(begin_[2]) << 8) |
1134               (static_cast<uint64_t>(begin_[3]) << 0);
1135     begin_ += 4;
1136     buffer_len_ += 32;
1137   }
Fill5()1138   void Fill5() {
1139     buffer_ = (buffer_ << 40) | (static_cast<uint64_t>(begin_[0]) << 32) |
1140               (static_cast<uint64_t>(begin_[1]) << 24) |
1141               (static_cast<uint64_t>(begin_[2]) << 16) |
1142               (static_cast<uint64_t>(begin_[3]) << 8) |
1143               (static_cast<uint64_t>(begin_[4]) << 0);
1144     begin_ += 5;
1145     buffer_len_ += 40;
1146   }
Fill6()1147   void Fill6() {
1148     buffer_ = (buffer_ << 48) | (static_cast<uint64_t>(begin_[0]) << 40) |
1149               (static_cast<uint64_t>(begin_[1]) << 32) |
1150               (static_cast<uint64_t>(begin_[2]) << 24) |
1151               (static_cast<uint64_t>(begin_[3]) << 16) |
1152               (static_cast<uint64_t>(begin_[4]) << 8) |
1153               (static_cast<uint64_t>(begin_[5]) << 0);
1154     begin_ += 6;
1155     buffer_len_ += 48;
1156   }
Fill7()1157   void Fill7() {
1158     buffer_ = (buffer_ << 56) | (static_cast<uint64_t>(begin_[0]) << 48) |
1159               (static_cast<uint64_t>(begin_[1]) << 40) |
1160               (static_cast<uint64_t>(begin_[2]) << 32) |
1161               (static_cast<uint64_t>(begin_[3]) << 24) |
1162               (static_cast<uint64_t>(begin_[4]) << 16) |
1163               (static_cast<uint64_t>(begin_[5]) << 8) |
1164               (static_cast<uint64_t>(begin_[6]) << 0);
1165     begin_ += 7;
1166     buffer_len_ += 56;
1167   }
Fill8()1168   void Fill8() {
1169     buffer_ = 0 | (static_cast<uint64_t>(begin_[0]) << 56) |
1170               (static_cast<uint64_t>(begin_[1]) << 48) |
1171               (static_cast<uint64_t>(begin_[2]) << 40) |
1172               (static_cast<uint64_t>(begin_[3]) << 32) |
1173               (static_cast<uint64_t>(begin_[4]) << 24) |
1174               (static_cast<uint64_t>(begin_[5]) << 16) |
1175               (static_cast<uint64_t>(begin_[6]) << 8) |
1176               (static_cast<uint64_t>(begin_[7]) << 0);
1177     begin_ += 8;
1178     buffer_len_ += 64;
1179   }
Read1to7Bytes()1180   bool Read1to7Bytes() {
1181     switch (end_ - begin_) {
1182       case 0: {
1183         return false;
1184       }
1185       case 1: {
1186         Fill1();
1187         return true;
1188       }
1189       case 2: {
1190         Fill2();
1191         return true;
1192       }
1193       case 3: {
1194         Fill3();
1195         return true;
1196       }
1197       case 4: {
1198         Fill4();
1199         return true;
1200       }
1201       case 5: {
1202         Fill5();
1203         return true;
1204       }
1205       case 6: {
1206         Fill6();
1207         return true;
1208       }
1209       default: {
1210         Fill7();
1211         return true;
1212       }
1213     }
1214   }
Fill1()1215   void Fill1() {
1216     buffer_ = (buffer_ << 8) | (static_cast<uint64_t>(begin_[0]) << 0);
1217     begin_ += 1;
1218     buffer_len_ += 8;
1219   }
Done0()1220   void Done0() {
1221     done_ = true;
1222     switch (end_ - begin_) {
1223       case 1: {
1224         Fill1();
1225         break;
1226       }
1227     }
1228     switch (buffer_len_) {
1229       case 1:
1230       case 2:
1231       case 3:
1232       case 4: {
1233         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
1234         return;
1235       }
1236       case 5: {
1237         const auto index = buffer_ & 31;
1238         const auto op = GetOp2(index);
1239         switch (op & 3) {
1240           case 0: {
1241             sink_(GetEmit2(index, (op >> 2) + 0));
1242             break;
1243           }
1244           case 1: {
1245             ok_ = false;
1246             break;
1247           }
1248         }
1249         return;
1250       }
1251       case 6: {
1252         const auto index = buffer_ & 63;
1253         const auto op = GetOp3(index);
1254         switch (op & 3) {
1255           case 0: {
1256             ok_ = false;
1257             break;
1258           }
1259           case 1: {
1260             sink_(GetEmit3(index, (op >> 2) + 0));
1261             break;
1262           }
1263         }
1264         return;
1265       }
1266       case 7: {
1267         const auto index = buffer_ & 127;
1268         const auto op = GetOp4(index);
1269         switch (op & 3) {
1270           case 0: {
1271             ok_ = false;
1272             break;
1273           }
1274           case 1: {
1275             sink_(GetEmit4(index, (op >> 2) + 0));
1276             break;
1277           }
1278         }
1279         return;
1280       }
1281       case 8: {
1282         const auto index = buffer_ & 255;
1283         const auto op = GetOp5(index);
1284         switch (op & 3) {
1285           case 0: {
1286             ok_ = false;
1287             break;
1288           }
1289           case 1: {
1290             sink_(GetEmit5(index, (op >> 2) + 0));
1291             break;
1292           }
1293         }
1294         return;
1295       }
1296       case 0: {
1297         return;
1298       }
1299     }
1300   }
DecodeStep0()1301   void DecodeStep0() {
1302     if (!RefillTo1()) {
1303       Done1();
1304       return;
1305     }
1306     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1307     const auto op = GetOp6(index);
1308     const int consumed = op & 1;
1309     buffer_len_ -= consumed;
1310     const auto emit_ofs = op >> 1;
1311     sink_(GetEmit6(index, emit_ofs + 0));
1312   }
RefillTo1()1313   bool RefillTo1() {
1314     switch (buffer_len_) {
1315       case 0: {
1316         return Read1to8Bytes();
1317       }
1318     }
1319     return true;
1320   }
Read1to8Bytes()1321   bool Read1to8Bytes() {
1322     switch (end_ - begin_) {
1323       case 0: {
1324         return false;
1325       }
1326       case 1: {
1327         Fill1();
1328         return true;
1329       }
1330       case 2: {
1331         Fill2();
1332         return true;
1333       }
1334       case 3: {
1335         Fill3();
1336         return true;
1337       }
1338       case 4: {
1339         Fill4();
1340         return true;
1341       }
1342       case 5: {
1343         Fill5();
1344         return true;
1345       }
1346       case 6: {
1347         Fill6();
1348         return true;
1349       }
1350       case 7: {
1351         Fill7();
1352         return true;
1353       }
1354       default: {
1355         Fill8();
1356         return true;
1357       }
1358     }
1359   }
Done1()1360   void Done1() {
1361     done_ = true;
1362     ok_ = false;
1363   }
DecodeStep1()1364   void DecodeStep1() {
1365     if (!RefillTo1()) {
1366       Done2();
1367       return;
1368     }
1369     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1370     const auto op = GetOp7(index);
1371     const int consumed = op & 1;
1372     buffer_len_ -= consumed;
1373     const auto emit_ofs = op >> 1;
1374     sink_(GetEmit7(index, emit_ofs + 0));
1375   }
Done2()1376   void Done2() {
1377     done_ = true;
1378     ok_ = false;
1379   }
DecodeStep2()1380   void DecodeStep2() {
1381     if (!RefillTo2()) {
1382       Done3();
1383       return;
1384     }
1385     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
1386     const auto op = GetOp8(index);
1387     const int consumed = op & 3;
1388     buffer_len_ -= consumed;
1389     const auto emit_ofs = op >> 2;
1390     sink_(GetEmit8(index, emit_ofs + 0));
1391   }
RefillTo2()1392   bool RefillTo2() {
1393     switch (buffer_len_) {
1394       case 0: {
1395         return Read1to8Bytes();
1396       }
1397       case 1: {
1398         return Read1to7Bytes();
1399       }
1400     }
1401     return true;
1402   }
Done3()1403   void Done3() {
1404     done_ = true;
1405     switch (buffer_len_) {
1406       case 1: {
1407         const auto index = buffer_ & 1;
1408         const auto op = GetOp9(index);
1409         switch (op & 1) {
1410           case 0: {
1411             sink_(GetEmit9(index, (op >> 1) + 0));
1412             break;
1413           }
1414           case 1: {
1415             ok_ = false;
1416             break;
1417           }
1418         }
1419         return;
1420       }
1421       case 0: {
1422         ok_ = false;
1423         return;
1424       }
1425     }
1426   }
DecodeStep3()1427   void DecodeStep3() {
1428     if (!RefillTo16()) {
1429       Done4();
1430       return;
1431     }
1432     const auto index = (buffer_ >> (buffer_len_ - 16)) & 0xffff;
1433     const auto op = GetOp10(index);
1434     const int consumed = op & 31;
1435     buffer_len_ -= consumed;
1436     const auto emit_ofs = op >> 10;
1437     switch ((op >> 5) & 31) {
1438       case 0: {
1439         sink_(GetEmit10(index, emit_ofs + 0));
1440         break;
1441       }
1442       case 1: {
1443         DecodeStep4();
1444         break;
1445       }
1446       case 2: {
1447         DecodeStep5();
1448         break;
1449       }
1450       case 3: {
1451         DecodeStep6();
1452         break;
1453       }
1454       case 4: {
1455         DecodeStep7();
1456         break;
1457       }
1458       case 5: {
1459         DecodeStep8();
1460         break;
1461       }
1462       case 6: {
1463         DecodeStep9();
1464         break;
1465       }
1466       case 7: {
1467         DecodeStep10();
1468         break;
1469       }
1470       case 8: {
1471         DecodeStep17();
1472         break;
1473       }
1474       case 9: {
1475         DecodeStep11();
1476         break;
1477       }
1478       case 10: {
1479         DecodeStep12();
1480         break;
1481       }
1482       case 11: {
1483         DecodeStep13();
1484         break;
1485       }
1486       case 12: {
1487         DecodeStep14();
1488         break;
1489       }
1490       case 13: {
1491         DecodeStep18();
1492         break;
1493       }
1494       case 14: {
1495         DecodeStep15();
1496         break;
1497       }
1498       case 15: {
1499         DecodeStep16();
1500         break;
1501       }
1502       case 16: {
1503         DecodeStep19();
1504         break;
1505       }
1506     }
1507   }
RefillTo16()1508   bool RefillTo16() {
1509     switch (buffer_len_) {
1510       case 0: {
1511         return Read2to8Bytes();
1512       }
1513       case 1:
1514       case 2:
1515       case 3:
1516       case 4:
1517       case 5:
1518       case 6:
1519       case 7: {
1520         return Read2to7Bytes();
1521       }
1522       case 8: {
1523         return Read1to7Bytes();
1524       }
1525       case 9:
1526       case 10:
1527       case 11:
1528       case 12:
1529       case 13:
1530       case 14:
1531       case 15: {
1532         return Read1to6Bytes();
1533       }
1534     }
1535     return true;
1536   }
Read2to7Bytes()1537   bool Read2to7Bytes() {
1538     switch (end_ - begin_) {
1539       case 0:
1540       case 1: {
1541         return false;
1542       }
1543       case 2: {
1544         Fill2();
1545         return true;
1546       }
1547       case 3: {
1548         Fill3();
1549         return true;
1550       }
1551       case 4: {
1552         Fill4();
1553         return true;
1554       }
1555       case 5: {
1556         Fill5();
1557         return true;
1558       }
1559       case 6: {
1560         Fill6();
1561         return true;
1562       }
1563       default: {
1564         Fill7();
1565         return true;
1566       }
1567     }
1568   }
Read1to6Bytes()1569   bool Read1to6Bytes() {
1570     switch (end_ - begin_) {
1571       case 0: {
1572         return false;
1573       }
1574       case 1: {
1575         Fill1();
1576         return true;
1577       }
1578       case 2: {
1579         Fill2();
1580         return true;
1581       }
1582       case 3: {
1583         Fill3();
1584         return true;
1585       }
1586       case 4: {
1587         Fill4();
1588         return true;
1589       }
1590       case 5: {
1591         Fill5();
1592         return true;
1593       }
1594       default: {
1595         Fill6();
1596         return true;
1597       }
1598     }
1599   }
Done4()1600   void Done4() {
1601     done_ = true;
1602     switch (end_ - begin_) {
1603       case 1: {
1604         Fill1();
1605         break;
1606       }
1607     }
1608     switch (buffer_len_) {
1609       case 1: {
1610         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
1611         return;
1612       }
1613       case 2: {
1614         const auto index = buffer_ & 3;
1615         const auto op = GetOp11(index);
1616         switch (op & 3) {
1617           case 0: {
1618             sink_(GetEmit11(index, (op >> 2) + 0));
1619             break;
1620           }
1621           case 1: {
1622             ok_ = false;
1623             break;
1624           }
1625         }
1626         return;
1627       }
1628       case 3: {
1629         const auto index = buffer_ & 7;
1630         const auto op = GetOp12(index);
1631         switch (op & 3) {
1632           case 0: {
1633             ok_ = false;
1634             break;
1635           }
1636           case 1: {
1637             sink_(GetEmit12(index, (op >> 2) + 0));
1638             break;
1639           }
1640         }
1641         return;
1642       }
1643       case 4: {
1644         const auto index = buffer_ & 15;
1645         const auto op = GetOp13(index);
1646         switch (op & 3) {
1647           case 0: {
1648             ok_ = false;
1649             break;
1650           }
1651           case 1: {
1652             sink_(GetEmit13(index, (op >> 2) + 0));
1653             break;
1654           }
1655         }
1656         return;
1657       }
1658       case 5: {
1659         const auto index = buffer_ & 31;
1660         const auto op = GetOp14(index);
1661         switch (op & 3) {
1662           case 0: {
1663             ok_ = false;
1664             break;
1665           }
1666           case 1: {
1667             sink_(GetEmit14(index, (op >> 2) + 0));
1668             break;
1669           }
1670         }
1671         return;
1672       }
1673       case 6: {
1674         const auto index = buffer_ & 63;
1675         const auto op = GetOp15(index);
1676         switch (op & 3) {
1677           case 0: {
1678             ok_ = false;
1679             break;
1680           }
1681           case 1: {
1682             sink_(GetEmit15(index, (op >> 2) + 0));
1683             break;
1684           }
1685         }
1686         return;
1687       }
1688       case 7: {
1689         const auto index = buffer_ & 127;
1690         const auto op = GetOp16(index);
1691         switch (op & 3) {
1692           case 0: {
1693             sink_(GetEmit16(index, (op >> 2) + 0));
1694             sink_(GetEmit16(index, (op >> 2) + 1));
1695             break;
1696           }
1697           case 1: {
1698             ok_ = false;
1699             break;
1700           }
1701           case 2: {
1702             sink_(GetEmit16(index, (op >> 2) + 0));
1703             break;
1704           }
1705         }
1706         return;
1707       }
1708       case 8: {
1709         const auto index = buffer_ & 255;
1710         const auto op = GetOp17(index);
1711         switch (op & 3) {
1712           case 0: {
1713             ok_ = false;
1714             break;
1715           }
1716           case 1: {
1717             sink_(GetEmit17(index, (op >> 2) + 0));
1718             sink_(GetEmit17(index, (op >> 2) + 1));
1719             break;
1720           }
1721           case 2: {
1722             sink_(GetEmit17(index, (op >> 2) + 0));
1723             break;
1724           }
1725         }
1726         return;
1727       }
1728       case 9: {
1729         const auto index = buffer_ & 511;
1730         const auto op = GetOp18(index);
1731         switch (op & 3) {
1732           case 0: {
1733             ok_ = false;
1734             break;
1735           }
1736           case 1: {
1737             sink_(GetEmit18(index, (op >> 2) + 0));
1738             sink_(GetEmit18(index, (op >> 2) + 1));
1739             break;
1740           }
1741           case 2: {
1742             sink_(GetEmit18(index, (op >> 2) + 0));
1743             break;
1744           }
1745         }
1746         return;
1747       }
1748       case 10: {
1749         const auto index = buffer_ & 1023;
1750         const auto op = GetOp19(index);
1751         switch (op & 3) {
1752           case 0: {
1753             ok_ = false;
1754             break;
1755           }
1756           case 1: {
1757             sink_(GetEmit19(index, (op >> 2) + 0));
1758             sink_(GetEmit19(index, (op >> 2) + 1));
1759             break;
1760           }
1761           case 2: {
1762             sink_(GetEmit19(index, (op >> 2) + 0));
1763             break;
1764           }
1765         }
1766         return;
1767       }
1768       case 11: {
1769         const auto index = buffer_ & 2047;
1770         const auto op = GetOp20(index);
1771         switch (op & 3) {
1772           case 0: {
1773             ok_ = false;
1774             break;
1775           }
1776           case 1: {
1777             sink_(GetEmit20(index, (op >> 2) + 0));
1778             sink_(GetEmit20(index, (op >> 2) + 1));
1779             break;
1780           }
1781           case 2: {
1782             sink_(GetEmit20(index, (op >> 2) + 0));
1783             break;
1784           }
1785         }
1786         return;
1787       }
1788       case 12: {
1789         const auto index = buffer_ & 4095;
1790         const auto op = GetOp21(index);
1791         switch (op & 7) {
1792           case 0: {
1793             sink_(GetEmit21(index, (op >> 3) + 0));
1794             sink_(GetEmit21(index, (op >> 3) + 1));
1795             sink_(GetEmit21(index, (op >> 3) + 2));
1796             break;
1797           }
1798           case 1: {
1799             ok_ = false;
1800             break;
1801           }
1802           case 2: {
1803             sink_(GetEmit21(index, (op >> 3) + 0));
1804             sink_(GetEmit21(index, (op >> 3) + 1));
1805             break;
1806           }
1807           case 3: {
1808             sink_(GetEmit21(index, (op >> 3) + 0));
1809             break;
1810           }
1811         }
1812         return;
1813       }
1814       case 13: {
1815         const auto index = buffer_ & 8191;
1816         const auto op = GetOp22(index);
1817         switch (op & 7) {
1818           case 0: {
1819             ok_ = false;
1820             break;
1821           }
1822           case 1: {
1823             sink_(GetEmit22(index, (op >> 3) + 0));
1824             sink_(GetEmit22(index, (op >> 3) + 1));
1825             sink_(GetEmit22(index, (op >> 3) + 2));
1826             break;
1827           }
1828           case 2: {
1829             sink_(GetEmit22(index, (op >> 3) + 0));
1830             sink_(GetEmit22(index, (op >> 3) + 1));
1831             break;
1832           }
1833           case 3: {
1834             sink_(GetEmit22(index, (op >> 3) + 0));
1835             break;
1836           }
1837         }
1838         return;
1839       }
1840       case 14: {
1841         const auto index = buffer_ & 16383;
1842         const auto op = GetOp23(index);
1843         switch (op & 7) {
1844           case 0: {
1845             ok_ = false;
1846             break;
1847           }
1848           case 1: {
1849             sink_(GetEmit23(index, (op >> 3) + 0));
1850             sink_(GetEmit23(index, (op >> 3) + 1));
1851             sink_(GetEmit23(index, (op >> 3) + 2));
1852             break;
1853           }
1854           case 2: {
1855             sink_(GetEmit23(index, (op >> 3) + 0));
1856             sink_(GetEmit23(index, (op >> 3) + 1));
1857             break;
1858           }
1859           case 3: {
1860             sink_(GetEmit23(index, (op >> 3) + 0));
1861             break;
1862           }
1863         }
1864         return;
1865       }
1866       case 15: {
1867         const auto index = buffer_ & 32767;
1868         const auto op = GetOp24(index);
1869         switch (op & 7) {
1870           case 0: {
1871             ok_ = false;
1872             break;
1873           }
1874           case 1: {
1875             sink_(GetEmit24(index, (op >> 3) + 0));
1876             sink_(GetEmit24(index, (op >> 3) + 1));
1877             sink_(GetEmit24(index, (op >> 3) + 2));
1878             break;
1879           }
1880           case 2: {
1881             sink_(GetEmit24(index, (op >> 3) + 0));
1882             sink_(GetEmit24(index, (op >> 3) + 1));
1883             break;
1884           }
1885           case 3: {
1886             sink_(GetEmit24(index, (op >> 3) + 0));
1887             break;
1888           }
1889         }
1890         return;
1891       }
1892       case 0: {
1893         return;
1894       }
1895     }
1896   }
DecodeStep4()1897   void DecodeStep4() {
1898     if (!RefillTo1()) {
1899       Done5();
1900       return;
1901     }
1902     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1903     const auto op = GetOp25(index);
1904     const int consumed = op & 1;
1905     buffer_len_ -= consumed;
1906     const auto emit_ofs = op >> 1;
1907     sink_(GetEmit25(index, emit_ofs + 0));
1908   }
Done5()1909   void Done5() {
1910     done_ = true;
1911     ok_ = false;
1912   }
DecodeStep5()1913   void DecodeStep5() {
1914     if (!RefillTo1()) {
1915       Done6();
1916       return;
1917     }
1918     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1919     const auto op = GetOp26(index);
1920     const int consumed = op & 1;
1921     buffer_len_ -= consumed;
1922     const auto emit_ofs = op >> 1;
1923     sink_(GetEmit26(index, emit_ofs + 0));
1924   }
Done6()1925   void Done6() {
1926     done_ = true;
1927     ok_ = false;
1928   }
DecodeStep6()1929   void DecodeStep6() {
1930     if (!RefillTo1()) {
1931       Done7();
1932       return;
1933     }
1934     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1935     const auto op = GetOp27(index);
1936     const int consumed = op & 1;
1937     buffer_len_ -= consumed;
1938     const auto emit_ofs = op >> 1;
1939     sink_(GetEmit27(index, emit_ofs + 0));
1940   }
Done7()1941   void Done7() {
1942     done_ = true;
1943     ok_ = false;
1944   }
DecodeStep7()1945   void DecodeStep7() {
1946     if (!RefillTo1()) {
1947       Done8();
1948       return;
1949     }
1950     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1951     const auto op = GetOp28(index);
1952     const int consumed = op & 1;
1953     buffer_len_ -= consumed;
1954     const auto emit_ofs = op >> 1;
1955     sink_(GetEmit28(index, emit_ofs + 0));
1956   }
Done8()1957   void Done8() {
1958     done_ = true;
1959     ok_ = false;
1960   }
DecodeStep8()1961   void DecodeStep8() {
1962     if (!RefillTo1()) {
1963       Done9();
1964       return;
1965     }
1966     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1967     const auto op = GetOp29(index);
1968     const int consumed = op & 1;
1969     buffer_len_ -= consumed;
1970     const auto emit_ofs = op >> 1;
1971     sink_(GetEmit29(index, emit_ofs + 0));
1972   }
Done9()1973   void Done9() {
1974     done_ = true;
1975     ok_ = false;
1976   }
DecodeStep9()1977   void DecodeStep9() {
1978     if (!RefillTo1()) {
1979       Done10();
1980       return;
1981     }
1982     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1983     const auto op = GetOp30(index);
1984     const int consumed = op & 1;
1985     buffer_len_ -= consumed;
1986     const auto emit_ofs = op >> 1;
1987     sink_(GetEmit30(index, emit_ofs + 0));
1988   }
Done10()1989   void Done10() {
1990     done_ = true;
1991     ok_ = false;
1992   }
DecodeStep10()1993   void DecodeStep10() {
1994     if (!RefillTo1()) {
1995       Done11();
1996       return;
1997     }
1998     const auto index = (buffer_ >> (buffer_len_ - 1)) & 0x1;
1999     const auto op = GetOp31(index);
2000     const int consumed = op & 1;
2001     buffer_len_ -= consumed;
2002     const auto emit_ofs = op >> 1;
2003     sink_(GetEmit31(index, emit_ofs + 0));
2004   }
Done11()2005   void Done11() {
2006     done_ = true;
2007     ok_ = false;
2008   }
DecodeStep11()2009   void DecodeStep11() {
2010     if (!RefillTo2()) {
2011       Done12();
2012       return;
2013     }
2014     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
2015     const auto op = GetOp32(index);
2016     const int consumed = op & 3;
2017     buffer_len_ -= consumed;
2018     const auto emit_ofs = op >> 2;
2019     sink_(GetEmit32(index, emit_ofs + 0));
2020   }
Done12()2021   void Done12() {
2022     done_ = true;
2023     switch (buffer_len_) {
2024       case 1:
2025       case 0: {
2026         ok_ = false;
2027         return;
2028       }
2029     }
2030   }
DecodeStep12()2031   void DecodeStep12() {
2032     if (!RefillTo2()) {
2033       Done13();
2034       return;
2035     }
2036     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
2037     const auto op = GetOp33(index);
2038     const int consumed = op & 3;
2039     buffer_len_ -= consumed;
2040     const auto emit_ofs = op >> 2;
2041     sink_(GetEmit33(index, emit_ofs + 0));
2042   }
Done13()2043   void Done13() {
2044     done_ = true;
2045     switch (buffer_len_) {
2046       case 1:
2047       case 0: {
2048         ok_ = false;
2049         return;
2050       }
2051     }
2052   }
DecodeStep13()2053   void DecodeStep13() {
2054     if (!RefillTo2()) {
2055       Done14();
2056       return;
2057     }
2058     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
2059     const auto op = GetOp34(index);
2060     const int consumed = op & 3;
2061     buffer_len_ -= consumed;
2062     const auto emit_ofs = op >> 2;
2063     sink_(GetEmit34(index, emit_ofs + 0));
2064   }
Done14()2065   void Done14() {
2066     done_ = true;
2067     switch (buffer_len_) {
2068       case 1:
2069       case 0: {
2070         ok_ = false;
2071         return;
2072       }
2073     }
2074   }
DecodeStep14()2075   void DecodeStep14() {
2076     if (!RefillTo2()) {
2077       Done15();
2078       return;
2079     }
2080     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
2081     const auto op = GetOp35(index);
2082     const int consumed = op & 3;
2083     buffer_len_ -= consumed;
2084     const auto emit_ofs = op >> 2;
2085     sink_(GetEmit35(index, emit_ofs + 0));
2086   }
Done15()2087   void Done15() {
2088     done_ = true;
2089     switch (buffer_len_) {
2090       case 1:
2091       case 0: {
2092         ok_ = false;
2093         return;
2094       }
2095     }
2096   }
DecodeStep15()2097   void DecodeStep15() {
2098     if (!RefillTo3()) {
2099       Done16();
2100       return;
2101     }
2102     const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7;
2103     const auto op = GetOp36(index);
2104     const int consumed = op & 3;
2105     buffer_len_ -= consumed;
2106     const auto emit_ofs = op >> 2;
2107     sink_(GetEmit36(index, emit_ofs + 0));
2108   }
RefillTo3()2109   bool RefillTo3() {
2110     switch (buffer_len_) {
2111       case 0: {
2112         return Read1to8Bytes();
2113       }
2114       case 1:
2115       case 2: {
2116         return Read1to7Bytes();
2117       }
2118     }
2119     return true;
2120   }
Done16()2121   void Done16() {
2122     done_ = true;
2123     switch (buffer_len_) {
2124       case 1:
2125       case 2:
2126       case 0: {
2127         ok_ = false;
2128         return;
2129       }
2130     }
2131   }
DecodeStep16()2132   void DecodeStep16() {
2133     if (!RefillTo3()) {
2134       Done17();
2135       return;
2136     }
2137     const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7;
2138     const auto op = GetOp37(index);
2139     const int consumed = op & 3;
2140     buffer_len_ -= consumed;
2141     const auto emit_ofs = op >> 2;
2142     sink_(GetEmit37(index, emit_ofs + 0));
2143   }
Done17()2144   void Done17() {
2145     done_ = true;
2146     switch (buffer_len_) {
2147       case 1:
2148       case 2:
2149       case 0: {
2150         ok_ = false;
2151         return;
2152       }
2153     }
2154   }
DecodeStep17()2155   void DecodeStep17() {
2156     if (!RefillTo2()) {
2157       Done18();
2158       return;
2159     }
2160     const auto index = (buffer_ >> (buffer_len_ - 2)) & 0x3;
2161     const auto op = GetOp38(index);
2162     const int consumed = op & 3;
2163     buffer_len_ -= consumed;
2164     const auto emit_ofs = op >> 2;
2165     sink_(GetEmit38(index, emit_ofs + 0));
2166   }
Done18()2167   void Done18() {
2168     done_ = true;
2169     switch (buffer_len_) {
2170       case 1: {
2171         const auto index = buffer_ & 1;
2172         const auto op = GetOp39(index);
2173         switch (op & 1) {
2174           case 0: {
2175             sink_(GetEmit39(index, (op >> 1) + 0));
2176             break;
2177           }
2178           case 1: {
2179             ok_ = false;
2180             break;
2181           }
2182         }
2183         return;
2184       }
2185       case 0: {
2186         ok_ = false;
2187         return;
2188       }
2189     }
2190   }
DecodeStep18()2191   void DecodeStep18() {
2192     if (!RefillTo3()) {
2193       Done19();
2194       return;
2195     }
2196     const auto index = (buffer_ >> (buffer_len_ - 3)) & 0x7;
2197     const auto op = GetOp40(index);
2198     const int consumed = op & 3;
2199     buffer_len_ -= consumed;
2200     const auto emit_ofs = op >> 2;
2201     sink_(GetEmit40(index, emit_ofs + 0));
2202   }
Done19()2203   void Done19() {
2204     done_ = true;
2205     switch (buffer_len_) {
2206       case 1:
2207       case 0: {
2208         ok_ = false;
2209         return;
2210       }
2211       case 2: {
2212         const auto index = buffer_ & 3;
2213         const auto op = GetOp41(index);
2214         switch (op & 1) {
2215           case 0: {
2216             sink_(GetEmit41(index, (op >> 1) + 0));
2217             break;
2218           }
2219           case 1: {
2220             ok_ = false;
2221             break;
2222           }
2223         }
2224         return;
2225       }
2226     }
2227   }
DecodeStep19()2228   void DecodeStep19() {
2229     if (!RefillTo5()) {
2230       Done20();
2231       return;
2232     }
2233     const auto index = (buffer_ >> (buffer_len_ - 5)) & 0x1f;
2234     const auto op = GetOp42(index);
2235     const int consumed = op & 7;
2236     buffer_len_ -= consumed;
2237     const auto emit_ofs = op >> 4;
2238     switch ((op >> 3) & 1) {
2239       case 0: {
2240         sink_(GetEmit42(index, emit_ofs + 0));
2241         break;
2242       }
2243       case 1: {
2244         begin_ = end_;
2245         buffer_len_ = 0;
2246         break;
2247       }
2248     }
2249   }
RefillTo5()2250   bool RefillTo5() {
2251     switch (buffer_len_) {
2252       case 0: {
2253         return Read1to8Bytes();
2254       }
2255       case 1:
2256       case 2:
2257       case 3:
2258       case 4: {
2259         return Read1to7Bytes();
2260       }
2261     }
2262     return true;
2263   }
Done20()2264   void Done20() {
2265     done_ = true;
2266     switch (buffer_len_) {
2267       case 1:
2268       case 2: {
2269         ok_ = (buffer_ & ((1 << buffer_len_) - 1)) == (1 << buffer_len_) - 1;
2270         return;
2271       }
2272       case 3: {
2273         const auto index = buffer_ & 7;
2274         const auto op = GetOp43(index);
2275         switch (op & 1) {
2276           case 0: {
2277             sink_(GetEmit43(index, (op >> 1) + 0));
2278             break;
2279           }
2280         }
2281         return;
2282       }
2283       case 4: {
2284         const auto index = buffer_ & 15;
2285         const auto op = GetOp44(index);
2286         switch (op & 3) {
2287           case 0: {
2288             ok_ = false;
2289             break;
2290           }
2291           case 1: {
2292             sink_(GetEmit44(index, (op >> 2) + 0));
2293             break;
2294           }
2295         }
2296         return;
2297       }
2298       case 0: {
2299         return;
2300       }
2301     }
2302   }
2303   F sink_;
2304   const uint8_t* begin_;
2305   const uint8_t* const end_;
2306   uint64_t buffer_ = 0;
2307   int buffer_len_ = 0;
2308   bool ok_ = true;
2309   bool done_ = false;
2310 };
2311 }  // namespace geometry_9_16_5
2312 }  // namespace grpc_core
2313 #endif  // GRPC_TEST_CPP_MICROBENCHMARKS_HUFFMAN_GEOMETRIES_DECODE_HUFF_9_16_5_H
2314