Download lexnet_kernel.h from alpindale/lexnet: direct link, hf CLI and curl.
- Browser
- Download file 21.8 kB
-
https://huggingface.co/alpindale/lexnet/resolve/main/lexnet_kernel.h
- Command line
-
hf download hf://alpindale/lexnet/lexnet_kernel.h
-
curl -L -o lexnet_kernel.h https://huggingface.co/alpindale/lexnet/resolve/main/lexnet_kernel.h
21.8 kB
| /* Generated by codegen.py from cnet.py: the network's ARCHITECTURE compiled to C. | |
| * No weight values live here. lexnet.c loads them from lexnet_weights.bin, gathers the | |
| * ones this kernel references into kc[]/kb[] via K_COEF/K_BIAS, and checks that the | |
| * file's structure hash equals K_STRUCT_HASH before running this kernel. */ | |
| static inline double clip1(double x) { return fmin(fmax(x, 0.0), 1.0); } | |
| static inline double relu(double x) { return fmax(x, 0.0); } | |
| static inline double clipn(double x, double hi) { return fmin(fmax(x, 0.0), hi); } | |
| typedef struct { double C, L, S, Q, P, E, sf, star_in, closed, Sclose, Qclose, ls, bsP, W, N, d, h1, h2; } FState; | |
| typedef struct { double W, copen2, lps, kwc, tyc, cst, fnc; } BState; | |
| /* initial forward state is h0 from the weight file, in FSTATE order */ | |
| static inline void k_init_state(FState *s, const double *h0) { memcpy(s, h0, sizeof *s); } | |
| /* One forward step: character features x, previous state p -> new state s, | |
| * plus the 15 bits the backward pass needs, packed into a uint16. */ | |
| static inline uint16_t k_fwd_step(const double *restrict kc, const double *restrict kb, | |
| const double *restrict x, const FState *restrict p, FState *restrict s) { | |
| const double u_contC = clip1(kb[0] + kc[0] * p->C + kc[1] * p->closed); | |
| const double u_contL = clip1(kb[1] + kc[2] * p->L + kc[3] * x[5]); | |
| const double u_contS = clip1(kb[2] + kc[4] * p->S + kc[5] * p->Sclose + kc[6] * x[5]); | |
| const double u_contQ = clip1(kb[3] + kc[7] * p->Q + kc[8] * p->Qclose + kc[9] * x[5]); | |
| const double u_contP = clip1(kb[4] + kc[10] * p->P + kc[11] * x[5] + kc[12] * p->bsP); | |
| const double u_opened = clip1(kb[5] + kc[13] * x[10] + kc[14] * p->sf); | |
| const double u_lo = clip1(kb[6] + kc[15] * x[9] + kc[16] * p->sf); | |
| const double u_closed = clip1(kb[7] + kc[17] * x[9] + kc[18] * p->star_in); | |
| const double u_ls = clip1(kb[8] + kc[19] * x[5] + kc[20] * p->ls + kc[21] * x[4]); | |
| const double u_wcont = clip1(kb[9] + kc[22] * p->W + kc[23] * x[2]); | |
| const double u_wstart0 = clip1(kb[10] + kc[24] * x[0] + kc[25] * p->N); | |
| const double u_nany = clip1(kb[11] + kc[26] * p->N + kc[27] * x[1]); | |
| const double u_d = clipn(kb[12] + kc[28] * p->d + kc[29] * p->W, 14.0); | |
| const double u_lt8 = clip1(kb[13] + kc[30] * p->d + kc[31] * p->W); | |
| const double u_ge8 = clip1(kb[14] + kc[32] * p->W + kc[33] * p->d); | |
| const double u_ge14 = clip1(kb[15] + kc[34] * p->W + kc[35] * p->d); | |
| const double u_C = clip1(kb[16] + kc[36] * u_opened + kc[37] * u_contC); | |
| const double u_L = clip1(kb[17] + kc[38] * u_lo + kc[39] * u_contL); | |
| const double u_copen2 = clip1(kb[18] + kc[40] * u_opened + kc[41] * u_lo); | |
| const double u_S = clip1(kb[19] + kc[42] * x[6] + kc[43] * u_contC + kc[44] * u_contL + kc[45] * u_contS + kc[46] * u_contQ); | |
| const double u_Q = clip1(kb[20] + kc[47] * x[7] + kc[48] * u_contC + kc[49] * u_contL + kc[50] * u_contS + kc[51] * u_contQ); | |
| const double u_P = clip1(kb[21] + kc[52] * x[11] + kc[53] * p->ls + kc[54] * u_contC + kc[55] * u_contL + kc[56] * u_contS + kc[57] * u_contQ + kc[58] * u_contP); | |
| const double u_Sclose = clip1(kb[22] + kc[59] * u_contS + kc[60] * x[6] + kc[61] * p->E); | |
| const double u_Qclose = clip1(kb[23] + kc[62] * u_contQ + kc[63] * x[7] + kc[64] * p->E); | |
| const double u_E = clip1(kb[24] + kc[65] * u_contS + kc[66] * u_contQ + kc[67] * x[8] + kc[68] * p->E); | |
| const double u_star_in = clip1(kb[25] + kc[69] * x[10] + kc[70] * u_contC); | |
| const double u_sf = clip1(kb[26] + kc[71] * x[9] + kc[72] * u_contC + kc[73] * u_contL + kc[74] * u_contS + kc[75] * u_contQ + kc[76] * u_lo); | |
| const double u_bsP = clip1(kb[27] + kc[77] * u_contP + kc[78] * x[8]); | |
| const double u_W = clip1(kb[28] + kc[79] * u_wcont + kc[80] * u_wstart0 + kc[81] * u_contC + kc[82] * u_contL + kc[83] * u_contS + kc[84] * u_contQ); | |
| const double u_N = clip1(kb[29] + kc[85] * x[3] + kc[86] * u_nany + kc[87] * u_wcont + kc[88] * u_wstart0 + kc[89] * u_contC + kc[90] * u_contL + kc[91] * u_contS + kc[92] * u_contQ); | |
| const double u_g1 = relu(kb[30] + kc[93] * p->h1 + kc[94] * p->W + kc[95] * x[2] + kc[96] * u_lt8); | |
| const double u_c1 = relu(kb[31] + kc[97] * x[13] + kc[98] * u_lt8); | |
| const double u_hold1 = relu(kb[32] + kc[99] * p->h1 + kc[100] * u_lt8); | |
| const double u_g2 = relu(kb[33] + kc[101] * p->h2 + kc[102] * x[2] + kc[103] * u_ge8 + kc[104] * u_ge14); | |
| const double u_c2 = relu(kb[34] + kc[105] * x[13] + kc[106] * u_ge8 + kc[107] * u_ge14); | |
| const double u_hold2 = relu(kb[35] + kc[108] * p->h2 + kc[109] * u_ge8 + kc[110] * u_ge14 + kc[111] * p->W); | |
| const double u_h1 = relu(kb[36] + kc[112] * u_g1 + kc[113] * u_c1 + kc[114] * u_hold1); | |
| const double u_h2 = relu(kb[37] + kc[115] * u_g2 + kc[116] * u_c2 + kc[117] * u_hold2); | |
| double ge1[74]; | |
| for (int k = 0; k < 74; k++) ge1[k] = clip1(kb[38 + k] + kc[118 + k] * u_h1); | |
| double le1[74]; | |
| for (int k = 0; k < 74; k++) le1[k] = clip1(kb[112 + k] + kc[192 + k] * u_h1); | |
| double ge2[7]; | |
| for (int k = 0; k < 7; k++) ge2[k] = clip1(kb[186 + k] + kc[266 + k] * u_h2); | |
| double le2[7]; | |
| for (int k = 0; k < 7; k++) le2[k] = clip1(kb[193 + k] + kc[273 + k] * u_h2); | |
| const double u_KW_short = clip1(kb[200] + kc[280] * u_h2 + kc[281] * ge1[0] + kc[282] * le1[0] + kc[283] * ge1[1] + kc[284] * le1[1] + kc[285] * ge1[2] + kc[286] * le1[2] + kc[287] * ge1[5] + kc[288] * le1[5] + kc[289] * ge1[7] + kc[290] * le1[7] + kc[291] * ge1[9] + kc[292] * le1[9] + kc[293] * ge1[10] + kc[294] * le1[10] + kc[295] * ge1[11] + kc[296] * le1[11] + kc[297] * ge1[17] + kc[298] * le1[17] + kc[299] * ge1[18] + kc[300] * le1[18] + kc[301] * ge1[24] + kc[302] * le1[24] + kc[303] * ge1[25] + kc[304] * le1[25] + kc[305] * ge1[28] + kc[306] * le1[28] + kc[307] * ge1[29] + kc[308] * le1[29] + kc[309] * ge1[31] + kc[310] * le1[31] + kc[311] * ge1[33] + kc[312] * le1[33] + kc[313] * ge1[35] + kc[314] * le1[35] + kc[315] * ge1[36] + kc[316] * le1[36] + kc[317] * ge1[37] + kc[318] * le1[37] + kc[319] * ge1[39] + kc[320] * le1[39] + kc[321] * ge1[40] + kc[322] * le1[40] + kc[323] * ge1[41] + kc[324] * le1[41] + kc[325] * ge1[42] + kc[326] * le1[42] + kc[327] * ge1[48] + kc[328] * le1[48] + kc[329] * ge1[52] + kc[330] * le1[52] + kc[331] * ge1[54] + kc[332] * le1[54] + kc[333] * ge1[57] + kc[334] * le1[57] + kc[335] * ge1[58] + kc[336] * le1[58] + kc[337] * ge1[66] + kc[338] * le1[66] + kc[339] * ge1[67] + kc[340] * le1[67] + kc[341] * ge1[68] + kc[342] * le1[68] + kc[343] * ge1[70] + kc[344] * le1[70]); | |
| const double u_is__Noreturn = clip1(kb[201] + kc[345] * ge1[71] + kc[346] * le1[71] + kc[347] * ge2[0] + kc[348] * le2[0]); | |
| const double u_is__Static_assert = clip1(kb[202] + kc[349] * ge1[72] + kc[350] * le1[72] + kc[351] * ge2[6] + kc[352] * le2[6]); | |
| const double u_is__Thread_local = clip1(kb[203] + kc[353] * ge1[73] + kc[354] * le1[73] + kc[355] * ge2[4] + kc[356] * le2[4]); | |
| const double u_is_constexpr = clip1(kb[204] + kc[357] * ge1[53] + kc[358] * le1[53] + kc[359] * ge2[1] + kc[360] * le2[1]); | |
| const double u_is_static_assert = clip1(kb[205] + kc[361] * ge1[59] + kc[362] * le1[59] + kc[363] * ge2[5] + kc[364] * le2[5]); | |
| const double u_is_thread_local = clip1(kb[206] + kc[365] * ge1[60] + kc[366] * le1[60] + kc[367] * ge2[3] + kc[368] * le2[3]); | |
| const double u_KW = clip1(kb[207] + kc[369] * u_KW_short + kc[370] * u_is__Noreturn + kc[371] * u_is__Static_assert + kc[372] * u_is__Thread_local + kc[373] * u_is_constexpr + kc[374] * u_is_static_assert + kc[375] * u_is_thread_local); | |
| const double u_TY_short = clip1(kb[208] + kc[376] * u_h2 + kc[377] * ge1[3] + kc[378] * le1[3] + kc[379] * ge1[6] + kc[380] * le1[6] + kc[381] * ge1[8] + kc[382] * le1[8] + kc[383] * ge1[12] + kc[384] * le1[12] + kc[385] * ge1[14] + kc[386] * le1[14] + kc[387] * ge1[15] + kc[388] * le1[15] + kc[389] * ge1[20] + kc[390] * le1[20] + kc[391] * ge1[21] + kc[392] * le1[21] + kc[393] * ge1[22] + kc[394] * le1[22] + kc[395] * ge1[23] + kc[396] * le1[23] + kc[397] * ge1[26] + kc[398] * le1[26] + kc[399] * ge1[27] + kc[400] * le1[27] + kc[401] * ge1[30] + kc[402] * le1[30] + kc[403] * ge1[32] + kc[404] * le1[32] + kc[405] * ge1[34] + kc[406] * le1[34] + kc[407] * ge1[38] + kc[408] * le1[38] + kc[409] * ge1[43] + kc[410] * le1[43] + kc[411] * ge1[44] + kc[412] * le1[44] + kc[413] * ge1[45] + kc[414] * le1[45] + kc[415] * ge1[47] + kc[416] * le1[47] + kc[417] * ge1[49] + kc[418] * le1[49] + kc[419] * ge1[50] + kc[420] * le1[50] + kc[421] * ge1[51] + kc[422] * le1[51] + kc[423] * ge1[55] + kc[424] * le1[55] + kc[425] * ge1[62] + kc[426] * le1[62] + kc[427] * ge1[63] + kc[428] * le1[63] + kc[429] * ge1[64] + kc[430] * le1[64] + kc[431] * ge1[65] + kc[432] * le1[65] + kc[433] * ge1[69] + kc[434] * le1[69]); | |
| const double u_is_ptrdiff_t = clip1(kb[209] + kc[435] * ge1[56] + kc[436] * le1[56] + kc[437] * ge2[2] + kc[438] * le2[2]); | |
| const double u_is_uintptr_t = clip1(kb[210] + kc[439] * ge1[61] + kc[440] * le1[61] + kc[441] * ge2[2] + kc[442] * le2[2]); | |
| const double u_TY = clip1(kb[211] + kc[443] * u_TY_short + kc[444] * u_is_ptrdiff_t + kc[445] * u_is_uintptr_t); | |
| const double u_CONST_short = clip1(kb[212] + kc[446] * u_h2 + kc[447] * ge1[4] + kc[448] * le1[4] + kc[449] * ge1[13] + kc[450] * le1[13] + kc[451] * ge1[16] + kc[452] * le1[16] + kc[453] * ge1[19] + kc[454] * le1[19] + kc[455] * ge1[46] + kc[456] * le1[46]); | |
| const double u_CONST = clip1(kb[213] + kc[457] * u_CONST_short); | |
| s->C = u_C; | |
| s->L = u_L; | |
| s->S = u_S; | |
| s->Q = u_Q; | |
| s->P = u_P; | |
| s->E = u_E; | |
| s->sf = u_sf; | |
| s->star_in = u_star_in; | |
| s->closed = u_closed; | |
| s->Sclose = u_Sclose; | |
| s->Qclose = u_Qclose; | |
| s->ls = u_ls; | |
| s->bsP = u_bsP; | |
| s->W = u_W; | |
| s->N = u_N; | |
| s->d = u_d; | |
| s->h1 = u_h1; | |
| s->h2 = u_h2; | |
| return (uint16_t)(((uint16_t)(u_C != 0.0) << 0) | ((uint16_t)(u_L != 0.0) << 1) | ((uint16_t)(u_S != 0.0) << 2) | ((uint16_t)(u_Q != 0.0) << 3) | ((uint16_t)(u_P != 0.0) << 4) | ((uint16_t)(u_W != 0.0) << 5) | ((uint16_t)(u_N != 0.0) << 6) | ((uint16_t)(u_KW != 0.0) << 7) | ((uint16_t)(u_TY != 0.0) << 8) | ((uint16_t)(u_CONST != 0.0) << 9) | ((uint16_t)(u_copen2 != 0.0) << 10) | ((uint16_t)(x[9] != 0.0) << 11) | ((uint16_t)(x[4] != 0.0) << 12) | ((uint16_t)(x[5] != 0.0) << 13) | ((uint16_t)(x[12] != 0.0) << 14)); | |
| } | |
| /* One backward step: forward bits + right-neighbour state r -> new state s, class id. */ | |
| static inline int k_bwd_step(const double *restrict kc, const double *restrict kb, | |
| uint16_t bits, const BState *restrict r, BState *restrict s) { | |
| const double f_C = (double)((bits >> 0) & 1); | |
| const double f_L = (double)((bits >> 1) & 1); | |
| const double f_S = (double)((bits >> 2) & 1); | |
| const double f_Q = (double)((bits >> 3) & 1); | |
| const double f_P = (double)((bits >> 4) & 1); | |
| const double f_W = (double)((bits >> 5) & 1); | |
| const double f_N = (double)((bits >> 6) & 1); | |
| const double f_KW = (double)((bits >> 7) & 1); | |
| const double f_TY = (double)((bits >> 8) & 1); | |
| const double f_CONST = (double)((bits >> 9) & 1); | |
| const double f_copen2 = (double)((bits >> 10) & 1); | |
| const double f_slash = (double)((bits >> 11) & 1); | |
| const double f_space = (double)((bits >> 12) & 1); | |
| const double f_nl = (double)((bits >> 13) & 1); | |
| const double f_lparen = (double)((bits >> 14) & 1); | |
| const double u_lps = clip1(kb[214] + kc[458] * f_lparen + kc[459] * f_space + kc[460] * r->lps); | |
| const double u_cmt = clip1(kb[215] + kc[461] * f_C + kc[462] * f_L + kc[463] * f_slash + kc[464] * r->copen2); | |
| const double u_kwc_end = clip1(kb[216] + kc[465] * f_W + kc[466] * r->W + kc[467] * f_KW); | |
| const double u_kwc_carry = clip1(kb[217] + kc[468] * f_W + kc[469] * r->W + kc[470] * r->kwc); | |
| const double u_tyc_end = clip1(kb[218] + kc[471] * f_W + kc[472] * r->W + kc[473] * f_TY); | |
| const double u_tyc_carry = clip1(kb[219] + kc[474] * f_W + kc[475] * r->W + kc[476] * r->tyc); | |
| const double u_cst_end = clip1(kb[220] + kc[477] * f_W + kc[478] * r->W + kc[479] * f_CONST); | |
| const double u_cst_carry = clip1(kb[221] + kc[480] * f_W + kc[481] * r->W + kc[482] * r->cst); | |
| const double u_fnc_end = clip1(kb[222] + kc[483] * f_W + kc[484] * r->W + kc[485] * r->lps + kc[486] * f_KW + kc[487] * f_TY + kc[488] * f_CONST); | |
| const double u_fnc_carry = clip1(kb[223] + kc[489] * f_W + kc[490] * r->W + kc[491] * r->fnc); | |
| const double u_kwc = clip1(kb[224] + kc[492] * u_kwc_end + kc[493] * u_kwc_carry); | |
| const double u_tyc = clip1(kb[225] + kc[494] * u_tyc_end + kc[495] * u_tyc_carry); | |
| const double u_cst = clip1(kb[226] + kc[496] * u_cst_end + kc[497] * u_cst_carry); | |
| const double u_fnc = clip1(kb[227] + kc[498] * u_fnc_end + kc[499] * u_fnc_carry); | |
| s->W = f_W; | |
| s->copen2 = f_copen2; | |
| s->lps = u_lps; | |
| s->kwc = u_kwc; | |
| s->tyc = u_tyc; | |
| s->cst = u_cst; | |
| s->fnc = u_fnc; | |
| double logit[K_N_CLASSES]; | |
| logit[0] = kb[228]; | |
| logit[1] = kb[229] + kc[500] * u_kwc; | |
| logit[2] = kb[230] + kc[501] * u_tyc; | |
| logit[3] = kb[231] + kc[502] * u_fnc; | |
| logit[4] = kb[232] + kc[503] * f_W; | |
| logit[5] = kb[233] + kc[504] * u_cst + kc[505] * f_N; | |
| logit[6] = kb[234] + kc[506] * f_S; | |
| logit[7] = kb[235] + kc[507] * f_Q; | |
| logit[8] = kb[236] + kc[508] * u_cmt; | |
| logit[9] = kb[237] + kc[509] * f_P; | |
| logit[10] = kb[238] + kc[510] * f_space + kc[511] * f_nl; | |
| int best = 0; | |
| for (int k = 1; k < K_N_CLASSES; k++) if (logit[k] > logit[best]) best = k; | |
| return best; | |
| } | |
| /* Where each kc[i] / kb[i] comes from: {cell (0 fwd, 1 bwd, 2 head), layer, row, col} */ | |
| static const int32_t K_COEF[K_N_COEF][4] = { | |
| {0,0,0,14},{0,0,0,22},{0,0,1,15},{0,0,1,5},{0,0,2,16},{0,0,2,23},{0,0,2,5},{0,0,3,17},{0,0,3,24},{0,0,3,5},{0,0,4,18},{0,0,4,5},{0,0,4,26},{0,0,5,10},{0,0,5,20},{0,0,6,9},{0,0,6,20},{0,0,7,9},{0,0,7,21},{0,0,8,5},{0,0,8,25},{0,0,8,4},{0,0,9,27},{0,0,9,2},{0,0,10,0},{0,0,10,28},{0,0,11,28},{0,0,11,1},{0,0,12,29},{0,0,12,27},{0,0,13,29},{0,0,13,27},{0,0,14,27},{0,0,14,29},{0,0,15,27},{0,0,15,29},{0,1,0,5},{0,1,0,0},{0,1,1,6},{0,1,1,1},{0,1,2,5},{0,1,2,6},{0,1,3,20},{0,1,3,0},{0,1,3,1},{0,1,3,2},{0,1,3,3},{0,1,4,21},{0,1,4,0},{0,1,4,1},{0,1,4,2},{0,1,4,3},{0,1,5,25},{0,1,5,29},{0,1,5,0},{0,1,5,1},{0,1,5,2},{0,1,5,3},{0,1,5,4},{0,1,6,2},{0,1,6,20},{0,1,6,28},{0,1,7,3},{0,1,7,21},{0,1,7,28},{0,1,8,2},{0,1,8,3},{0,1,8,22},{0,1,8,28},{0,1,9,24},{0,1,9,0},{0,1,10,23},{0,1,10,0},{0,1,10,1},{0,1,10,2},{0,1,10,3},{0,1,10,6},{0,1,11,4},{0,1,11,22},{0,1,12,9},{0,1,12,10},{0,1,12,0},{0,1,12,1},{0,1,12,2},{0,1,12,3},{0,1,13,17},{0,1,13,11},{0,1,13,9},{0,1,13,10},{0,1,13,0},{0,1,13,1},{0,1,13,2},{0,1,13,3},{0,1,14,31},{0,1,14,30},{0,1,14,16},{0,1,14,13},{0,1,15,27},{0,1,15,13},{0,1,16,31},{0,1,16,13},{0,1,17,32},{0,1,17,16},{0,1,17,14},{0,1,17,15},{0,1,18,27},{0,1,18,14},{0,1,18,15},{0,1,19,32},{0,1,19,14},{0,1,19,15},{0,1,19,30},{0,2,0,14},{0,2,0,15},{0,2,0,16},{0,2,1,17},{0,2,1,18},{0,2,1,19},{0,3,12,0},{0,3,24,0},{0,3,20,0},{0,3,94,0},{0,3,160,0},{0,3,0,0},{0,3,106,0},{0,3,4,0},{0,3,88,0},{0,3,14,0},{0,3,16,0},{0,3,22,0},{0,3,96,0},{0,3,156,0},{0,3,104,0},{0,3,148,0},{0,3,152,0},{0,3,2,0},{0,3,6,0},{0,3,158,0},{0,3,92,0},{0,3,128,0},{0,3,130,0},{0,3,98,0},{0,3,44,0},{0,3,48,0},{0,3,108,0},{0,3,90,0},{0,3,18,0},{0,3,26,0},{0,3,132,0},{0,3,32,0},{0,3,100,0},{0,3,34,0},{0,3,112,0},{0,3,36,0},{0,3,38,0},{0,3,40,0},{0,3,126,0},{0,3,86,0},{0,3,70,0},{0,3,72,0},{0,3,10,0},{0,3,134,0},{0,3,136,0},{0,3,138,0},{0,3,154,0},{0,3,114,0},{0,3,42,0},{0,3,140,0},{0,3,150,0},{0,3,124,0},{0,3,54,0},{0,3,74,0},{0,3,8,0},{0,3,120,0},{0,3,116,0},{0,3,28,0},{0,3,30,0},{0,3,78,0},{0,3,82,0},{0,3,122,0},{0,3,142,0},{0,3,144,0},{0,3,146,0},{0,3,102,0},{0,3,46,0},{0,3,50,0},{0,3,52,0},{0,3,110,0},{0,3,56,0},{0,3,58,0},{0,3,62,0},{0,3,66,0},{0,3,13,0},{0,3,25,0},{0,3,21,0},{0,3,95,0},{0,3,161,0},{0,3,1,0},{0,3,107,0},{0,3,5,0},{0,3,89,0},{0,3,15,0},{0,3,17,0},{0,3,23,0},{0,3,97,0},{0,3,157,0},{0,3,105,0},{0,3,149,0},{0,3,153,0},{0,3,3,0},{0,3,7,0},{0,3,159,0},{0,3,93,0},{0,3,129,0},{0,3,131,0},{0,3,99,0},{0,3,45,0},{0,3,49,0},{0,3,109,0},{0,3,91,0},{0,3,19,0},{0,3,27,0},{0,3,133,0},{0,3,33,0},{0,3,101,0},{0,3,35,0},{0,3,113,0},{0,3,37,0},{0,3,39,0},{0,3,41,0},{0,3,127,0},{0,3,87,0},{0,3,71,0},{0,3,73,0},{0,3,11,0},{0,3,135,0},{0,3,137,0},{0,3,139,0},{0,3,155,0},{0,3,115,0},{0,3,43,0},{0,3,141,0},{0,3,151,0},{0,3,125,0},{0,3,55,0},{0,3,75,0},{0,3,9,0},{0,3,121,0},{0,3,117,0},{0,3,29,0},{0,3,31,0},{0,3,79,0},{0,3,83,0},{0,3,123,0},{0,3,143,0},{0,3,145,0},{0,3,147,0},{0,3,103,0},{0,3,47,0},{0,3,51,0},{0,3,53,0},{0,3,111,0},{0,3,57,0},{0,3,59,0},{0,3,63,0},{0,3,67,0},{0,3,60,1},{0,3,76,1},{0,3,118,1},{0,3,84,1},{0,3,68,1},{0,3,80,1},{0,3,64,1},{0,3,61,1},{0,3,77,1},{0,3,119,1},{0,3,85,1},{0,3,69,1},{0,3,81,1},{0,3,65,1},{0,4,0,163},{0,4,0,12},{0,4,0,13},{0,4,0,24},{0,4,0,25},{0,4,0,20},{0,4,0,21},{0,4,0,0},{0,4,0,1},{0,4,0,4},{0,4,0,5},{0,4,0,14},{0,4,0,15},{0,4,0,16},{0,4,0,17},{0,4,0,22},{0,4,0,23},{0,4,0,2},{0,4,0,3},{0,4,0,6},{0,4,0,7},{0,4,0,44},{0,4,0,45},{0,4,0,48},{0,4,0,49},{0,4,0,18},{0,4,0,19},{0,4,0,26},{0,4,0,27},{0,4,0,32},{0,4,0,33},{0,4,0,34},{0,4,0,35},{0,4,0,36},{0,4,0,37},{0,4,0,38},{0,4,0,39},{0,4,0,40},{0,4,0,41},{0,4,0,86},{0,4,0,87},{0,4,0,70},{0,4,0,71},{0,4,0,72},{0,4,0,73},{0,4,0,10},{0,4,0,11},{0,4,0,42},{0,4,0,43},{0,4,0,54},{0,4,0,55},{0,4,0,8},{0,4,0,9},{0,4,0,28},{0,4,0,29},{0,4,0,30},{0,4,0,31},{0,4,0,46},{0,4,0,47},{0,4,0,50},{0,4,0,51},{0,4,0,52},{0,4,0,53},{0,4,0,56},{0,4,0,57},{0,4,1,58},{0,4,1,59},{0,4,1,60},{0,4,1,61},{0,4,2,62},{0,4,2,63},{0,4,2,64},{0,4,2,65},{0,4,3,66},{0,4,3,67},{0,4,3,68},{0,4,3,69},{0,4,4,74},{0,4,4,75},{0,4,4,76},{0,4,4,77},{0,4,5,78},{0,4,5,79},{0,4,5,80},{0,4,5,81},{0,4,6,82},{0,4,6,83},{0,4,6,84},{0,4,6,85},{0,5,0,0},{0,5,0,1},{0,5,0,2},{0,5,0,3},{0,5,0,4},{0,5,0,5},{0,5,0,6},{0,4,7,163},{0,4,7,94},{0,4,7,95},{0,4,7,106},{0,4,7,107},{0,4,7,88},{0,4,7,89},{0,4,7,96},{0,4,7,97},{0,4,7,104},{0,4,7,105},{0,4,7,148},{0,4,7,149},{0,4,7,92},{0,4,7,93},{0,4,7,128},{0,4,7,129},{0,4,7,130},{0,4,7,131},{0,4,7,98},{0,4,7,99},{0,4,7,108},{0,4,7,109},{0,4,7,90},{0,4,7,91},{0,4,7,132},{0,4,7,133},{0,4,7,100},{0,4,7,101},{0,4,7,112},{0,4,7,113},{0,4,7,126},{0,4,7,127},{0,4,7,134},{0,4,7,135},{0,4,7,136},{0,4,7,137},{0,4,7,138},{0,4,7,139},{0,4,7,114},{0,4,7,115},{0,4,7,140},{0,4,7,141},{0,4,7,150},{0,4,7,151},{0,4,7,124},{0,4,7,125},{0,4,7,120},{0,4,7,121},{0,4,7,142},{0,4,7,143},{0,4,7,144},{0,4,7,145},{0,4,7,146},{0,4,7,147},{0,4,7,102},{0,4,7,103},{0,4,7,110},{0,4,7,111},{0,4,8,116},{0,4,8,117},{0,4,8,118},{0,4,8,119},{0,4,9,122},{0,4,9,123},{0,4,9,118},{0,4,9,119},{0,5,1,7},{0,5,1,8},{0,5,1,9},{0,4,10,163},{0,4,10,160},{0,4,10,161},{0,4,10,156},{0,4,10,157},{0,4,10,152},{0,4,10,153},{0,4,10,158},{0,4,10,159},{0,4,10,154},{0,4,10,155},{0,5,2,10},{1,0,0,14},{1,0,0,12},{1,0,0,17},{1,0,1,0},{1,0,1,1},{1,0,1,11},{1,0,1,16},{1,0,2,5},{1,0,2,15},{1,0,2,7},{1,0,3,5},{1,0,3,15},{1,0,3,18},{1,0,4,5},{1,0,4,15},{1,0,4,8},{1,0,5,5},{1,0,5,15},{1,0,5,19},{1,0,6,5},{1,0,6,15},{1,0,6,9},{1,0,7,5},{1,0,7,15},{1,0,7,20},{1,0,8,5},{1,0,8,15},{1,0,8,17},{1,0,8,7},{1,0,8,8},{1,0,8,9},{1,0,9,5},{1,0,9,15},{1,0,9,21},{1,1,0,2},{1,1,0,3},{1,1,1,4},{1,1,1,5},{1,1,2,6},{1,1,2,7},{1,1,3,8},{1,1,3,9},{2,0,1,0},{2,0,2,1},{2,0,3,3},{2,0,4,9},{2,0,5,2},{2,0,5,10},{2,0,6,6},{2,0,7,7},{2,0,8,5},{2,0,9,8},{2,0,10,12},{2,0,10,13} | |
| }; | |
| static const int32_t K_BIAS[K_N_BIAS][3] = { | |
| {0,0,0},{0,0,1},{0,0,2},{0,0,3},{0,0,4},{0,0,5},{0,0,6},{0,0,7},{0,0,8},{0,0,9},{0,0,10},{0,0,11},{0,0,12},{0,0,13},{0,0,14},{0,0,15},{0,1,0},{0,1,1},{0,1,2},{0,1,3},{0,1,4},{0,1,5},{0,1,6},{0,1,7},{0,1,8},{0,1,9},{0,1,10},{0,1,11},{0,1,12},{0,1,13},{0,1,14},{0,1,15},{0,1,16},{0,1,17},{0,1,18},{0,1,19},{0,2,0},{0,2,1},{0,3,12},{0,3,24},{0,3,20},{0,3,94},{0,3,160},{0,3,0},{0,3,106},{0,3,4},{0,3,88},{0,3,14},{0,3,16},{0,3,22},{0,3,96},{0,3,156},{0,3,104},{0,3,148},{0,3,152},{0,3,2},{0,3,6},{0,3,158},{0,3,92},{0,3,128},{0,3,130},{0,3,98},{0,3,44},{0,3,48},{0,3,108},{0,3,90},{0,3,18},{0,3,26},{0,3,132},{0,3,32},{0,3,100},{0,3,34},{0,3,112},{0,3,36},{0,3,38},{0,3,40},{0,3,126},{0,3,86},{0,3,70},{0,3,72},{0,3,10},{0,3,134},{0,3,136},{0,3,138},{0,3,154},{0,3,114},{0,3,42},{0,3,140},{0,3,150},{0,3,124},{0,3,54},{0,3,74},{0,3,8},{0,3,120},{0,3,116},{0,3,28},{0,3,30},{0,3,78},{0,3,82},{0,3,122},{0,3,142},{0,3,144},{0,3,146},{0,3,102},{0,3,46},{0,3,50},{0,3,52},{0,3,110},{0,3,56},{0,3,58},{0,3,62},{0,3,66},{0,3,13},{0,3,25},{0,3,21},{0,3,95},{0,3,161},{0,3,1},{0,3,107},{0,3,5},{0,3,89},{0,3,15},{0,3,17},{0,3,23},{0,3,97},{0,3,157},{0,3,105},{0,3,149},{0,3,153},{0,3,3},{0,3,7},{0,3,159},{0,3,93},{0,3,129},{0,3,131},{0,3,99},{0,3,45},{0,3,49},{0,3,109},{0,3,91},{0,3,19},{0,3,27},{0,3,133},{0,3,33},{0,3,101},{0,3,35},{0,3,113},{0,3,37},{0,3,39},{0,3,41},{0,3,127},{0,3,87},{0,3,71},{0,3,73},{0,3,11},{0,3,135},{0,3,137},{0,3,139},{0,3,155},{0,3,115},{0,3,43},{0,3,141},{0,3,151},{0,3,125},{0,3,55},{0,3,75},{0,3,9},{0,3,121},{0,3,117},{0,3,29},{0,3,31},{0,3,79},{0,3,83},{0,3,123},{0,3,143},{0,3,145},{0,3,147},{0,3,103},{0,3,47},{0,3,51},{0,3,53},{0,3,111},{0,3,57},{0,3,59},{0,3,63},{0,3,67},{0,3,60},{0,3,76},{0,3,118},{0,3,84},{0,3,68},{0,3,80},{0,3,64},{0,3,61},{0,3,77},{0,3,119},{0,3,85},{0,3,69},{0,3,81},{0,3,65},{0,4,0},{0,4,1},{0,4,2},{0,4,3},{0,4,4},{0,4,5},{0,4,6},{0,5,0},{0,4,7},{0,4,8},{0,4,9},{0,5,1},{0,4,10},{0,5,2},{1,0,0},{1,0,1},{1,0,2},{1,0,3},{1,0,4},{1,0,5},{1,0,6},{1,0,7},{1,0,8},{1,0,9},{1,1,0},{1,1,1},{1,1,2},{1,1,3},{2,0,0},{2,0,1},{2,0,2},{2,0,3},{2,0,4},{2,0,5},{2,0,6},{2,0,7},{2,0,8},{2,0,9},{2,0,10} | |
| }; | |