File size: 22,885 Bytes
beaedc8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | /* Generated by compile.py: the network's ARCHITECTURE as C. No weight values live here: pylexnet.c
* loads them, checks the structure hash and the guard inequalities, and gathers kc[]/kb[] by K_COEF/K_BIAS. */
#include <stdint.h>
#include <string.h>
#define K_STRUCT_HASH 0x5AB2AC2E97E0387CULL
#define K_N_FEATS 29
#define K_N_CLASSES 9
#define K_N_BITS 10
#ifndef CLIP
#define CLIP(x, hi) clipn((x), (hi))
static inline double clipn(double x, double hi) { x = x < 0.0 ? 0.0 : x; return x > hi ? hi : x; }
#endif
/* A tied, sorted threshold family is a step vector: unit k is 1 iff kb[k] + w*h >= 1, true for k < rank.
* The loader verifies integrality, tying and monotonicity, so a binary search gives the same values. */
static inline int k_rank(const double *kb, int n, double w, double h) {
int lo = 0, hi = n;
while (lo < hi) { int mid = (lo + hi) >> 1; if (kb[mid] + w * h >= 1.0) lo = mid + 1; else hi = mid; }
return lo;
}
typedef struct { double S, sq1, T, F, E, c, fo, FS, FD, oq1, oT, C, N, ee, W, d, pf, fp, cD, cC, cAt, atp, cDot, pos0, pos1, pos2, pos3, pos4, pos5, pos6, tail, A, e1, e2, e2d, e3, e3d, e3dd; } FState;
typedef struct { double u_reg_KW, u_reg_BI, u_reg_FN, u_reg_CL, u_reg_DEC, u_reg_STR, b_ev_KW, b_ev_BI, b_ev_FN, b_ev_CL, b_ev_DEC, b_ev_STR; } BState;
static inline void k_init_state(FState *s, const double *h0) { memcpy(s, h0, sizeof *s); }
static inline __attribute__((always_inline)) uint16_t k_fwd_step(const double *restrict kc, const double *restrict kb, const double *restrict kp, const double *restrict x,
const FState *restrict p, FState *restrict s) {
double u_wordch = 0.0, u_qmd = 0.0, u_qms = 0.0, u_c2 = 0.0, u_wend = 0.0, u_fieldopen = 0.0, u_pf_new = 0.0, u_S_eff = 0.0, u_fp_new = 0.0, u_sclose = 0.0, u_tclose = 0.0, u_tripleopen = 0.0, u_nlclose = 0.0, u_E_new = 0.0, u_fo_new = 0.0, u_C_new = 0.0, u_open = 0.0, u_open_f = 0.0, u_open_qs = 0.0, u_fieldclose = 0.0, u_inc = 0.0, u_dec = 0.0, u_S_new = 0.0, u_c_new = 0.0, u_T_new = 0.0, u_F_new = 0.0, u_sq1_new = 0.0, u_FS_new = 0.0, u_FD_new = 0.0, u_oq1_new = 0.0, u_oT_new = 0.0, u_lab_STR = 0.0, u_N_new = 0.0, u_ee_new = 0.0, u_W_new = 0.0, u_d_new = 0.0, u_pos0 = 0.0, u_pos1 = 0.0, u_pos2 = 0.0, u_pos3 = 0.0, u_pos4 = 0.0, u_pos5 = 0.0, u_pos6 = 0.0, u_tail = 0.0, u_a0 = 0.0, u_a1 = 0.0, u_a2 = 0.0, u_a3 = 0.0, u_a4 = 0.0, u_a5 = 0.0, u_a6 = 0.0, u_at_ = 0.0, u_A_new = 0.0, u_e1_new = 0.0, u_e2_new = 0.0, u_e3_new = 0.0, u_e2d_new = 0.0, u_e3d_new = 0.0, u_e3dd_new = 0.0, u_m3 = 0.0, u_SE = 0.0, u_ge1 = 0.0, u_le1 = 0.0, u_ge2 = 0.0, u_le2 = 0.0, u_ge3 = 0.0, u_le3 = 0.0, u_ge4 = 0.0, u_le4 = 0.0, u_ge5 = 0.0, u_le5 = 0.0, u_is_def = 0.0, u_is_class = 0.0, u_cD_new = 0.0, u_cC_new = 0.0, u_atp_new = 0.0, u_cAt_new = 0.0, u_cDot_new = 0.0, u_ev_DEC = 0.0, u_ev_CL = 0.0, u_ev_KW = 0.0, u_ev_FN = 0.0, u_ev_BI = 0.0, u_ev_STR = 0.0, u_lab_W = 0.0;
if ((p->W + x[13] + x[6] + x[7] + p->atp + p->cD + p->cC + p->cAt + p->cDot + x[15] + x[14] + p->fp + p->d + p->pos0 + p->pos1 + p->pos2 + p->pos3 + p->pos4 + p->pos5 + p->pos6 + p->tail + p->e2 + p->e3 + p->e3d) != 0.0) { /* all activations are >= 0 */
u_wordch = CLIP((kb[0] + kc[0] * x[13]), 1.0);
u_wend = CLIP(((kb[1] + kc[1] * p->W) + kc[2] * x[13]), 1.0);
u_pf_new = CLIP((((kb[2] + kc[3] * x[15]) + (kc[4] * x[14] + kc[5] * p->pf)) + (kc[6] * p->W + kc[7] * p->d)), 1.0);
u_e2d_new = CLIP((kb[3] + kc[8] * p->e2), 117026723984.0);
u_e3d_new = CLIP((kb[4] + kc[9] * p->e3), 117026723984.0);
u_e3dd_new = CLIP((kb[5] + kc[10] * p->e3d), 117026723984.0);
u_m3 = CLIP((kb[6] + kc[11] * p->d), 3.0);
u_fp_new = CLIP(((kb[7] + kc[12] * x[14]) + (kc[13] * p->fp + kc[14] * u_wordch)), 1.0);
u_cAt_new = CLIP((((kb[8] + kc[15] * p->cAt) + (kc[16] * p->atp + kc[17] * u_wordch)) + kc[18] * u_wend), 1.0);
}
if ((p->S + p->fo + p->FS + p->FD + p->c + p->T + p->F + p->sq1 + p->oq1 + p->oT + x[2] + x[3]) != 0.0) { /* all activations are >= 0 */
u_qmd = CLIP(((kb[9] + kc[19] * x[2]) + (kc[20] * p->sq1 + kc[21] * p->E)), 1.0);
u_qms = CLIP(((kb[10] + kc[22] * x[3]) + (kc[23] * p->sq1 + kc[24] * p->E)), 1.0);
u_c2 = CLIP((kb[11] + kc[25] * p->c), 1.0);
u_fieldopen = CLIP(((kb[12] + kc[26] * p->fo) + kc[27] * x[8]), 1.0);
u_S_eff = CLIP((((kb[13] + kc[28] * p->S) + (kc[29] * u_fieldopen + kc[30] * p->T)) + ((kc[31] * u_qmd + kc[32] * u_qms) + kc[33] * u_c2)), 1.0);
u_sclose = CLIP((((kb[14] + kc[34] * u_S_eff) + (kc[35] * p->T + kc[36] * u_qmd)) + (kc[37] * u_qms + kc[38] * p->c)), 1.0);
u_tclose = CLIP((((kb[15] + kc[39] * u_S_eff) + (kc[40] * p->T + kc[41] * u_qmd)) + (kc[42] * u_qms + kc[43] * p->c)), 1.0);
u_tripleopen = CLIP((((kb[16] + kc[44] * u_S_eff) + (kc[45] * p->T + kc[46] * u_qmd)) + (kc[47] * u_qms + kc[48] * p->c)), 1.0);
u_nlclose = CLIP((((kb[17] + kc[49] * u_S_eff) + (kc[50] * p->T + kc[51] * x[1])) + kc[52] * p->E), 1.0);
u_E_new = CLIP(((kb[18] + kc[53] * u_S_eff) + (kc[54] * x[4] + kc[55] * p->E)), 1.0);
u_fo_new = CLIP((((kb[19] + kc[56] * u_S_eff) + (kc[57] * p->F + kc[58] * x[8])) + (kc[59] * p->E + kc[60] * p->fo)), 1.0);
u_open = CLIP((((kb[20] + kc[61] * x[2]) + (kc[62] * x[3] + kc[63] * u_S_eff)) + (kc[64] * p->C + kc[65] * p->N)), 1.0);
u_open_f = CLIP((((kb[21] + kc[66] * x[2]) + (kc[67] * x[3] + kc[68] * u_S_eff)) + ((kc[69] * p->C + kc[70] * p->N) + (kc[71] * p->pf + kc[72] * p->fp))), 1.0);
u_open_qs = CLIP((((kb[22] + kc[73] * x[2]) + (kc[74] * x[3] + kc[75] * u_S_eff)) + (kc[76] * p->C + kc[77] * p->N)), 1.0);
u_fieldclose = CLIP((((kb[23] + kc[78] * p->FS) + (kc[79] * u_S_eff + kc[80] * p->C)) + (kc[81] * p->FD + kc[82] * x[12])), 1.0);
u_inc = CLIP((((kb[24] + kc[83] * p->FS) + (kc[84] * u_S_eff + kc[85] * p->C)) + kc[86] * x[10]), 1.0);
u_dec = CLIP((((kb[25] + kc[87] * p->FS) + (kc[88] * u_S_eff + kc[89] * p->C)) + (kc[90] * x[11] + kc[91] * p->FD)), 1.0);
u_S_new = CLIP((((kb[26] + kc[92] * u_S_eff) + (kc[93] * u_sclose + kc[94] * u_tclose)) + ((kc[95] * u_nlclose + kc[96] * u_open) + kc[97] * u_fieldclose)), 1.0);
u_c_new = CLIP(((((kb[27] + kc[98] * p->c) + (kc[99] * u_S_eff + kc[100] * u_qmd)) + ((kc[101] * u_qms + kc[102] * u_tripleopen) + (kc[103] * u_tclose + kc[104] * u_sclose))) + (kc[105] * u_open + kc[106] * u_open_qs)), 3.0);
u_T_new = CLIP((((kb[28] + kc[107] * p->T) + (kc[108] * u_tripleopen + kc[109] * u_tclose)) + ((kc[110] * u_open + kc[111] * u_fieldclose) + kc[112] * p->oT)), 1.0);
u_F_new = CLIP((((kb[29] + kc[113] * p->F) + (kc[114] * u_open_f + kc[115] * u_open)) + ((kc[116] * u_sclose + kc[117] * u_tclose) + (kc[118] * u_nlclose + kc[119] * u_fieldclose))), 1.0);
u_sq1_new = CLIP(((((kb[30] + kc[120] * p->sq1) + (kc[121] * u_open_qs + kc[122] * u_sclose)) + ((kc[123] * u_tclose + kc[124] * u_nlclose) + (kc[125] * p->S + kc[126] * u_S_eff))) + (kc[127] * u_fieldclose + kc[128] * p->oq1)), 1.0);
u_FS_new = CLIP(((kb[31] + kc[129] * p->FS) + (kc[130] * u_fieldopen + kc[131] * u_fieldclose)), 1.0);
u_FD_new = CLIP(((kb[32] + kc[132] * p->FD) + (kc[133] * u_inc + kc[134] * u_dec)), 3.0);
u_oq1_new = CLIP((((kb[33] + kc[135] * p->oq1) + (kc[136] * u_fieldopen + kc[137] * p->sq1)) + kc[138] * u_fieldclose), 1.0);
u_oT_new = CLIP((((kb[34] + kc[139] * p->oT) + (kc[140] * u_fieldopen + kc[141] * p->T)) + kc[142] * u_fieldclose), 1.0);
u_lab_STR = CLIP((((kb[35] + kc[143] * u_S_eff) + (kc[144] * u_nlclose + kc[145] * u_open)) + kc[146] * u_fieldclose), 1.0);
}
if ((u_wend) != 0.0) { /* all activations are >= 0 */
u_SE = CLIP((((kb[36] + kc[147] * p->A) + (kc[148] * p->e1 + kc[149] * p->e2d)) + ((kc[150] * p->e3dd + kc[151] * p->d) + kc[152] * u_m3)), 35184372088832.0);
u_ev_DEC = CLIP(((kb[37] + kc[153] * u_wend) + kc[154] * p->cAt), 1.0);
u_ev_CL = CLIP(((kb[38] + kc[155] * u_wend) + (kc[156] * p->cC + kc[157] * p->cAt)), 1.0);
u_ev_STR = CLIP(((kb[39] + kc[158] * u_wend) + (kc[159] * u_open + kc[160] * p->pf)), 1.0);
u_ge1 = CLIP((kb[40] + kc[161] * u_SE), 1.0);
u_le1 = CLIP((kb[41] + kc[162] * u_SE), 1.0);
u_ge2 = CLIP((kb[42] + kc[163] * u_SE), 1.0);
u_le2 = CLIP((kb[43] + kc[164] * u_SE), 1.0);
u_ge3 = CLIP((kb[44] + kc[165] * u_SE), 1.0);
u_le3 = CLIP((kb[45] + kc[166] * u_SE), 1.0);
u_ge4 = CLIP((kb[46] + kc[167] * u_SE), 1.0);
u_le4 = CLIP((kb[47] + kc[168] * u_SE), 1.0);
u_ge5 = CLIP((kb[48] + kc[169] * u_SE), 1.0);
u_le5 = CLIP((kb[49] + kc[170] * u_SE), 1.0);
u_is_def = CLIP(((kb[50] + kc[171] * u_wend) + (kc[172] * u_ge2 + kc[173] * u_le2)), 1.0);
u_is_class = CLIP(((kb[51] + kc[174] * u_wend) + (kc[175] * u_ge3 + kc[176] * u_le3)), 1.0);
u_ev_KW = CLIP(((((kb[52] + kc[177] * u_wend) + (kc[178] * u_ge1 + kc[179] * u_le1)) + ((kc[180] * u_ge2 + kc[181] * u_le2) + (kc[182] * u_ge3 + kc[183] * u_le3))) + ((kc[184] * p->cAt + kc[185] * p->cC) + kc[186] * p->cD)), 1.0);
u_ev_FN = CLIP((((kb[53] + kc[187] * u_wend) + (kc[188] * u_ge5 + kc[189] * u_le5)) + ((kc[190] * p->cD + kc[191] * p->cAt) + kc[192] * p->cC)), 1.0);
u_ev_BI = CLIP((((kb[54] + kc[193] * u_wend) + (kc[194] * u_ge4 + kc[195] * u_le4)) + ((kc[196] * p->cAt + kc[197] * p->cC) + (kc[198] * p->cD + kc[199] * p->cDot))), 1.0);
}
if ((p->W + x[13] + x[6] + x[7] + p->atp + p->cD + p->cC + p->cAt + p->cDot + x[15] + x[14] + p->fp + p->d + p->pos0 + p->pos1 + p->pos2 + p->pos3 + p->pos4 + p->pos5 + p->pos6 + p->tail + p->e2 + p->e3 + p->e3d) != 0.0) { /* all activations are >= 0 */
u_W_new = CLIP((((kb[55] + kc[200] * u_wordch) + (kc[201] * x[0] + kc[202] * p->W)) + ((kc[203] * p->N + kc[204] * u_S_eff) + kc[205] * p->C)), 1.0);
u_atp_new = CLIP(((kb[56] + kc[206] * x[7]) + (kc[207] * u_S_eff + kc[208] * p->C)), 1.0);
u_cDot_new = CLIP((((kb[57] + kc[209] * x[6]) + (kc[210] * u_S_eff + kc[211] * p->C)) + ((kc[212] * p->N + kc[213] * p->cDot) + (kc[214] * u_wordch + kc[215] * u_wend))), 1.0);
u_cD_new = CLIP((((kb[58] + kc[216] * p->cD) + (kc[217] * u_is_def + kc[218] * u_wend)) + kc[219] * x[1]), 1.0);
u_cC_new = CLIP((((kb[59] + kc[220] * p->cC) + (kc[221] * u_is_class + kc[222] * u_wend)) + kc[223] * x[1]), 1.0);
u_d_new = CLIP(((kb[60] + kc[224] * p->d) + kc[225] * u_W_new), 30.0);
u_pos0 = CLIP(((kb[61] + kc[226] * u_W_new) + kc[227] * p->W), 1.0);
u_pos1 = CLIP(((kb[62] + kc[228] * p->pos0) + kc[229] * u_W_new), 1.0);
u_pos2 = CLIP(((kb[63] + kc[230] * p->pos1) + kc[231] * u_W_new), 1.0);
u_pos3 = CLIP(((kb[64] + kc[232] * p->pos2) + kc[233] * u_W_new), 1.0);
u_pos4 = CLIP(((kb[65] + kc[234] * p->pos3) + kc[235] * u_W_new), 1.0);
u_pos5 = CLIP(((kb[66] + kc[236] * p->pos4) + kc[237] * u_W_new), 1.0);
u_pos6 = CLIP(((kb[67] + kc[238] * p->pos5) + kc[239] * u_W_new), 1.0);
u_tail = CLIP(((kb[68] + kc[240] * p->pos6) + (kc[241] * p->tail + kc[242] * u_W_new)), 1.0);
u_e1_new = CLIP(((kb[69] + kc[243] * x[26]) + kc[244] * u_W_new), 117026723984.0);
u_e2_new = CLIP(((kb[70] + kc[245] * x[27]) + kc[246] * u_W_new), 117026723984.0);
u_e3_new = CLIP(((kb[71] + kc[247] * x[28]) + kc[248] * u_W_new), 117026723984.0);
u_lab_W = CLIP(((kb[72] + kc[249] * u_W_new) + kc[250] * u_atp_new), 1.0);
u_a0 = CLIP(((kb[73] + kc[251] * x[18]) + kc[252] * u_pos0), 117026723984.0);
u_a1 = CLIP(((kb[74] + kc[253] * x[19]) + kc[254] * u_pos1), 117026723984.0);
u_a2 = CLIP(((kb[75] + kc[255] * x[20]) + kc[256] * u_pos2), 117026723984.0);
u_a3 = CLIP(((kb[76] + kc[257] * x[21]) + kc[258] * u_pos3), 117026723984.0);
u_a4 = CLIP(((kb[77] + kc[259] * x[22]) + kc[260] * u_pos4), 117026723984.0);
u_a5 = CLIP(((kb[78] + kc[261] * x[23]) + kc[262] * u_pos5), 117026723984.0);
u_a6 = CLIP(((kb[79] + kc[263] * x[24]) + kc[264] * u_pos6), 117026723984.0);
u_at_ = CLIP(((kb[80] + kc[265] * x[25]) + kc[266] * u_tail), 117026723984.0);
u_A_new = CLIP(((((kb[81] + kc[267] * p->A) + (kc[268] * u_W_new + kc[269] * u_a0)) + ((kc[270] * u_a1 + kc[271] * u_a2) + (kc[272] * u_a3 + kc[273] * u_a4))) + ((kc[274] * u_a5 + kc[275] * u_a6) + kc[276] * u_at_)), 35184372088832.0);
}
if ((x[5] + p->C) != 0.0) { /* all activations are >= 0 */
u_C_new = CLIP((((kb[82] + kc[277] * x[5]) + (kc[278] * u_S_eff + kc[279] * p->C)) + kc[280] * x[1]), 1.0);
}
if ((x[0] + p->N + p->ee) != 0.0) { /* all activations are >= 0 */
u_N_new = CLIP(((((kb[83] + kc[281] * x[0]) + (kc[282] * p->W + kc[283] * p->N)) + ((kc[284] * u_wordch + kc[285] * x[6]) + (kc[286] * x[17] + kc[287] * p->ee))) + (kc[288] * u_S_eff + kc[289] * p->C)), 1.0);
u_ee_new = CLIP(((kb[84] + kc[290] * x[16]) + kc[291] * u_N_new), 1.0);
}
s->S = u_S_new;
s->sq1 = u_sq1_new;
s->T = u_T_new;
s->F = u_F_new;
s->E = u_E_new;
s->c = u_c_new;
s->fo = u_fo_new;
s->FS = u_FS_new;
s->FD = u_FD_new;
s->oq1 = u_oq1_new;
s->oT = u_oT_new;
s->C = u_C_new;
s->N = u_N_new;
s->ee = u_ee_new;
s->W = u_W_new;
s->d = u_d_new;
s->pf = u_pf_new;
s->fp = u_fp_new;
s->cD = u_cD_new;
s->cC = u_cC_new;
s->cAt = u_cAt_new;
s->atp = u_atp_new;
s->cDot = u_cDot_new;
s->pos0 = u_pos0;
s->pos1 = u_pos1;
s->pos2 = u_pos2;
s->pos3 = u_pos3;
s->pos4 = u_pos4;
s->pos5 = u_pos5;
s->pos6 = u_pos6;
s->tail = u_tail;
s->A = u_A_new;
s->e1 = u_e1_new;
s->e2 = u_e2_new;
s->e2d = u_e2d_new;
s->e3 = u_e3_new;
s->e3d = u_e3d_new;
s->e3dd = u_e3dd_new;
return (uint16_t)(((uint16_t)(u_lab_STR != 0.0) << 0) | ((uint16_t)(u_C_new != 0.0) << 1) | ((uint16_t)(u_N_new != 0.0) << 2) | ((uint16_t)(u_lab_W != 0.0) << 3) | ((uint16_t)(u_ev_KW != 0.0) << 4) | ((uint16_t)(u_ev_BI != 0.0) << 5) | ((uint16_t)(u_ev_FN != 0.0) << 6) | ((uint16_t)(u_ev_CL != 0.0) << 7) | ((uint16_t)(u_ev_DEC != 0.0) << 8) | ((uint16_t)(u_ev_STR != 0.0) << 9));
}
static inline __attribute__((always_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_lab_STR = (double)((bits >> 0) & 1);
const double f_C_new = (double)((bits >> 1) & 1);
const double f_N_new = (double)((bits >> 2) & 1);
const double f_lab_W = (double)((bits >> 3) & 1);
const double f_ev_KW = (double)((bits >> 4) & 1);
const double f_ev_BI = (double)((bits >> 5) & 1);
const double f_ev_FN = (double)((bits >> 6) & 1);
const double f_ev_CL = (double)((bits >> 7) & 1);
const double f_ev_DEC = (double)((bits >> 8) & 1);
const double f_ev_STR = (double)((bits >> 9) & 1);
const double u_reg_KW = CLIP(((kb[85] + kc[292] * r->b_ev_KW) + (kc[293] * r->u_reg_KW + kc[294] * f_lab_W)), 1.0);
const double u_reg_BI = CLIP(((kb[86] + kc[295] * r->b_ev_BI) + (kc[296] * r->u_reg_BI + kc[297] * f_lab_W)), 1.0);
const double u_reg_FN = CLIP(((kb[87] + kc[298] * r->b_ev_FN) + (kc[299] * r->u_reg_FN + kc[300] * f_lab_W)), 1.0);
const double u_reg_CL = CLIP(((kb[88] + kc[301] * r->b_ev_CL) + (kc[302] * r->u_reg_CL + kc[303] * f_lab_W)), 1.0);
const double u_reg_DEC = CLIP(((kb[89] + kc[304] * r->b_ev_DEC) + (kc[305] * r->u_reg_DEC + kc[306] * f_lab_W)), 1.0);
const double u_reg_STR = CLIP(((kb[90] + kc[307] * r->b_ev_STR) + (kc[308] * r->u_reg_STR + kc[309] * f_lab_W)), 1.0);
s->u_reg_KW = u_reg_KW;
s->u_reg_BI = u_reg_BI;
s->u_reg_FN = u_reg_FN;
s->u_reg_CL = u_reg_CL;
s->u_reg_DEC = u_reg_DEC;
s->u_reg_STR = u_reg_STR;
s->b_ev_KW = f_ev_KW;
s->b_ev_BI = f_ev_BI;
s->b_ev_FN = f_ev_FN;
s->b_ev_CL = f_ev_CL;
s->b_ev_DEC = f_ev_DEC;
s->b_ev_STR = f_ev_STR;
return (int)CLIP(((((kb[91] + kc[310] * u_reg_KW) + (kc[311] * u_reg_BI + kc[312] * u_reg_FN)) + ((kc[313] * u_reg_CL + kc[314] * u_reg_DEC) + (kc[315] * u_reg_STR + kc[316] * f_lab_STR))) + (kc[317] * f_C_new + kc[318] * f_N_new)), 8.0);
}
#define K_N_COEF 319
#define K_N_BIAS 92
#define K_N_GUARD 74
#define K_N_FAMILY 0
#define K_N_PREFIX 0
#define K_PREFIX_LEN 0
/* sorted threshold families: {cell, layer, first bias index, rows, coef index of the tied weight} */
static const int32_t K_FAMILY[K_N_FAMILY + 1][5] = {{0,0,0,0,0}};
/* prefix sums of a unit's weights over a family's columns: {cell, layer, row, first column, rows} */
static const int32_t K_PREFIX[K_N_PREFIX + 1][5] = {{0,0,0,0,0}};
#define K_MAX_GUARD 4
static const int32_t K_COEF[K_N_COEF][4] = {{0,0,0,13},{0,0,4,43},{0,0,4,13},{0,0,6,15},{0,0,6,14},{0,0,6,45},{0,0,6,43},{0,0,6,44},{0,0,7,62},{0,0,8,64},{0,0,9,65},{0,0,10,44},{0,1,1,23},{0,1,1,54},{0,1,1,0},{0,1,3,57},{0,1,3,58},{0,1,3,0},{0,1,3,4},{0,0,1,2},{0,0,1,30},{0,0,1,33},{0,0,2,3},{0,0,2,30},{0,0,2,33},{0,0,3,34},{0,0,5,35},{0,0,5,8},{0,1,0,37},{0,1,0,5},{0,1,0,39},{0,1,0,1},{0,1,0,2},{0,1,0,3},{0,2,0,0},{0,2,0,42},{0,2,0,7},{0,2,0,8},{0,2,0,45},{0,2,1,0},{0,2,1,42},{0,2,1,7},{0,2,1,8},{0,2,1,45},{0,2,2,0},{0,2,2,42},{0,2,2,7},{0,2,2,8},{0,2,2,45},{0,2,3,0},{0,2,3,42},{0,2,3,16},{0,2,3,44},{0,2,4,0},{0,2,4,19},{0,2,4,44},{0,2,5,0},{0,2,5,43},{0,2,5,23},{0,2,5,44},{0,2,5,46},{0,2,7,17},{0,2,7,18},{0,2,7,0},{0,2,7,51},{0,2,7,52},{0,2,8,17},{0,2,8,18},{0,2,8,0},{0,2,8,51},{0,2,8,52},{0,2,8,56},{0,2,8,57},{0,2,9,17},{0,2,9,18},{0,2,9,0},{0,2,9,51},{0,2,9,52},{0,2,10,47},{0,2,10,0},{0,2,10,51},{0,2,10,48},{0,2,10,26},{0,2,11,47},{0,2,11,0},{0,2,11,51},{0,2,11,24},{0,2,12,47},{0,2,12,0},{0,2,12,51},{0,2,12,25},{0,2,12,48},{0,3,0,27},{0,3,0,0},{0,3,0,1},{0,3,0,3},{0,3,0,7},{0,3,0,10},{0,3,1,57},{0,3,1,27},{0,3,1,32},{0,3,1,33},{0,3,1,2},{0,3,1,1},{0,3,1,0},{0,3,1,7},{0,3,1,9},{0,3,2,55},{0,3,2,2},{0,3,2,1},{0,3,2,7},{0,3,2,10},{0,3,2,61},{0,3,3,56},{0,3,3,8},{0,3,3,7},{0,3,3,0},{0,3,3,1},{0,3,3,3},{0,3,3,10},{0,3,4,54},{0,3,4,9},{0,3,4,0},{0,3,4,1},{0,3,4,3},{0,3,4,53},{0,3,4,27},{0,3,4,10},{0,3,4,60},{0,3,5,58},{0,3,5,35},{0,3,5,10},{0,3,6,59},{0,3,6,11},{0,3,6,12},{0,3,7,60},{0,3,7,35},{0,3,7,54},{0,3,7,10},{0,3,8,61},{0,3,8,35},{0,3,8,55},{0,3,8,10},{0,3,9,27},{0,3,9,3},{0,3,9,7},{0,3,9,10},{0,1,2,68},{0,1,2,69},{0,1,2,70},{0,1,2,71},{0,1,2,52},{0,1,2,10},{0,1,4,4},{0,1,4,57},{0,1,5,4},{0,1,5,56},{0,1,5,57},{0,3,28,34},{0,3,28,7},{0,3,28,64},{0,2,15,2},{0,2,16,2},{0,2,17,2},{0,2,18,2},{0,2,19,2},{0,2,20,2},{0,2,21,2},{0,2,22,2},{0,2,23,2},{0,2,24,2},{0,3,23,34},{0,3,23,17},{0,3,23,18},{0,3,24,34},{0,3,24,19},{0,3,24,20},{0,3,25,34},{0,3,25,15},{0,3,25,16},{0,3,25,17},{0,3,25,18},{0,3,25,19},{0,3,25,20},{0,3,25,67},{0,3,25,66},{0,3,25,65},{0,3,26,34},{0,3,26,23},{0,3,26,24},{0,3,26,65},{0,3,26,67},{0,3,26,66},{0,3,27,34},{0,3,27,21},{0,3,27,22},{0,3,27,67},{0,3,27,66},{0,3,27,65},{0,3,27,68},{0,2,14,6},{0,2,14,15},{0,2,14,54},{0,2,14,52},{0,2,14,0},{0,2,14,51},{0,2,25,22},{0,2,25,0},{0,2,25,51},{0,2,26,21},{0,2,26,0},{0,2,26,51},{0,2,26,52},{0,2,26,61},{0,2,26,6},{0,2,26,9},{0,4,8,55},{0,4,8,23},{0,4,8,41},{0,4,8,46},{0,4,9,56},{0,4,9,24},{0,4,9,41},{0,4,9,46},{0,3,11,63},{0,3,11,14},{0,3,12,14},{0,3,12,62},{0,3,13,69},{0,3,13,14},{0,3,14,70},{0,3,14,14},{0,3,15,71},{0,3,15,14},{0,3,16,72},{0,3,16,14},{0,3,17,73},{0,3,17,14},{0,3,18,74},{0,3,18,14},{0,3,19,75},{0,3,19,76},{0,3,19,14},{0,3,20,50},{0,3,20,14},{0,3,21,51},{0,3,21,14},{0,3,22,52},{0,3,22,14},{0,3,29,14},{0,3,29,25},{0,4,0,47},{0,4,0,12},{0,4,1,48},{0,4,1,13},{0,4,2,49},{0,4,2,14},{0,4,3,50},{0,4,3,15},{0,4,4,51},{0,4,4,16},{0,4,5,52},{0,4,5,17},{0,4,6,53},{0,4,6,18},{0,4,7,54},{0,4,7,19},{0,5,0,53},{0,5,0,42},{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,5,0,7},{0,2,6,20},{0,2,6,0},{0,2,6,51},{0,2,6,16},{0,2,13,15},{0,2,13,54},{0,2,13,52},{0,2,13,6},{0,2,13,21},{0,2,13,28},{0,2,13,53},{0,2,13,0},{0,2,13,51},{0,3,10,41},{0,3,10,13},{1,0,0,16},{1,0,0,10},{1,0,0,3},{1,0,1,17},{1,0,1,11},{1,0,1,3},{1,0,2,18},{1,0,2,12},{1,0,2,3},{1,0,3,19},{1,0,3,13},{1,0,3,3},{1,0,4,20},{1,0,4,14},{1,0,4,3},{1,0,5,21},{1,0,5,15},{1,0,5,3},{2,0,0,0},{2,0,0,1},{2,0,0,2},{2,0,0,3},{2,0,0,4},{2,0,0,5},{2,0,0,6},{2,0,0,7},{2,0,0,8}};
static const int32_t K_BIAS[K_N_BIAS][3] = {{0,0,0},{0,0,4},{0,0,6},{0,0,7},{0,0,8},{0,0,9},{0,0,10},{0,1,1},{0,1,3},{0,0,1},{0,0,2},{0,0,3},{0,0,5},{0,1,0},{0,2,0},{0,2,1},{0,2,2},{0,2,3},{0,2,4},{0,2,5},{0,2,7},{0,2,8},{0,2,9},{0,2,10},{0,2,11},{0,2,12},{0,3,0},{0,3,1},{0,3,2},{0,3,3},{0,3,4},{0,3,5},{0,3,6},{0,3,7},{0,3,8},{0,3,9},{0,1,2},{0,1,4},{0,1,5},{0,3,28},{0,2,15},{0,2,16},{0,2,17},{0,2,18},{0,2,19},{0,2,20},{0,2,21},{0,2,22},{0,2,23},{0,2,24},{0,3,23},{0,3,24},{0,3,25},{0,3,26},{0,3,27},{0,2,14},{0,2,25},{0,2,26},{0,4,8},{0,4,9},{0,3,11},{0,3,12},{0,3,13},{0,3,14},{0,3,15},{0,3,16},{0,3,17},{0,3,18},{0,3,19},{0,3,20},{0,3,21},{0,3,22},{0,3,29},{0,4,0},{0,4,1},{0,4,2},{0,4,3},{0,4,4},{0,4,5},{0,4,6},{0,4,7},{0,5,0},{0,2,6},{0,2,13},{0,3,10},{1,0,0},{1,0,1},{1,0,2},{1,0,3},{1,0,4},{1,0,5},{2,0,0}};
/* units whose block is skipped when the listed input columns are all zero; the loader proves each one */
static const int32_t K_GUARD[K_N_GUARD][3 + K_MAX_GUARD] = {{0,0,0,13,-1,-1,-1},{0,0,4,43,-1,-1,-1},{0,0,6,15,14,-1,-1},{0,0,7,62,-1,-1,-1},{0,0,8,64,-1,-1,-1},{0,0,9,65,-1,-1,-1},{0,0,10,44,-1,-1,-1},{0,1,1,23,54,-1,-1},{0,1,3,57,58,-1,-1},{0,0,1,2,-1,-1,-1},{0,0,2,3,-1,-1,-1},{0,0,3,34,-1,-1,-1},{0,0,5,35,-1,-1,-1},{0,1,0,37,-1,-1,-1},{0,2,0,0,-1,-1,-1},{0,2,1,0,-1,-1,-1},{0,2,2,0,-1,-1,-1},{0,2,3,0,-1,-1,-1},{0,2,4,0,-1,-1,-1},{0,2,5,0,-1,-1,-1},{0,2,7,17,18,-1,-1},{0,2,8,17,18,-1,-1},{0,2,9,18,-1,-1,-1},{0,2,10,47,-1,-1,-1},{0,2,11,47,-1,-1,-1},{0,2,12,47,-1,-1,-1},{0,3,0,27,7,10,-1},{0,3,1,27,7,9,-1},{0,3,2,55,2,10,-1},{0,3,3,56,8,10,-1},{0,3,4,54,9,27,10},{0,3,5,58,35,-1,-1},{0,3,6,59,11,-1,-1},{0,3,7,60,35,-1,-1},{0,3,8,61,35,-1,-1},{0,3,9,27,7,10,-1},{0,1,4,4,-1,-1,-1},{0,1,5,4,-1,-1,-1},{0,3,28,34,-1,-1,-1},{0,3,23,34,-1,-1,-1},{0,3,24,34,-1,-1,-1},{0,3,25,34,-1,-1,-1},{0,3,26,34,-1,-1,-1},{0,3,27,34,-1,-1,-1},{0,2,14,6,54,-1,-1},{0,2,25,22,-1,-1,-1},{0,2,26,21,61,-1,-1},{0,4,8,55,23,-1,-1},{0,4,9,56,24,-1,-1},{0,3,11,14,-1,-1,-1},{0,3,12,14,-1,-1,-1},{0,3,13,69,-1,-1,-1},{0,3,14,70,-1,-1,-1},{0,3,15,71,-1,-1,-1},{0,3,16,72,-1,-1,-1},{0,3,17,73,-1,-1,-1},{0,3,18,74,-1,-1,-1},{0,3,19,75,76,-1,-1},{0,3,20,14,-1,-1,-1},{0,3,21,14,-1,-1,-1},{0,3,22,14,-1,-1,-1},{0,3,29,14,25,-1,-1},{0,4,0,12,-1,-1,-1},{0,4,1,13,-1,-1,-1},{0,4,2,14,-1,-1,-1},{0,4,3,15,-1,-1,-1},{0,4,4,16,-1,-1,-1},{0,4,5,17,-1,-1,-1},{0,4,6,18,-1,-1,-1},{0,4,7,19,-1,-1,-1},{0,5,0,42,-1,-1,-1},{0,2,6,20,51,-1,-1},{0,2,13,15,52,-1,-1},{0,3,10,13,-1,-1,-1}};
|